




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年多媒體講臺行業(yè)發(fā)展前景預測及投資戰(zhàn)略咨詢報告
- Unit 7 Careers Lesson 1EQIQ 教學設計-2024-2025學年高中英語北師大新版(2019)選擇性必修第三冊
- 2落花生第二課時(教學設計)2024-2025學年統(tǒng)編版語文五年級上冊
- 購買儀器的合同范本
- 2025年瓷質滲花磚項目投資可行性研究分析報告
- 2025年沙卡項目可行性研究報告
- 攀援植物行業(yè)市場發(fā)展及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 中國銀黃口服液行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃報告
- 2025年度廠房租賃合同(含設備安裝維護服務)標準文本
- 2025年電工機械項目可行性研究報告
- 《客戶服務與管理》課程標準
- 面向智能制造的數字孿生技術在工業(yè)優(yōu)化中的應用研究
- (完整版)山東春季高考信息技術類技能考試題目
- (完整版)土的參數換算(計算飽和重度)
- PALL過濾器專題培訓課件
- 林業(yè)基礎知識考試復習題庫(濃縮500題)
- 鐵路土工試驗培訓課件
- 雙膜法1500ta硫氰酸紅霉素項目可行性研究報告
- 信息化項目前期準備
- 220kV升壓站工程施工組織設計
- 科技成果-企業(yè)污染物排放大數據監(jiān)控及知識圖譜構建
評論
0/150
提交評論