有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用数组的java蛇游戏

我正在使用数组制作一个蛇游戏。我想存储每个蛇身的xy坐标,以便以后可以使用它进行碰撞或其他操作

我创造了价值(?)每按一次键xCoordinate[row or col]的值就会增加或减少1,但我认为这不是存储坐标的正确方法。另外,按下一个键只会改变方向,所以只能增加或减少一次。这甚至不起作用

为了存储坐标,我应该做什么

import java.util.Random;
import java.util.Scanner;   //allows us to use the scanner package

public class KeyInput {

    static MainBoard b; //initialize board named b

    public static void main(String[] args){

        Scanner input = new Scanner(System.in);
        Random rand = new Random();
        final int ROWS = 25, COLS = 25;
        int row=0, col =0;
        boolean finished = false;
        int[] xCoordsFood, yCoordsFood;
        int[] xCoordsSnake, yCoordsSnake;

        b = new MainBoard(ROWS, COLS); 

        xCoordsFood = new int[25];
        yCoordsFood = new int[25];
        xCoordsSnake = new int[25];
        yCoordsSnake = new int[25];

        // MAIN GAME LOOP
        while(!finished){
            //get random location of food
            int loc = rand.nextInt(25);
            for (int i = 0; i < 25; i++) {
                xCoordsFood[i] = rand.nextInt(25);
                yCoordsFood[i] = rand.nextInt(25);
            } 

            b.putPeg("red",row,col);

            b.displayMessage("Key: " + b.getKey()); 
            if (b.getKey() == 'w'){
                row --;
                xCoordsSnake[row] =- 1;
                System.out.print(xCoordsSnake[row]);
            }
            if (b.getKey() == 'a'){
                col--;
                yCoordsSnake[col] =- 1;
                System.out.print(yCoordsSnake[col]);
            }
            if (b.getKey() == 's'){
                row ++;
                xCoordsSnake[row] =+ 1;
                System.out.print(xCoordsSnake[row]);
            }
            if (b.getKey() == 'd'){
                col++;
                yCoordsSnake[col] =+ 1;
                System.out.print(yCoordsSnake[col]);
            }
            // DELAY SO THAT ANIMATION IS SLOWED DOWN
            try {
                Thread.sleep(200);
            }
            catch (InterruptedException e){
            }
            // CHECK IF SQUARE GOES OUT OF BOUNDS
            if (row<0 || row>=ROWS || col<0 || col>=COLS){
                finished = true;
            }
            System.out.println(b.getKey());     
        }
        b.displayMessage("GAME OVER!"); 

    }
}

共 (1) 个答案

  1. # 1 楼答案

    由于数据结构的大小是可变的,所以应该使用高效的数据结构来添加新元素,比如链表

    此外,不必移动数组中的所有值,因为蛇的各个部分将占据其他部分的位置。例如,你只需要去掉尾巴,在每个动作中添加一个新的头部

    在编写代码以获得更简单、更高效的解决方案之前,仔细考虑这个问题是很重要的