我一直在研究一些代码并合并我创建的两个程序,但我知道我错过了很多信息,因为我有很多错误,但我似乎无法修复错误。下面我已经包含了已经分成类的整个代码。我正在制作一个版本的太空入侵者。
主要课程:
Bullets [] bullets = new Bullets[10];
Player player = new Player();
Boolean keyLftPressed = false, keyRghtPressed = false;
//Enemies[] enemies = new Enemies();
int state;
String gameLevel = "Main menu";
Boolean startTime = false;
void setup() {
for(int i=0; i<bullets.length; i++)
{
// if(i%2==0)
// bullets[i] = new Bullets();
// else
// bullets[i] = new Bullets(i);
}
size(800, 600);
state = 0;
}
void draw() {
background(255);
gameState();
player1.display();
movePlayer1();
handleEnemies();
handleBullets();
gamewon();
}
void gameState() {
if (gameLevel == "Main menu") {
background(0);
fill(255, 255, 255);
rect(270, 270, 280, 50, 20, 20, 20, 20);
//Draws rectangle for play game
fill(0);
textSize(30);
text("Play Game", 330, 305);
fill(255, 0, 0);
textSize(50);
text("Space Invaders", 220, 120);
if (mousePressed && mouseX > 250 && mouseX < 250 + 280 && mouseY > 270 && mouseY < 270 + 50)
{
gameLevel = "Level 1";
}
} else if (gameLevel == "Level 1")
{
background (255, 2555 , 255);
}
}
Bullets Class:
class Bullets {
class Bullet {
float x, y;
float velocity;
Bullet(float x, float y, float velocity) {
this.x = x;
this.y = y;
this.velocity = velocity;
}
void display(){
fill(80);
rect(this.x, this.y, 5,15);
}
void move(){
this.y+=this.velocity;
if (this.y > height || this.y < 0){
bullets.remove(this);
}
}
Class Enemies:
class Enemies {
float x, y;
float velocity;
Enemy(float x, float y) {
this.x = x;
this.y = y;
this.velocity = 3;
}
void display() {
fill(0,255,0);
ellipse(this.x, this.y, 30, 30);
noFill();
}
void move() {
this.x+=this.velocity;
if (this.x > width*.9) {
this.x = width*.9;
this.velocity *= -1;
this.y+=30;
}
if (this.x < width*.1) {
this.velocity*=-1;
this.x = width*.1;
this.y+=30;
}
}
void hitCheck() {
for (int i = 0; i < bullets.size(); i++){
Bullet b = (Bullet) bullets.get(i);
float distBetween = dist(b.x, b.y, this.x, this.y);
if (distBetween < 15 && b.velocity < 0){
score++;
enemies.remove(this);
float x = width*.1 + i%numCol*50;
float y = 60 + int(i/numCol)*60 ;
enemies.add(new Enemy(x, y));
}
}
}
}
Class Player:
class Player {
void movePlayer1() {
if (keyLftPressed) {
player1.x -=10;
}
if (keyRghtPressed) {
player1.x +=10;
}
}
void keyPressed() {
if (keyCode == LEFT) {
keyLftPressed = true;
}
else {
if (keyCode == RIGHT) {
keyRghtPressed = true;
}
else {
if (key == 'f') {
player1.shoot();
}
}
}
}
void keyReleased() {
if (keyCode == LEFT) {
keyLftPressed = false;
}
else {
if (keyCode == RIGHT) {
keyRghtPressed = false;
}
}
}
Class Score:
void gameFinish() {
{
for (int i = 0; i < 3; i++)
{
fill(color(255,0,0));
fill(255, 0, 0);
textAlign(CENTER);
text("Game over", width/2, height/2 - 50);
text(" Final score : "+ score, width/2, height/2 + 50);
}
}
}
}
void gamewon()
{
if (score == 10)
{
background(0);
fill(color(255,0,0));
fill(255, 0, 0);
textAlign(CENTER);
text("Congratulations you won!", width/2, height/5);
text(" Your final score is : "+ score, width/2, height/5 + 30);
text("Do you wish to continue?",width/2, height/2);
text(" If so press Y to Continue or N to exit ", width/2, height/2+30);
noLoop();
}
}
答案 0 :(得分:1)
我不想让人沮丧,但这段代码很乱。你在这里遇到了很多错误,并且要求我们完成所有这些错误,这是一个很大的问题。
话虽这么说,但我会试着让你开始朝着正确的方向前进。
首先,您在其中几个类中缺少关闭大括号。正确的缩进将帮助您缩小范围,或者您可以考虑将每个类放在自己的选项卡中。
然后在Player
课程中,使用名为player1
的变量。该变量定义在哪里?你的意思是使用player
变量吗?就此而言,由于您已经在Player
课程中,为什么要提到一个变量呢?你不应该直接使用该实例中的x
变量吗?
这将我们带到下一个问题:您的Player
课程实际上并没有定义x
变量!
同样,您的Player
类会调用shoot()
函数,该函数似乎不存在。你必须定义那个功能。
然后让我们看到这里......您的Score
班级使用的score
变量似乎无法在任何地方声明。
此外,您的bullets
变量是一个数组,但您在其上调用仅适用于ArrayList
对象的函数。选择其中一个。
您还可以调用一系列不存在的函数:movePlayer1()
,handleEnemies()
,handleBullets()
和gameWon()
。其中一些函数是在类内部定义的,因此您需要使用该类的实例来获取函数。像这样:
Example e = new Example();
e.function();
class Example{
void function(){
println("here");
}
}
然后,您的Enemies
类的构造函数为Enemy
,这是无效的。选择其中一个。
你不会喜欢听到这个,但老实说,你最好的选择可能是从头开始。我猜你是在尝试从不同来源复制粘贴所有这些代码,而不是真正理解代码在做什么,这是一个可怕的想法。即使对于有经验的程序员来说,这也行不通。
相反,请尝试将问题分解为更小的部分。在屏幕上获取一个矩形,然后按箭头键使其移动,然后添加拍摄能力。然后尝试添加一些敌人,但只有在前面的步骤完美运行后才能使用!
如果您遇到困难,请发布MCVE,其中显示您坚持的小步骤 - 而不是整个项目!