回覆列表
  • 1 # 蠟筆小新的暖心屋

    import java.awt.*;

    import javax.swing.*;

    import java.awt.event.*;

    import java.util.*;

    public class SnakeGame extends JFrame implements KeyListener{

    private int stat=1,direction=0,bodylen=6,headx=7,heady=8,

    tailx=1,taily=8,tail,foodx,foody,food;//初始化定義變數

    public final int EAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常量

    int [][] fillblock=new int [20][20];//定義蛇身所佔位置

    public SnakeGame() {//建構函式

    super("貪吃蛇");

    setSize(510,510);

    setVisible(true);//設定視窗屬性

    addKeyListener(this);//新增監聽

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    for(int i=1;i<=7;i++) fillblock[i][8]=EAST;//初始化蛇身屬性

    direction=EAST;//方向初始化的設定

    FoodLocate(); //定位食物

    while (stat==1){

    fillblock[headx][heady]=direction;

    switch(direction){

    case 1:headx++;break;

    case 2:headx--;break;

    case 3:heady++;break;

    case 4:heady--;break;

    }//蛇頭的前進

    if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[headx][heady]!=0){

    stat=0;

    break;

    } //判斷遊戲是否結束

    try{

    Thread.sleep(150); }

    catch(InterruptedException e){}//延遲

    fillblock[headx][heady]=direction;

    if(headx==foodx&&heady==foody){//吃到食物

    FoodLocate();

    food=2;

    try{

    Thread.sleep(100); }

    catch(InterruptedException e){}//延遲

    }

    if(food!=0)food--;

    else{tail=fillblock[tailx][taily];

    fillblock[tailx][taily]=0;//蛇尾的消除

    switch(tail){

    case 1:tailx++;break;

    case 2:tailx--;break;

    case 3:taily++;break;

    case 4:taily--;break;

    }//蛇尾的前進

    }

    repaint();

    }

    if(stat==0)

    JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",JOptionPane.INFORMATION_MESSAGE);

    }

    public void keyPressed(KeyEvent e) {//按鍵響應

    int keyCode=e.getKeyCode();

    if(stat==1) switch(keyCode){

    case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;

    case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break;

    case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break;

    case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EAST;break;

    }

    }

    public void keyReleased(KeyEvent e){}//空函式

    public void keyTyped(KeyEvent e){} //空函式

    public void FoodLocate(){//定位食物座標

    do{

    Random r=new Random();

    foodx=r.nextInt(20);

    foody=r.nextInt(20);

    }while (fillblock[foodx][foody]!=0);

    }

    public void paint(Graphics g){//畫圖

    super.paint(g);

    g.setColor(Color.BLUE);

    for(int i=0;i<20;i++)

    for(int j=0;j<20;j++)

    if (fillblock[i][j]!=0)

    g.fillRect(25*i+5,25*j+5,24,24);

    g.setColor(Color.RED);

    g.fillRect(foodx*25+5,foody*25+5,24,24);

    }

    public static void main(String[] args) {//主程式

    SnakeGame application=new SnakeGame();

    }

    }

  • 中秋節和大豐收的關聯?
  • 靠自己能戰勝憂鬱症嗎?