处理3.06b合并程序

时间:2016-03-11 14:25:42

标签: java processing

我一直在研究一些代码并合并我创建的两个程序,但我知道我错过了很多信息,因为我有很多错误,但我似乎无法修复错误。下面我已经包含了已经分成类的整个代码。我正在制作一个版本的太空入侵者。

主要课程:

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();
      }
    } 

1 个答案:

答案 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,其中显示您坚持的小步骤 - 而不是整个项目!