GUI編程
04 貪吃蛇小游戲
4.4 第四步:食物及成績判斷
首先,添加食物與分數的數據定義:
//食物的坐標int foodX;int foodY;Random random = new Random();//積分面板數據結構int score;
在初始化方法中,添加(畫出)食物與分數:
//將食物隨機分布于游戲界面foodX = 25 + 25 * random.nextInt(34);foodY = 75 + 25 * random.nextInt(24);score = 0; //定義初始得分
繪制靜態面板中,畫出積分面板、食物,并增加游戲失敗設定顯示的語句:
//畫出積分面板g.setColor(Color.white);g.setFont(new Font("宋體", Font.BOLD, 18));g.drawString("長度 " + length, 750, 30);g.drawString("得分 " + score, 750, 55);//畫出食物Data.food.paintIcon(this, g, foodX, foodY);//繪制當前游戲狀態if (!isStart) {g.setColor(Color.white);g.setFont(new Font("宋體", Font.BOLD, 40));g.drawString("按下空格開始游戲", 270, 300);}if (isFail) {g.setColor(Color.red);g.setFont(new Font("宋體", Font.BOLD, 40));g.drawString("游戲失敗,按下空格重新開始", 220, 300);}
在鍵盤監聽事件中,添加空格對于游戲失敗之后重新開始游戲的判斷;同時,改進當前蛇頭方向與按鍵方向相反時新的蛇頭方向的判定:
//鍵盤監聽事件@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode(); //獲取鍵盤按鍵if (keyCode == KeyEvent.VK_SPACE) {if (isFail) { //重新開始isFail = false;init();} else { //正常開始isStart = !isStart;repaint();}}//鍵盤監聽到按鍵后畫上對應方向的蛇頭if (keyCode == KeyEvent.VK_UP && !direction.equals("D")) {direction = "U";} else if (keyCode == KeyEvent.VK_DOWN && !direction.equals("U")) {direction = "D";} else if (keyCode == KeyEvent.VK_LEFT && !direction.equals("R")) {direction = "L";} else if (keyCode == KeyEvent.VK_RIGHT && !direction.equals("L")) {direction = "R";}}
游戲事件的監聽中,添加是否吃到食物與游戲失敗的判定:
//判斷蛇頭是否吃到食物if (snakeX[0] == foodX && snakeY[0] == foodY) {length++;foodX = 25 + 25 * random.nextInt(34);foodY = 75 + 25 * random.nextInt(24);score += 10;}//失敗判定for (int i = 1; i < length; i++) {if (snakeX[0] == snakeX[i] && snakeY[0] == snakeY[i]) {isFail = true;break;}}
運行結果:
游戲默認界面:
游戲運行中:
游戲失敗:
至此,簡單的貪吃蛇小游戲已全部編寫完畢。