【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断

GUI编程

04 贪吃蛇小游戏

4.4 第四步:食物及成绩判断

首先,添加食物与分数的数据定义:

	//食物的坐标
    int foodX;
    int foodY;
    Random random = new Random();

    //积分面板数据结构
    int score;

在初始化方法中,添加(画出)食物与分数:

		//将食物随机分布于游戏界面
        foodX = 25 + 25 * random.nextInt(34);
        foodY = 75 + 25 * random.nextInt(24);

        score = 0;  //定义初始得分

绘制静态面板中,画出积分面板、食物,并增加游戏失败设定显示的语句:

		//画出积分面板
        g.setColor(Color.white);
        g.setFont(new Font("宋体", Font.BOLD, 18));
        g.drawString("长度  " + length, 750, 30);
        g.drawString("得分  " + score, 750, 55);

        //画出食物
        Data.food.paintIcon(this, g, foodX, foodY);
        
        //绘制当前游戏状态
        if (!isStart) {
            g.setColor(Color.white);
            g.setFont(new Font("宋体", Font.BOLD, 40));
            g.drawString("按下空格开始游戏", 270, 300);
        }
        if (isFail) {
            g.setColor(Color.red);
            g.setFont(new Font("宋体", Font.BOLD, 40));
            g.drawString("游戏失败,按下空格重新开始", 220, 300);
        }

在键盘监听事件中,添加空格对于游戏失败之后重新开始游戏的判断;同时,改进当前蛇头方向与按键方向相反时新的蛇头方向的判定:

//键盘监听事件
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();  //获取键盘按键
        if (keyCode == KeyEvent.VK_SPACE) {
            if (isFail) {  //重新开始
                isFail = false;
                init();
            } else {  //正常开始
            isStart = !isStart;
            repaint();
            }
        }
        //键盘监听到按键后画上对应方向的蛇头
        if (keyCode == KeyEvent.VK_UP && !direction.equals("D")) {
            direction = "U";
        } else if (keyCode == KeyEvent.VK_DOWN && !direction.equals("U")) {
            direction = "D";
        } else if (keyCode == KeyEvent.VK_LEFT && !direction.equals("R")) {
            direction = "L";
        } else if (keyCode == KeyEvent.VK_RIGHT && !direction.equals("L")) {
            direction = "R";
        }
    }

游戏事件的监听中,添加是否吃到食物与游戏失败的判定:

		   //判断蛇头是否吃到食物
		   if (snakeX[0] == foodX && snakeY[0] == foodY) {
                length++;
                foodX = 25 + 25 * random.nextInt(34);
                foodY = 75 + 25 * random.nextInt(24);
                score += 10;
            }
		   //失败判定
		   for (int i = 1; i < length; i++) {
                if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {
                    isFail = true;
                    break;
                }
            }

运行结果:

游戏默认界面:

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断_第1张图片

游戏运行中:

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断_第2张图片

游戏失败:

【GUI】-- 13 贪吃蛇小游戏之食物及成绩判断_第3张图片

至此,简单的贪吃蛇小游戏已全部编写完毕。


你可能感兴趣的:(java,GUI,笔记)