package net.lichao.snake.control;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JOptionPane;
import net.lichao.snake.listener.SnakeListener;
import net.lichao.snake.main.GamePlay;
import net.lichao.snake.model.Food;
import net.lichao.snake.model.Ground;
import net.lichao.snake.model.MoveSnake;
import net.lichao.snake.model.Snake;
import net.lichao.snake.util.Global;
import net.lichao.snake.view.GamePanel;
public class Controller extends KeyAdapter implements SnakeListener{
private Snake snake;
private Food food;
private Ground ground;
private GamePanel gamePanel;
private GamePlay gamePlay;
public Controller(Snake snake, Food food, Ground ground, GamePanel gamePanel,GamePlay gamePlay) {
this.snake = snake;
this.food = food;
this.ground = ground;
this.gamePanel = gamePanel;
this.gamePlay=gamePlay;
}
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP :
this.snake.changeDir(Snake.UP);
break;
case KeyEvent.VK_DOWN:
this.snake.changeDir(Snake.DOWN);
break;
case KeyEvent.VK_LEFT:
this.snake.changeDir(Snake.LEFT);
break;
case KeyEvent.VK_RIGHT:
this.snake.changeDir(Snake.RIGTHT);
break;
case KeyEvent.VK_SPACE:
this.snake.push();
break;
case KeyEvent.VK_F1:
this.snake.makeMoveFast();
break;
case KeyEvent.VK_F2:
this.snake.makeMoveDown();
break;
}
}
public void SnakeMoved(Snake snake) {
this.gamePanel.display(this.snake,this.food,this.ground);
this.createNewGround();
if(this.ground.isSnakeGroundEat()){
int i=JOptionPane.showConfirmDialog(this.gamePlay.getJf(),"得分:"+this.snake.getScore()+":撞墙是否退出?","退出!!",JOptionPane.YES_NO_OPTION);
if(i==JOptionPane.YES_OPTION){
System.exit(0);
}else{
this.restart();
this.snake.setScore(0);
this.gamePlay.getJf().setTitle("贪吃蛇<====>得分:"+this.snake.getScore());
}
}
if(this.snake.eatSelf()){
int i=JOptionPane.showConfirmDialog(this.gamePlay.getJf(),"得分:"+this.snake.getScore()+":吃到自己是否退出?","退出!!",JOptionPane.YES_NO_OPTION);
if(i==JOptionPane.YES_OPTION){
System.exit(0);
}else{
this.restart();
this.snake.setScore(0);
this.gamePlay.getJf().setTitle("贪吃蛇<====>得分:"+this.snake.getScore());
}
}
if(this.food.isSnakeFoodEat()){
this.snake.eatFood();
this.createNewFood();
this.snake.setScore(this.snake.getScore()+10);
this.setTitleScore();
}
}
public void restart(){
this.snake.initSnake();
this.createNewFood();
this.gamePanel.display(this.snake,this.food,this.ground);//把上次画面擦掉
}
public void gameStart(){
new Thread(new MoveSnake(this.snake)).start();//用线程来控制蛇的移动。
}
public void createNewFood(){
Random ra=new Random();
LinkedList snakeBody=this.snake.getSnakeBody();
int groundLocation[][]=this.ground.getGround();
int x=0;
int y=0;
Point p=null;
do{
x=ra.nextInt(Global.panelwidth);
y=ra.nextInt(Global.panelhight);
p=new Point(x,y);
}while(groundLocation[x][y]==1||snakeBody.contains(p));//使食物不出现在蛇身上,或墙上。
this.food.initFood(p);
}
public void createNewGround(){
this.ground.setNewGround();
}
public void setTitleScore(){
this.gamePlay.getJf().setTitle("贪吃蛇<====>得分:"+this.snake.getScore());
}
}