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;
}
}
运行结果:
游戏默认界面:
游戏运行中:
游戏失败:
至此,简单的贪吃蛇小游戏已全部编写完毕。