貪吃蛇java課程設計_第1頁
貪吃蛇java課程設計_第2頁
貪吃蛇java課程設計_第3頁
貪吃蛇java課程設計_第4頁
貪吃蛇java課程設計_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、public class Snake extends JFrame private JPanel contentPane; /窗體內容網格 private JButton btnStart = new JButton("開始"); /游戲開始按鈕 private JButton btnPause = new JButton("暫停"); /游戲暫停按鈕 private JButton btnExit = new JButton("退出"); /游戲退出按 private JPanel pnlTop = new JPanel(); /頂

2、部按鈕和分數面板 private JPanel pnlLeft = new JPanel(); /左側面板 private JPanel playPanel = new JPanel(); /游戲區(qū)面板 private BorderLayout borderLayout1 = new BorderLayout(); /容器布局管理器 private BorderLayout borderLayout2 = new BorderLayout(); private GridLayout rbtnLayout = new GridLayout(10, 1, 1, 1); private static

3、 final int UP = 1,LEFT = 2,DOWN = 3,RIGHT = 4;/蛇運動方向 private static final int ROWS = 30; /游戲區(qū)行數 private static final int COLS = 50; /游戲區(qū)列數 private boolean isPause = false; /游戲暫停標志 private boolean isEnd; /游戲結束標志 private SnakeBody snake; /貪食蛇 private int score = 0; /當前得分 SnakeThread thread = new Snake

4、Thread(); /游戲主線程 private GridLayout grid1 = new GridLayout(ROWS,COLS,0,0); /游戲區(qū)布局 private JButton blocks; /游戲區(qū)的所有方塊 JPanel jPanel2 = new JPanel(); JLabel jLabel1 = new JLabel("得分:"); JLabel lblScroe = new JLabel("0"); ButtonGroup buttonGroup1 = new ButtonGroup(); JRadioButton rbt

5、nLow = new JRadioButton("初級", true); JRadioButton rbtnMid = new JRadioButton("中級"); JRadioButton rbtnHigh = new JRadioButton("高級"); public Snake() super("貪食蛇游戲"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane = (JPanel)this.getContentPane(); cont

6、entPane.setLayout(borderLayout2); this.setResizable(false); this.setSize(new Dimension(512, 414); keyAction keyAct = new keyAction(); this.addKeyListener(keyAct); btnStart.addKeyListener(keyAct); btnPause.addKeyListener(keyAct); btnExit.addKeyListener(keyAct); rbtnLow.addKeyListener(keyAct); rbtnMid

7、.addKeyListener(keyAct); rbtnHigh.addKeyListener(keyAct); btnAction btnAct = new btnAction(); btnStart.addActionListener(btnAct); btnPause.addActionListener(btnAct); btnExit.addActionListener(btnAct); rbtnLow.addActionListener(btnAct); rbtnMid.addActionListener(btnAct); rbtnHigh.addActionListener(bt

8、nAct); pnlLeft.setLayout(borderLayout1); playPanel.setLayout(grid1); playPanel.setBackground(Color.white); playPanel.setBorder(BorderFactory.createEtchedBorder(); jPanel2.setLayout(rbtnLayout); buttonGroup1.add(rbtnLow); buttonGroup1.add(rbtnMid); buttonGroup1.add(rbtnHigh); rbtnLow.setSelected(true

9、); pnlLeft.add(playPanel); pnlLeft.add(jPanel2, BorderLayout.WEST); jPanel2.add("f1", rbtnLow); jPanel2.add("f2", rbtnMid); jPanel2.add("f3", rbtnHigh); pnlTop.add(btnStart); pnlTop.add(btnPause); pnlTop.add(btnExit); pnlTop.add(jLabel1); pnlTop.add(lblScroe); contentPa

10、ne.add(pnlTop, BorderLayout.NORTH); contentPane.add(pnlLeft, BorderLayout.CENTER); /創(chuàng)建并初始化游戲區(qū)方塊 blocks = new JButtonROWSCOLS; for (int i = 0; i < ROWS; i+) for (int j = 0; j < COLS; j+) blocksij = new JButton(); blocksij.setBackground(Color.lightGray); blocksij.setVisible(false); playPanel.add

11、(blocksij); public static void main(String args) Snake app = new Snake(); app.validate(); app.setVisible(true); public void start() snake = new SnakeBody(); /創(chuàng)建蛇身 if (rbtnLow.isSelected() snake.setSpeed(300); if (rbtnMid.isSelected() snake.setSpeed(200); if (rbtnHigh.isSelected() snake.setSpeed(100)

12、; score = 0; isPause = false; isEnd = false; / btnPause.setText("暫停"); /初始化游戲區(qū) for (int i = 0; i < ROWS; i+) for (int j = 0; j < COLS; j+) blocksij.setBackground(Color.lightGray); blocksij.setVisible(false); /在游戲區(qū)內隨機放置豆 int x = (int) (Math.random() * ROWS); int y = (int) (Math.random

13、() * COLS); while (blocksxy.isVisible() x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COLS); blocksxy.setBackground(Color.yellow); blocksxy.setVisible(true); try thread.start(); catch (IllegalThreadStateException illegalThreadStateException) class SnakeBody public int row; public int

14、col; public int len = 3, direction = RIGHT, lastdirection = RIGHT; public long speed = 300; public SnakeBody() len = 3; direction = RIGHT; lastdirection = RIGHT; row = new intROWS; col = new intCOLS; for (int i = 0; i <= len; i+) rowi = 1; coli = len - i; public void setSpeed(int s) speed = s; pu

15、blic void move() blocksrowlencollen.setVisible(false); /去掉蛇尾 blocksrowlencollen.setBackground(Color.white); /修改顏色 /顯示蛇身 for (int i = 0; i < len; i+) blocksrowicoli.setBackground(Color.green); blocksrowicoli.setVisible(true); /移動蛇身 for (int i = len; i > 0; i-) rowi = rowi - 1; coli = coli - 1;

16、/根據蛇身運動方向,決定蛇頭位置 switch (direction) case UP: if (lastdirection = DOWN) row0 += 1; else row0 -= 1; lastdirection = UP; break; case LEFT: if (lastdirection = RIGHT) col0 += 1; else col0 -= 1; lastdirection = LEFT; break; case DOWN: if (lastdirection = UP) row0 -= 1; else row0 += 1; lastdirection = DOW

17、N; break; case RIGHT: if (lastdirection = LEFT) col0 -= 1; else col0 += 1; lastdirection = RIGHT; break; /當蛇頭碰到墻時,蛇頭碰到蛇身時,游戲結束 if (row0 >= ROWS | row0 < 0 | col0 >= COLS | col0 < 0 | blocksrow0col0.getBackground().equals(Color.green) isEnd = true; JOptionPane.showMessageDialog(null, &quo

18、t;游戲結束!"); /吃豆 if (blocksrow0col0.getBackground().equals(Color.yellow) score += 100; lblScroe.setText(Integer.toString(score); if (score % 2000 = 0 && speed > 100) JOptionPane.showMessageDialog(null, "恭喜你過關了,準備進入下一關"); speed -= 100; if (speed = 200) rbtnMid.setSelected(true

19、); if (speed = 100) rbtnHigh.setSelected(true); /吃豆后,蛇身加長,并隨機顯示下一個豆 if (blocksrow0col0.getBackground().equals(Color.yellow) len+; int x, y; x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COLS); while (blocksxy.isVisible() x = (int) (Math.random() * ROWS); y = (int) (Math.random() * COL

20、S); blocksxy.setBackground(Color.yellow); blocksxy.setVisible(true); blocksrow0col0.setBackground(Color.green); blocksrow0col0.setVisible(true); /顯示蛇頭 class SnakeThread extends Thread public void run() while (true) try Thread.sleep(snake.speed); /控制移動速度 if (!isEnd && !isPause) snake.move(); /移動蛇身 if (isEnd) /游戲結束 btnStart.setEnabled(true); catch (Exception ex) class keyAction extends KeyAdapter public void keyPressed(KeyEvent e) if (!isEnd && !isPause) /根據用戶按鍵,設置蛇運動方向 if (e.getKeyCode() = KeyEvent.VK_UP) snake.direction = UP; if (e.getKeyCode() = KeyEvent.VK_DOWN) s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論