java贪吃蛇保存_用java实现贪吃蛇小游戏

//该类是食物相关类,实现同一时间有且仅有一个食物存在,主要利用多线程的通信机制

packageSnake;importjava.util.Random;public classGetFood {//食物消失与生成的类//每一个食物也是一个节点

Random rx = new Random();//随机生成食物的x坐标

Random ry = new Random();//随机生成食物的y坐标

Random rc = newRandom();//将背景按节点大小划分为一定的格子,食物只能产生在格子中以保证蛇一定可以吃到

int rowy = Background.BACK_WIDTH/Node.NODE_DIA;int rowx = Background.BACK_HEIGHT/Node.NODE_DIA;//食物类

classFood{//坐标

public int foodx =-1;public int foody =-1;public int color = 1;//是否需要产生食物

public boolean isGetFood = true;//计算分数

int count=0;

}//用多线程实现食物的消亡与产生,利用等待唤醒机制保证食物的同步

class CreateFood extendsThread {//提供锁对象

privateFood food;publicCreateFood(Food food){this.food=food;

}

@Overridepublic voidrun() {while(true){synchronized(food){if(!food.isGetFood){try{

food.wait();//如果有食物进入等待

} catch(InterruptedException e) {

e.printStackTrace();

}

}else{//如果没有食物随机生成一个食物(坐标)

if(Is.is_Strength){

food.color=(int)(Math.random()*10);

}

food.foodx=Node.NODE_DIA*(rx.nextInt(rowy-2)+1);

food.foody=Node.NODE_DIA*(ry.nextInt(rowx-3));//设置一定范围,增强游戏体验

food.isGetFood=false;//产生食物以后修改食物的状态

food.notify();//唤醒吃食物的线程

}

}

}

}

}class EatFood extendsThread{private Food food;//提供锁对象

private SnakeClass snake;//蛇(与食物发生碰撞)

publicEatFood(Food food,SnakeClass snake){//构造器

this.food=food;this.snake=snake;

}

@Overridepublic voidrun() {while(true){synchronized(food){if(food.isGetFood){try{

food.wait();//如果没有食物,进入等待

} catch(InterruptedException e) {

e.printStackTrace();

}

}else{//如果有食物进

if (snake.head.nodex==food.foodx&&snake.head.nodey==food.foody){//如果蛇头食物发生碰撞

if(food.color==5||food.color==10||food.color==7){

snake.add_Tail(newNode(snake.get_Tail().nodex,snake.get_Tail().nodey));

snake.add_Tail(newNode(snake.get_Tail().nodex,snake.get_Tail().nodey));

food.foodx=-1;

food.foody=-1;

food.count+=2;

}else if(food.color==4||food.color==8){

snake.deleteTail();

food.foodx=-1;

food.foody=-1;

food.count--;try{

Thread.sleep(3500);

}catch(InterruptedException e) {

e.printStackTrace();

}if(food.count>=SaveMaxCount.read()){

SaveMaxCount.save(food.count);

}

food.isGetFood=true;//修改食物状态

food.notify();//唤醒产生食物的线程

} else{

snake.add_Tail(newNode(snake.get_Tail().nodex,snake.get_Tail().nodey));

food.foodx=-1;

food.foody=-1;

food.count++;

}//System.out.println(food.color);(在测试时查看随机数)//如果当前分数大于历史最大分数,则将当前分数存入文件

if(!food.isGetFood){

food.isGetFood=true;//修改食物状态

food.notify();//唤醒产生食物的线程

}

}

}

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值