透過JAVA編寫童年回憶《貪吃蛇》

相信大家小時候都玩過貪吃蛇,一玩根本停不下來,那你可知道貪吃蛇是如何製作而成的呢?現在我們透過JAVA來完成,分享程式碼如下,大家可以試一試。

透過JAVA編寫童年回憶《貪吃蛇》

import java。awt。*;import java。awt。event。*;public class GreedSnake //主類{/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubnew MyWindow();}}class MyPanel extends Panel implements KeyListener,Runnable//自定義面板類,繼承了鍵盤和執行緒介面{Button snake[]; //定義蛇按鈕int shu=0; //蛇的節數int food[]; //食物陣列boolean result=true; //判定結果是輸 還是贏Thread thread; //定義執行緒static int weix,weiy; //食物位置boolean t=true; //判定遊戲是否結束int fangxiang=0; //蛇移動方向int x=0,y=0; //蛇頭位置MyPanel(){setLayout(null);snake=new Button[20];food=new int [20];thread=new Thread(this);for(int j=0;j<20;j++){food[j]=(int)(Math。random()*99);//定義20個隨機食物}weix=(int)(food[0]*0。1)*60; //十位*60為橫座標weiy=(int)(food[0]%10)*40; //個位*40為縱座標for(int i=0;i<20;i++){snake[i]=new Button();}add(snake[0]);snake[0]。setBackground(Color。black);snake[0]。addKeyListener(this); //為蛇頭新增鍵盤監視器snake[0]。setBounds(0,0,10,10);setBackground(Color。cyan);}public void run() //接收執行緒{while(t){if(fangxiang==0)//向右{try{x+=10;snake[0]。setLocation(x, y);//設定蛇頭位置if(x==weix&&y==weiy) //吃到食物{shu++;weix=(int)(food[shu]*0。1)*60;weiy=(int)(food[shu]%10)*40;repaint(); //重繪下一個食物add(snake[shu]); //增加蛇節數和位置snake[shu]。setBounds(snake[shu-1]。getBounds());}thread。sleep(100); //睡眠100ms}catch(Exception e){}}else if(fangxiang==1)//向左{try{x-=10;snake[0]。setLocation(x, y);if(x==weix&&y==weiy){shu++;weix=(int)(food[shu]*0。1)*60;weiy=(int)(food[shu]%10)*40;repaint();add(snake[shu]);snake[shu]。setBounds(snake[shu-1]。getBounds());}thread。sleep(100);}catch(Exception e){}}else if(fangxiang==2)//向上{try{y-=10;snake[0]。setLocation(x, y);if(x==weix&&y==weiy){shu++;weix=(int)(food[shu]*0。1)*60;weiy=(int)(food[shu]%10)*40;repaint();add(snake[shu]);snake[shu]。setBounds(snake[shu-1]。getBounds());}thread。sleep(100);}catch(Exception e){}}else if(fangxiang==3)//向下{try{y+=10;snake[0]。setLocation(x, y);if(x==weix&&y==weiy){shu++;weix=(int)(food[shu]*0。1)*60;weiy=(int)(food[shu]%10)*40;repaint();add(snake[shu]);snake[shu]。setBounds(snake[shu-1]。getBounds());}thread。sleep(100);}catch(Exception e){}}int num1=shu;while(num1>1)//判斷是否咬自己的尾巴{if(snake[num1]。getBounds()。x==snake[0]。getBounds()。x&&snake[num1]。getBounds()。y==snake[0]。getBounds()。y){t=false;result=false;repaint();}num1——;}if(x<0||x>=this。getWidth()||y<0||y>=this。getHeight())//判斷是否撞牆{t=false;result=false;repaint();}int num=shu;while(num>0) //設定蛇節位置{snake[num]。setBounds(snake[num-1]。getBounds());num——;}if(shu==15) //如果蛇節數等於15則勝利{t=false;result=true;repaint();}}}public void keyPressed(KeyEvent e) //按下鍵盤方向鍵{if(e。getKeyCode()==KeyEvent。VK_RIGHT)//右鍵{if(fangxiang!=1)//如果先前方向不為左fangxiang=0;}else if(e。getKeyCode()==KeyEvent。VK_LEFT){ if(fangxiang!=0)fangxiang=1;}else if(e。getKeyCode()==KeyEvent。VK_UP){ if(fangxiang!=3)fangxiang=2;}else if(e。getKeyCode()==KeyEvent。VK_DOWN){ if(fangxiang!=2)fangxiang=3;}}public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}public void paint(Graphics g) //在面板上繪圖{int x1=this。getWidth()-1;int y1=this。getHeight()-1;g。setColor(Color。red);g。fillOval(weix, weiy, 10, 10);//食物g。drawRect(0, 0, x1, y1); //牆if(t==false&&result==false)g。drawString(“GAME OVER!”, 250, 200);//輸出遊戲失敗else if(t==false&&result==true)g。drawString(“YOU WIN!”, 250, 200);//輸出遊戲成功}}class MyWindow extends Frame implements ActionListener//自定義視窗類{MyPanel my;Button btn;Panel panel;MyWindow(){super(“GreedSnake”);my=new MyPanel();btn=new Button(“begin”);panel=new Panel();btn。addActionListener(this);panel。add(new Label(“begin後請按Tab鍵選定蛇”));panel。add(btn);panel。add(new Label(“按上下左右鍵控制蛇行動”));add(panel,BorderLayout。NORTH);add(my,BorderLayout。CENTER);setBounds(100,100,610,500);setVisible(true);validate();addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System。exit(0);}});}public void actionPerformed(ActionEvent e)//按下begin按鈕{if(e。getSource()==btn){try{my。thread。start(); //開始執行緒my。validate();}catch(Exception ee){}}}}

相信大家已經試過了,怎麼樣,有沒有找回童年的感覺?