java如何控制贪吃蛇的移动方向
- 提问者网友:很好的背叛
- 2021-02-17 20:38
- 二级知识专家网友:茫然不知崩溃
- 2021-02-17 22:09
- 1楼网友:哭不代表软弱
- 2021-02-17 22:49
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字,我这边只发了控制器的代码,还有对象和监听的代码没贴上,要的话邮箱发我