?? snakecontrol.java
字號(hào):
package book.mutimedia.greadsnake;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* 蛇的控制類(lèi),負(fù)責(zé)控制貪吃蛇。MVC中的Control
*/
public class SnakeControl implements KeyListener{
// 待控制的貪吃蛇的模型對(duì)象
private SnakeModel model;
// 貪吃蛇的試圖對(duì)象
private SnakeView view;
// 貪吃蛇的運(yùn)行區(qū)域大小
private int district_maxX;
private int district_maxY;
// 默認(rèn)構(gòu)造方法
public SnakeControl(){
this.district_maxX = 30;
this.district_maxY = 40;
init();
}
// 帶參數(shù)的構(gòu)造方法
public SnakeControl(int maxX, int maxY) {
// 判斷參數(shù)是否合法,這里定義了蛇運(yùn)行區(qū)域最大和最小范圍
if ((10 < maxX) && (maxX < 100) && (10 < maxY) && (maxY < 100)){
this.district_maxX = maxX;
this.district_maxY = maxY;
} else {
System.out.println("初始化參數(shù)錯(cuò)誤,用默認(rèn)參數(shù)構(gòu)造對(duì)象!");
this.district_maxX = 30;
this.district_maxY = 40;
}
init();
}
// 初始化
private void init(){
// 創(chuàng)建貪吃蛇模型
this.model = new SnakeModel(district_maxX, district_maxY);
// 創(chuàng)建貪吃蛇視圖
this.view = new SnakeView(district_maxX, district_maxY, 500, 200);
// 為模型添加試圖,當(dāng)模型改變時(shí),能夠通知到試視圖
this.model.addObserver(this.view);
// 為視圖添加鍵盤(pán)事件處理器
this.view.addKeyListener(this);
// 蛇開(kāi)始運(yùn)行
(new Thread(this.model)).start();
}
// 處理鍵盤(pán)事件
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
// 只有在貪吃蛇處于運(yùn)行狀態(tài)下,才處理的按鍵事件
if (model.isRunning()) {
switch (keyCode) {
// 處理蛇運(yùn)行的方向
case KeyEvent.VK_UP:
model.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
model.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
model.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
model.changeDirection(SnakeModel.RIGHT);
break;
// 處理蛇運(yùn)行的速度
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
model.speedUp();
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
model.speedDown();
break;
// 控制蛇的暫停與恢復(fù)
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
model.changePauseState();
break;
default:
}
}
// 控制游戲的重新開(kāi)始
if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_S
|| keyCode == KeyEvent.VK_ENTER) {
model.reset();
}
// 停止游戲
if (keyCode == KeyEvent.VK_Q) {
model.setRunning(false);
}
}
public void keyReleased(KeyEvent e) {
// do nothing
}
public void keyTyped(KeyEvent e) {
// do nothing
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -