




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于2025年教育政策的高校創(chuàng)新創(chuàng)業(yè)教育課程體系優(yōu)化與實(shí)踐研究報(bào)告
- 書香校園話題探討話題作文(9篇)
- 工業(yè)互聯(lián)網(wǎng)平臺(tái)網(wǎng)絡(luò)隔離技術(shù)趨勢(shì)分析及2025年應(yīng)用展望
- 農(nóng)村電氣化管理維護(hù)合同
- 2025年在線教育質(zhì)量評(píng)估與認(rèn)證體系下的教學(xué)模式創(chuàng)新報(bào)告
- 2025年5G商用深化邊緣計(jì)算行業(yè)市場(chǎng)前景與技術(shù)創(chuàng)新應(yīng)用研究報(bào)告
- 廢塑料回收利用技術(shù)創(chuàng)新與城市廢棄物處理報(bào)告
- 2025年二手電商平臺(tái)信用評(píng)級(jí)與市場(chǎng)準(zhǔn)入研究001
- 房屋買賣三方合同
- 2025-2030中國(guó)速凍魚(yú)糜制品行業(yè)消費(fèi)動(dòng)態(tài)與競(jìng)爭(zhēng)格局分析報(bào)告
- 消防水鶴安裝工程施工方案及主要技術(shù)措施
- 《高校教師師德修養(yǎng)》課件
- 2024年深圳市房屋租賃合同(3篇)
- 學(xué)校食品安全投訴舉報(bào)制度及流程
- 人教部編版七年級(jí)語(yǔ)文上冊(cè)《秋天的懷念》示范課教學(xué)課件
- 2024年保育員(初級(jí))考試題及答案
- 廣西壯族賀州市2024年小升初考試數(shù)學(xué)試卷含解析
- “非遺”之首-昆曲經(jīng)典藝術(shù)欣賞智慧樹(shù)知到期末考試答案章節(jié)答案2024年北京大學(xué)
- SMP-04-013-00 藥品受托企業(yè)審計(jì)評(píng)估管理規(guī)程
- 店鋪代運(yùn)營(yíng)合同范本
- 兒童樂(lè)園安全管理制度
評(píng)論
0/150
提交評(píng)論