2016-06-14 46 views
0

old code食品閃爍,而不是在躲閃遊戲被吃掉

目前,我試圖讓遊戲中的鼠標控制,將左右移動,收集小球塊。每當一個球產生時,敵人就會出現,並沿直線移動。

我的程序試圖實現,但是所有敵人都立即產卵並且只能向右移動。食物在食用時不會消失。相反,當我移動鼠標時,食物在整個地方閃爍,敵人全部移向右側。我不確定如何讓食物出現一次並留在那裏,然後當玩家吃掉它時,它會消失並在其他地方產生另一個食物,併產生一個敵人,並在左右或上下彈跳離開牆壁。

我想在一個地方製作食物,然後當我吃它時,刪除食物並隨機產生另一種食物。

我想make something similar to this.

感謝您的幫助。

編輯:基於新的代碼關閉僞碼的@ AJC的回答

import java.util.ArrayList; 
import java.util.Random; 

public class Game{ 
    public static void main(String[] args) { 
     StdDraw.setXscale(0,100); 
     StdDraw.setYscale(0,100); 

     int foodX = 0; 
     int foodY = 0; 

     ArrayList enemyXPos = new ArrayList(); 
     ArrayList enemyYPos = new ArrayList(); 
     ArrayList enemySpeeds = new ArrayList(); 
     int score = 0; 
     Random rand = new Random(); 

     while (true) { 
      double playerX = StdDraw.mouseX(); 
      double playerY = StdDraw.mouseY(); 
      StdDraw.clear(); 

      int enemyX = 0, enemyY = 0; 


      if (playerX == foodX && playerY == foodY) { 
       score += 1; 

       foodX = rand.nextInt(100); 
       foodY = rand.nextInt(100); 


       enemyX = rand.nextInt(100); 
       enemyY = rand.nextInt(100); 

       enemyXPos.add(enemyX); 
       enemyYPos.add(enemyY); 
       int enemySpeed = rand.nextInt(20); 
       enemySpeeds.add(enemySpeed); 
      } 

      for (int j = 0; j < enemyXPos.size()-1; j++) { 
       if ((int) enemyXPos.get(j) == playerX && (int) enemyYPos.get(j) == playerY) { 
        break; 
       } 

      } 
      for (int j = 0; j < enemyXPos.size()-1; j++) { 
       enemyXPos.add(j, (int) enemyXPos.get(j) + (int) enemySpeeds.get(j)); 
       enemyYPos.add(j, (int) enemyXPos.get(j) + (int) enemySpeeds.get(j)); 
      } 


      StdDraw.setPenColor(StdDraw.BLUE); 
      StdDraw.filledCircle(playerX, playerY, 5); 

      StdDraw.setPenColor(StdDraw.GREEN); 
      StdDraw.filledCircle(foodX, foodY, 2); 

      for (int j = 0; j < enemyXPos.size()-1; j++) { 
       StdDraw.setPenColor(StdDraw.RED); 
       StdDraw.filledCircle(enemyX, enemyY, 2); 
      } 
      StdDraw.show(); 
     } 
    } 
} 
+0

要確定什麼代表你的代碼(食物,塊和敵人)中的這三件事情是非常困難的。 –

+0

查看'ArrayList'以及它如何幫助你擁有多個單獨的敵人。想一想「吃東西的玩家」作爲一個事件;有一種方法來檢測這個事件,只有這樣你才能重新定位食物。就其本身而言,你的代碼並不是一個很大的嘗試,而你的問題太寬泛而無法直接回答:就像給敵人隨機化一個位置和方向是一個完全不同的問題,你應該找到很多答案。 – BeyelerStudios

+0

@Beyeler我會環顧四周,看看我能找到什麼。 –

回答

2

有在你的代碼

  1. 您在食品設置一個隨機位置每場比賽圈數的問題,所以它不會留在一個地方。你需要記住當前食物的位置,並設置一個新的位置當玩家接觸它
  2. 敵人正在由一個變量的所有控制,所以他們會在同一個方向上的所有舉動顯然
  3. 有一些其他的邏輯缺陷,像其他對象的更新時,玩家不動
  4. 我也建議代碼組織成部分,如分離平局和更新週期

新的僞得到跳過:

Variables: 
- Current food position 
- List of enemy positions 
- List of enemy velocities 

Game loop: 
    //Update stuff 
    Get mouse location 
    Set player location to mouse location 

    If player is touching food then 
     Increase score 
     Set food position to random position 
     Spawn new enemy: 
      Add new random position to enemy position list 
      Add new random velocity to enemy velocity list 
    End if 

    For each enemy: 
     If enemy is touching player than 
      End game 
     End if 
    End for 

    For each enemy: 
     Update enemy location: 
      Add velocity of enemy to position of enemy 
      (posX=posX+velX) 
      (posY=posY+velY) 
    End for 

    //Draw stuff 
    Draw player 
    Draw food 
    For each enemy: 
     Draw that enemy 
    End for 
End game loop 
+0

我已經根據此做了另一個副本。然而,這次食物拒絕在我點擊它後自行刪除。查看編輯 –

+0

你確定你的碰撞檢查是正確的嗎?爲了讓您的新代碼正常工作,播放器和食物必須位於相同的像素上。粗略但更好的碰撞檢測將檢查廣場中心與玩家中心之間的距離是否小於玩家圈的半徑。 – AJC

+0

@RegisteredUser你確定你的碰撞檢查是正確的嗎?爲了讓您的新代碼正常工作,播放器和食物必須位於相同的像素上。粗略但更好的碰撞檢測將檢查廣場中心與玩家中心之間的距離是否小於玩家圈的半徑。 – AJC