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);}
在键盘监听事件中,添加空格对于游戏失败之后重新开始游戏的判断;同时,改进当前蛇头方向与按键方向相反时新的蛇头方向的判定:
//键盘监听事件@Overridepublic 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;}}
运行结果:
游戏默认界面:
游戏运行中:
游戏失败:
至此,简单的贪吃蛇小游戏已全部编写完毕。