/** * 蛇移動的方法 */ public void move(){ //1.去尾。這個很簡單,意思就是說去掉咱們snakeList的最後一個元素 snakeBody.removeLast(); //2.加頭。這個就相對複雜一點,須要咱們根據蛇當前運動的方向來判斷咱們的蛇頭應該加在什麼位置 Body head = snakeBody.getFirst();//得到當前蛇頭的那個對象 int newX = head.x;//咱們要添加的蛇頭的橫座標 int newY = head.y;//咱們要添加的蛇頭的縱座標 switch(direction){ case DIR_UP: //若是蛇跑出了上邊界咱們就讓蛇從下邊跑出來 if(head.y <= 0){ newY = GameView.WINDOW_HEIGHT - BODY_SIZE; } else { newY -= BODY_SIZE; } break; case DIR_DOWN: //若是蛇跑出了下邊界咱們就讓蛇從上邊跑出來 if(head.y >= GameView.WINDOW_HEIGHT - BODY_SIZE){ newY = 0; } else { newY += BODY_SIZE; } break; case DIR_LEFT: //若是蛇跑出了左邊界咱們就讓蛇從右邊跑出來 if(head.x <= 0){ newX = GameView.WINDOW_WIDTH - BODY_SIZE; } else { newX -= BODY_SIZE; } break; case DIR_RIGHT: //若是蛇跑出了右邊界咱們就讓蛇從左邊跑出來 if(head.x >= GameView.WINDOW_WIDTH - BODY_SIZE){ newX = 0; } else { newX += BODY_SIZE; } break; } snakeBody.addFirst(new Body(newX, newY)); }咱們須要修改蛇的move方法,咱們須要對蛇頭當前的位置進行判斷,根據咱們蛇頭的臨界位置來有選擇性的計算出下一個蛇頭的位置,這個應該不難理解。
/** * 改變蛇的運動方向 * @param direction 蛇的新的運動方向 */ public void changeDirection(int direction){ this.direction = direction; }有了變向的方法,接着咱們要作的就是在GameView中去監聽用戶按下鍵盤的事件了,在這裏呢,咱們使用鍵盤上的上下左右四個方向鍵來控制蛇的移動,固然,你也能夠選擇其餘的按鍵。那麼,要實現對PC鍵盤的監聽,在咱們的java中,咱們須要去實現一個叫作KeyListener的接口。 這裏有一個很重要的概念——接口,孤狼在這裏簡單的講一下接口的概念。你們要理解什麼叫作接口,能夠想象一下咱們的插線板,插線板上是否是有不少兩孔的或者三孔的插口,那些就至關因而咱們的接口。接口有什麼做用呢,一樣以插線板爲例,一個電器你要使用他是否是要插進插線板中的特定的那個插孔才能夠,你不能說把一個有四個角的插頭插到三個孔的插孔中吧。所以接口就是咱們的開發人員定義的一系列規範(具體來講就是方法),這些方法之後會被什麼程序拿去使用咱們在造插線板的時候還不知道。可是隻要你之後電器的插頭知足我給你的樣式(即規範),那麼你的電器(程序)就能夠正常的運行。還不理解的同窗就只有去查查資料了,由於接口這個概念很重要,是咱們面向對象中的核心之一。
/** * 鍵盤被按下的事件 */ @Override public void keyPressed(KeyEvent e) { } /** * 鍵盤彈起的事件 */ @Override public void keyReleased(KeyEvent e) { switch(e.getKeyCode()){ case KeyEvent.VK_LEFT://向左 snake.changeDirection(Snake.DIR_LEFT); break; case KeyEvent.VK_RIGHT://向右 snake.changeDirection(Snake.DIR_RIGHT); break; case KeyEvent.VK_UP://向上 snake.changeDirection(Snake.DIR_UP); break; case KeyEvent.VK_DOWN://向下 snake.changeDirection(Snake.DIR_DOWN); break; } } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub }這三個方法就是接口中定義好的,咱們的虛擬機會在監聽到用戶按鍵盤以後調用相應的方法來處理鍵盤事件。咱們選擇其中的當鍵盤被鬆開彈起的事件來實現咱們對蛇的變向的操做。