失败判定
添加状态
boolean isFail=false;//游戏失败状态
paintComponent方法添加代码
if (isFail){
g.setColor(Color.red);
g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体
g.drawString("失败,按下空格重新开始游戏",300,300);
}
keyPressed事件改写代码
if (keyCode==KeyEvent.VK_SPACE){//如果按下的是空格键
if (isFail){
//重新开始
isFail=false;
init();
}else{
isStart=!isStart;//取反
}
repaint();
}
actionPerformed方法
if (isStart&&isFail==false){//如果游戏是开始状态,就让小蛇动起来
//吃食物
if (snakeX[0]==foodx&&snakeY[0]==foody){
length++;//长度+1
//再次随机食物
foodx=25+25*random.nextInt(34);
foody=75+25*random.nextInt(24);
}
//移动
for (int i = length-1; i > 0 ; i--) {//后一节移到前一节的位置
snakeX[i]=snakeX[i-1];
snakeY[i]=snakeY[i-1];
}
//走向
if (fx.equals("R")){
snakeX[0]=snakeX[0]+25;
//边界判断
if (snakeX[0]>850){
snakeX[0]=25;
}
}else if (fx.equals("L")){
snakeX[0]=snakeX[0]-25;
//边界判断
if (snakeX[0]<25){
snakeX[0]=850;
}
}else if (fx.equals("U")){
snakeY[0]=snakeY[0]-25;
//边界判断
if (snakeY[0]<75){
snakeY[0]=650;
}
}else if (fx.equals("D")){
snakeY[0]=snakeY[0]+25;
//边界判断
if (snakeX[0]>650){
snakeX[0]=75;
}
}
//失败判断
for (int i = 1; i < length; i++) {
if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){
isFail=true;
}
}
repaint();//重画
}
timer.start();//定时器开启
}
积分系统
定义成绩
int score;//成绩
init()方法里初始化分数
score=0;
paintComponent方法添加代码画出积分
//画积分
g.setColor(Color.BLACK);
g.setFont(new Font("微软雅黑",Font.BOLD,18));//设置字体
g.drawString("长度"+length,750,35);
g.drawString("分数"+score,750,50);