Java帮助 - 制作'清扫'游戏

时间:2016-09-19 04:44:34

标签: java

我们的任务是制作一个简单的'pac-man'游戏,它只是吃掉矩形内的垃圾。垃圾是“*”。 到目前为止我的代码:

public class Sweeper 
{    
    public static void main(String[] args) throws InterruptedException 
    {
        //************************************************************
        // Variable set up
        int sy = 10, sx= 10; // Box size
        int x= 5, y= 5; // Start point
        int maxmc = 8; // Max distance moving
        char [] [] env = new char[sy][sx];
        int right = sx - 2, top = sy - 2, left = sx - (right + 1) , bottom = sy - (top + 1);
        //************************************************************

        //************************************************************
        // Filling the grid with Stars
        for(int i=0; i<sy;i++)
        {
            for(int j =0; j < sx; j++)
            {
                env[i][j] = '*';
            }
        }
        //************************************************************

        int mc = 0, direction = 0, count =  (right * top);
        // The actual game
        while(count != 0)
        {
            direction = (int)(Math.random() * 3);
            // Display
            //System.out.println("\n\n\n\n\n");
            for(int i = 0; i < sy; i++)
            {
                for(int j= 0; j< sx; j++)
                {
                    System.out.print(env[i][j]);

                }

                System.out.println();
            }

            System.out.println("\n\n\n");

            Thread.sleep(700);

            System.out.println(direction);

            if((x <= right && x >= left && y <= top && y >= bottom))
            {
                if(env[x][y] == ' ')
                {
                    // RIGHT
                    if(direction == 0)
                    {
                        env[y][x] = '@';
                        x--;
                        env[y][x+2] = ' ';
                    }
                    // left
                    else if(direction == 1)
                    {
                        env[y][x] = '@';
                        x++;
                        env[y][x-2] = ' ';
                    }
                    // TOP
                    else if(direction ==2)
                    {
                        env[y][x] = '@';
                        y--;
                        env[y+2][x] = ' ';
                    }
                    // bottom
                    else if(direction ==3)
                    {
                        env[y][x] = '@';
                        y++;
                        env[y-2][x] = ' ';
                    }
                }
                else
                {
                    if(direction == 0)
                    {
                        env[y][x] = '@';
                        x--;
                        env[y][x+2] = ' ';
                    }
                    // left
                    else if(direction == 1)
                    {
                        env[y][x] = '@';
                        x++;
                        env[y][x-2] = ' ';
                    }
                    // TOP
                    else if(direction ==2)
                    {
                        env[y][x] = '@';
                        y--;
                        env[y+2][x] = ' ';
                    }
                    // bottom
                    else if(direction ==3)
                    {
                        env[y][x] = '@';
                        y++;
                        env[y-2][x] = ' ';
                    }
                    // Keeps track of the trash
                    count--;
                }
            }

        }

    }

}

我的问题: 它复制'@'并有时停止移动。 我试图让它移动aorund直到所有内部8x8星形符号全部消失。

1 个答案:

答案 0 :(得分:0)

只是为了清理你的代码:你的移动算法与(4 if/else语句)重复。您只需要在count--语句中添加if(! env[x][y] == ' ')

对于你的问题:你严重检查你的边界条件,你做

env[y][x] = '@';
x--;
env[y][x+2] = ' ';

但是如果是x=1,那么在代码之后它是0,并且因为你有

        if((x <= right && x >= left && y <= top && y >= bottom))

使用x=0right=0,它永远不会进入语句,count无法更改,并且它会无限循环。