中易网

java如何控制贪吃蛇的移动方向

答案:2  悬赏:50  
解决时间 2021-02-18 01:52
java如何控制贪吃蛇的移动方向
最佳答案
X、Y两个中,某一个加、或减
全部回答

package cn.itcast.snake.controller;

import java.awt.font; import java.awt.event.keyadapter; import java.awt.event.keyevent; import java.util.hashset; import java.util.set;

import javax.swing.jlabel;

import cn.itcast.snake.entities.food; import cn.itcast.snake.entities.ground; import cn.itcast.snake.entities.snake; import cn.itcast.snake.listener.gamelistener; import cn.itcast.snake.listener.snakelistener; import cn.itcast.snake.util.global; import cn.itcast.snake.view.gamepanel;

public class controller extends keyadapter implements snakelistener {

   private ground ground;

   private snake snake;

   private food food;

   private gamepanel gamepanel;

   private jlabel gameinfolabel;

 private boolean playing;

 private int map;

   private set<gamelistener> listeners = new hashset<gamelistener>();

   public void keypressed(keyevent e) {   if (e.getkeycode() != keyevent.vk_y && !playing)    return;   // todo auto-generated method stub      switch (e.getkeycode()) {

     case keyevent.vk_up:    if (snake.ispause()) {     snake.changepause();     for (gamelistener l : listeners)     l.gamecontinue();    }    snake.changedirection(snake.up);    break;      case keyevent.vk_down:    if (snake.ispause()) {     snake.changepause();     for (gamelistener l : listeners)     l.gamecontinue();    }    snake.changedirection(snake.down);    break;      case keyevent.vk_left:    if (snake.ispause()) {     snake.changepause();     for (gamelistener l : listeners)     l.gamecontinue();    }    snake.changedirection(snake.left);    break;      case keyevent.vk_right:    if (snake.ispause()) {     snake.changepause();     for (gamelistener l : listeners)     l.gamecontinue();    }    snake.changedirection(snake.right);    break;      case keyevent.vk_enter:   case keyevent.vk_space:    snake.changepause();        for (gamelistener l : listeners)     if (snake.ispause())     l.gamepause();     else     l.gamecontinue();    break;      case keyevent.vk_page_up:    snake.speedup();    break;      case keyevent.vk_page_down:    snake.speeddown();    break;      case keyevent.vk_y:    if (!isplaying())     newgame();    break;   }

     if (gamepanel != null)    gamepanel.redisplay(ground, snake, food);      if (gameinfolabel != null)    gameinfolabel.settext(getnewinfo());  }

   public void snakemoved() {

     if (food != null && food.issnakeeatfood(snake)) {        snake.eatfood();    food.setlocation(ground == null ? food.getnew() : ground     .getfreepoint());

  }   else if (ground != null && ground.issnakeeatrock(snake)) {        stopgame();   }   if (snake.iseatbody())    stopgame();   if (gamepanel != null)    gamepanel.redisplay(ground, snake, food);      if (gameinfolabel != null)    gameinfolabel.settext(getnewinfo());  }

   public void newgame() {

  if (ground != null) {    switch (map) {    case 2:     ground.clear();     ground.generaterocks2();     break;    default:     ground.init();     break;    }   }   playing = true;

  snake.renew();   for (gamelistener l : listeners)    l.gamestart();  }

   public void stopgame() {   if (playing) {    playing = false;    snake.dead();    for (gamelistener l : listeners)     l.gameover();   }  }

   public void pausegame() {   snake.setpause(true);   for (gamelistener l : listeners)    l.gamepause();  }

   public void continuegame() {   snake.setpause(false);   for (gamelistener l : listeners)    l.gamecontinue();  }

   public controller(snake snake, food food, ground ground, gamepanel gamepanel) {   this.snake = snake;   this.food = food;   this.ground = ground;   this.gamepanel = gamepanel;      if (ground != null && food != null)    food.setlocation(ground.getfreepoint());      this.snake.addsnakelistener(this);  }

   public controller(snake snake, food food, ground ground,    gamepanel gamepanel, jlabel gameinfolabel) {

  this(snake, food, ground, gamepanel);   this.setgameinfolabel(gameinfolabel);

  if (gameinfolabel != null)    gameinfolabel.settext(getnewinfo());  }

   public string getnewinfo() {   if (!snake.islive())    return " ";// " 提示: 按 y 开始新游戏";   else    return new stringbuffer().append("提示: ").append("速度 ").append(     snake.getspeed()).tostring()     + " 毫秒/格";  }

   public synchronized void addgamelistener(gamelistener l) {   if (l != null)    this.listeners.add(l);  }

   public synchronized void removegamelistener(gamelistener l) {   if (l != null)    this.listeners.remove(l);  }

   public snake getsnake() {   return this.snake;  }

   public food getfood() {   return this.food;  }

   public ground getground() {   return this.ground;  }

   public void snakeeatfood() {   // todo auto-generated method stub   system.out.println("吃到食物!");  }

 public gamepanel getgamepanel() {   return gamepanel;  }

   public void setgamepanel(gamepanel gamepanel) {   this.gamepanel = gamepanel;  }

 public jlabel getgameinfolabel() {   return gameinfolabel;  }

 public void setgameinfolabel(jlabel gameinfolabel) {   this.gameinfolabel = gameinfolabel;   this.gameinfolabel.setsize(global.width * global.cell_width, 20);   this.gameinfolabel.setfont(new font("宋体", font.plain, 12));   gameinfolabel.settext(this.getnewinfo());  }

 public void setground(ground ground) {   this.ground = ground;  }

 public void setsnake(snake snake) {   this.snake = snake;  }

 public void setfood(food food) {   this.food = food;  }

 public int getmap() {   return map;  }

 public void setmap(int map) {   this.map = map;  }

 public boolean isplaying() {   return playing;  }

 public void setplaying(boolean playing) {   this.playing = playing;  }

 public boolean ispausinggame() {   // todo auto-generated method stub   return snake.ispause();  }

}

这边提示说不能超过10000字,我这边只发了控制器的代码,还有对象和监听的代码没贴上,要的话邮箱发我
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求问进击的巨人16集3:38时的BGM叫什么?
手机总是给这个1069048604509发乱码,中毒了
南戈壁地址有知道的么?有点事想过去
手机流量套餐办理后是不是当日生效?
辛志文是傻逼吗?
瓦缸营养美食在什么地方啊,我要过去处理事情
CPU核心速度变化很大
上厕所的时候有女孩问在干嘛怎么回答
在EXCEL中,如何实现输入姓名拼音的第一个字
同创图文快印这个地址在什么地方,我要处理点
6s每次在app store更新东西,如果点右上角的
绝地求生国服怎么预约 绝地求生 国服预约地址
我大二学生,是个男的,我想请一个女老师吃饭
面对有钱爱面子的顾客应该怎样介绍产品
六陈幼儿园在什么地方啊,我要过去处理事情
推荐资讯
同心广场怎么去啊,有知道地址的么
你给对方发微信,对方显示对方正在输入,怎么回
新集镇西新庄村村民委员会地址有知道的么?有
义乌市田心小学地址在哪,我要去那里办事
好机汇手机卖场这个地址在什么地方,我要处理
请给我介绍几个看电影的iPhone app,要电影齐
有人讲女人第一次被大dd做过以后
悠悠球不灭恒星和皇家之星哪个好
鸿源整型烤漆地址在哪,我要去那里办事
起点小说网怎么加好友?
女朋友把我在她的QQ空间留言删了,就是叫她老
跳远运动员助跑的目的是?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?