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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

2、部按鈕和分?jǐn)?shù)面板 private JPanel pnlLeft = new JPanel(); /左側(cè)面板 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;/蛇運(yùn)動(dòng)方向 private static final int ROWS = 30; /游戲區(qū)行數(shù) private static final int COLS = 50; /游戲區(qū)列數(shù) private boolean isPause = false; /游戲暫停標(biāo)志 private boolean isEnd; /游戲結(jié)束標(biāo)志 private SnakeBody snake; /貪食蛇 private int score = 0; /當(dāng)前得分 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("初級(jí)", true); JRadioButton rbtnMid = new JRadioButton("中級(jí)"); JRadioButton rbtnHigh = new JRadioButton("高級(jí)"); 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ū)內(nèi)隨機(jī)放置豆 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); /移動(dòng)蛇身 for (int i = len; i > 0; i-) rowi = rowi - 1; coli = coli - 1;

16、/根據(jù)蛇身運(yùn)動(dòng)方向,決定蛇頭位置 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; /當(dāng)蛇頭碰到墻時(shí),蛇頭碰到蛇身時(shí),游戲結(jié)束 if (row0 >= ROWS | row0 < 0 | col0 >= COLS | col0 < 0 | blocksrow0col0.getBackground().equals(Color.green) isEnd = true; JOptionPane.showMessageDialog(null, &quo

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

19、); if (speed = 100) rbtnHigh.setSelected(true); /吃豆后,蛇身加長(zhǎng),并隨機(jī)顯示下一個(gè)豆 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); /控制移動(dòng)速度 if (!isEnd && !isPause) snake.move(); /移動(dòng)蛇身 if (isEnd) /游戲結(jié)束 btnStart.setEnabled(true); catch (Exception ex) class keyAction extends KeyAdapter public void keyPressed(KeyEvent e) if (!isEnd && !isPause) /根據(jù)用戶按鍵,設(shè)置蛇運(yùn)動(dòng)方向 if (e.getKeyCode() = KeyEvent.VK_UP) snake.direction = UP; if (e.getKeyCode() = KeyEvent.VK_DOWN) s

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論