java_推箱子講解_第1頁(yè)
java_推箱子講解_第2頁(yè)
java_推箱子講解_第3頁(yè)
java_推箱子講解_第4頁(yè)
java_推箱子講解_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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、總共四個(gè)包, 因?yàn)椴荒苌蟼鲌D片所以在第 2個(gè)包中,導(dǎo)入圖片(圖片可以去網(wǎng)上 下載一些)或者高手幫我解決一下。不用導(dǎo)入圖片也能玩!(求大神)面是整個(gè)游戲的代碼:1: package com.sj.xzq;class BackUpInfo private int map;private int manX;private int manY;public BackUpInfo(int map, int manX, int manY) this.map = map; this.manX = manX; this.manY = manY;public int getMap() return map;pub

2、lic int getManX() return manX;public int getManY() return manY;2: package com.sj.xzq;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Stack;import javax.s

3、wing.JOptionPane;import javax.swing.JPanel;public class Game extends JPanel private LoadMap lm;private int level;private int manX, manY;private int lastImg = 2;private int map; /地圖所對(duì)應(yīng)的二維數(shù)組private int backMap; / 地圖所對(duì)應(yīng)的二維數(shù)組 , 這個(gè)數(shù)組用于保 存上一步的地圖信息private static final int LEN = 30; /圖片的長(zhǎng)private static fina

4、l int WIDTH = 30; /圖片的寬private static final int SPEED = 30; /移動(dòng)速度,每次移動(dòng)一格private static Toolkit tk = Toolkit.getDefaultToolkit();private static Image imgs = null;private Stack myStack = new Stack();private BackUpInfo bp;static imgs = new Image tk.getImage(GameFrame.class.getClassLoade r().getResource

5、(imgs/0.gif), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/1.gif), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/2.GIF), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/3.GIF), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/4.gif), tk

6、.getImage(GameFrame.class.getClassLoade r().getResource(imgs/5.GIF), tk.getImage(GameFrame.class.getClassLoader().getResource(imgs/6.GIF), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/7.GIF), tk.getImage(GameFrame.class.getClassLoade r().getResource(imgs/8.GIF), tk.getImage(GameFra

7、me.class.getClassLoade r().getResource(imgs/9.GIF) ;public Game(int level) this.setBounds(0, 0, 600, 600); this.setVisible(true); lm = new LoadMap(level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); this.level = level;public void paint(Graphics g) for (int i = 0; i 20; i+)

8、 for (int j = 0; j 20; j+) g.drawImage(imgsmapij, i * LEN, j WIDTH, this); g.setColor(Color.BLUE);g.setFont(new Font( 仿宋 , Font.BOLD, 18); g.drawString( 關(guān)卡 : + level, 50, 50);/ 響應(yīng)鍵盤事件,松開鍵盤才響應(yīng)/ 上下左右四個(gè)鍵,實(shí)現(xiàn)人物的移動(dòng)。 public void keyReleased(KeyEvent e) int keycode = e.getKeyCode();if (!isPass() switch (key

9、code) case KeyEvent.VK_UP: moveUp(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); break;case KeyEvent.VK_DOWN: moveDown(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = lm.getMap(); this.manX = lm.getMa

10、nX(); this.manY = lm.getManY();break;case KeyEvent.VK_LEFT: moveLeft(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map = lm.getMap();this.manX = lm.getManX(); this.manY = lm.getManY();break;case KeyEvent.VK_RIGHT: moveRight(); if (isPass() myStack.clear(); lm = new LoadMap(+level); map

11、= lm.getMap();this.manX = lm.getManX(); this.manY = lm.getManY(); break;case KeyEvent.VK_SPACE:back();break;default:break;/ 實(shí)現(xiàn)人物的向上移動(dòng)private void moveUp() / 如果下一步是目標(biāo)或者是草地,則移動(dòng)到下一步if (mapmanXmanY - 1 = 2 | mapmanXmanY - 1 = 4)backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) ba

12、ckMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp);mapmanXmanY = lastImg; / 先還原人物處的背景 lastImg = mapmanXmanY - 1;/ 保存人物下一步位 置的背景mapmanXmanY - 1 = 8;/ 移動(dòng)人物到下一步 manY-;repaint(); else if (mapmanXmanY- 1 = 3 | mapmanXmanY- 1 = 9) backMap = new int2020;for (int i = 0;

13、i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp);/ 如果下一步是箱子if (mapmanXmanY - 2 = 2) / 箱子前面是草地 mapmanXmanY - 2 = 3; mapmanXmanY = lastImg;if (mapmanXmanY - 1 = 3) lastImg = 2; else lastImg = 4;mapmanXmanY - 1 = 8;manY-;repai

14、nt(); else if (mapmanXmanY - 2 = 4) / 箱子前面是目標(biāo)mapmanXmanY - 2 = 9;/ 把箱子移動(dòng)到目 標(biāo),換成另一種顏色的箱子mapmanXmanY = lastImg;if (mapmanXmanY - 1 = 3) lastImg = 2; else lastImg = 4;mapmanXmanY - 1 = 8;manY-;repaint();/ 實(shí)現(xiàn)人物的向下移動(dòng) private void moveDown() / 如果下一步是目標(biāo)或者是草地,則移動(dòng)到下一步 backMap = new int2020;if (mapmanXmanY +

15、1 = 2 | mapmanXmanY + 1 = 4) for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY);myStack.push(bp);mapmanXmanY = lastImg; /先還原人物處的背景l(fā)astImg = mapmanXmanY + 1;/ 保存人物下一步位 置的背景mapmanXmanY + 1 = 5;/ 移動(dòng)人物到下一步 manY+;repaint(); else if

16、(mapmanXmanY+ 1 = 3 | mapmanXmanY+ 1 backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp);/ 如果下一步是箱子if (mapmanXmanY + 2 = 2) / 箱子前面是草地 mapmanXmanY + 2 = 3; mapmanXmanY = lastImg;if (mapmanX

17、manY + 1 = 3) lastImg = 2; else lastImg = 4;mapmanXmanY + 1 = 5; manY+; repaint(); else if (mapmanXmanY + 2 = 4) / 箱子前面是目標(biāo)mapmanXmanY + 2 = 9;/ 把箱子移動(dòng)到目 標(biāo),換成另一種顏色的箱子mapmanXmanY = lastImg;if (mapmanXmanY + 1 = 3) lastImg = 2; else lastImg = 4;mapmanXmanY + 1 = 5; manY+; repaint();/ 實(shí)現(xiàn)人物的左移 private voi

18、d moveLeft() / 如果下一步是目標(biāo)或者是草地,則移動(dòng)到下一步 if (mapmanX - 1manY = 2 | mapmanX - 1manY = 4)backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp);mapmanXmanY = lastImg; / 先還原人物處的背景 lastImg = mapmanX

19、- 1manY;/ 保存人物下一步位 置的背景mapmanX - 1manY = 6;/移動(dòng)人物到下一步manX-;repaint(); else if (mapmanX- 1manY = 3 | mapmanX - 1manY = 9) backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX, manY); myStack.push(bp);/ 如果下一步是箱子if (ma

20、pmanX - 2manY = 2) / 箱子前面是草地mapmanX - 2manY = 3; mapmanXmanY = lastImg;if (mapmanX - 1manY = 3) lastImg = 2; else lastImg = 4;mapmanX - 1manY = 6; manX-;repaint(); else if (mapmanX - 2manY = 4) / 箱子前面是目標(biāo)mapmanX - 2manY = 9;/把箱子移動(dòng)到目標(biāo),換成另一種顏色的箱子mapmanXmanY = lastImg;if (mapmanX - 1manY = 3) lastImg =

21、2; else lastImg = 4; mapmanX - 1manY = 6;manX-;repaint();/ 實(shí)現(xiàn)人物的右移 private void moveRight() / 如果下一步是目標(biāo)或者是草地,則移動(dòng)到下一步if (mapmanX + 1manY = 2 | mapmanX + 1manY = 4) backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖信息bp = new BackUpInfo(backMap, manX

22、, manY);myStack.push(bp);mapmanXmanY = lastImg; /先還原人物處的背景l(fā)astImg = mapmanX + 1manY;/ 保存人物下一步位 置的背景mapmanX + 1manY = 7;/ 移動(dòng)人物到下一步 manX+;repaint(); else if (mapmanX+ 1manY = 3 | mapmanX+ 1manY = 9) backMap = new int2020;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) backMapij = mapij;/ 保存上 一步的地圖

23、信息bp = new BackUpInfo(backMap, manX, manY);myStack.push(bp);/ 如果下一步是箱子if (mapmanX + 2manY = 2) / 箱子前面是草地mapmanX + 2manY = 3; mapmanXmanY = lastImg;if (mapmanX + 1manY = 3) lastImg = 2; else lastImg = 4;mapmanX + 1manY = 7;manX+;repaint(); else if (mapmanX + 2manY = 4) / 箱子前面是目標(biāo)mapmanX + 2manY = 9;/

24、把箱子移動(dòng)到目 標(biāo),換成另一種顏色的箱子mapmanXmanY = lastImg;if (mapmanX + 1manY = 3) lastImg = 2; else lastImg = 4;mapmanX + 1manY = 7;manX+; repaint();/ 判斷是否過(guò)關(guān) private boolean isPass() boolean pass = true;for (int i = 0; i 20; i+) for (int j = 0; j 20; j+) if (mapij = 3) pass = false; break; return pass;/ 退一步 public

25、 void back() if (!myStack.isEmpty() BackUpInfo bp = myStack.pop(); backMap = new int2020; backMap = bp.getMap(); for (int i = 0; i 20; i+) for (int j = 0; j 0 & level = 50) myStack.clear(); lm = new LoadMap(level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); this.level = l

26、evel; repaint();/ 重新開始 public void reStart() myStack.clear(); lm = new LoadMap(level); map = lm.getMap(); this.manX = lm.getManX(); this.manY = lm.getManY(); repaint();3: package com.sj.xzq;import java.awt.Graphics;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import java.a

27、wt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane; import javax.swing.JPanel;public class GameFrame extends JFrame private int level = 1;private Game game = new Game(level);private Objec

28、t possibleValues = new Object50; JPanel jp;public GameFrame() this.setTitle( 推箱子 );this.setBounds(200, 100, 800, 600);/ this.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true);for (int i = 0; i 50; i+) possibleValuesi = 第 + (i + 1) + 關(guān);jp = new JPanel() public

29、 void paintComponent(Graphics g) super.paintComponent(g);ImageIcon img=new ImageIcon(GameF rame.class.getClassLoader().getResource(imgs/backgroundImg.png); g.drawImage(img.getImage(), 0, 0, null);this.add(jp);jp.setLayout(null);JButton jb1 = new JButton( 開始游戲 );jp.add(jb1);jb1.setBounds(630, 350, 10

30、0, 30); jb1.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) startGame(); requestFocus(););JButton jb2 = new JButton( 操作說(shuō)明 );jp.add(jb2);jb2.setBounds(630, 400, 100, 30);jb2.addActionListener(new ActionListener() Override public void actionPerformed(ActionEve

31、nt e) JOptionPane.showMessageDialog(null, 人物 移動(dòng): 方向鍵上下左右 + rn 后退一步 : 空格鍵 , 操作說(shuō)明 ,JOptionPane.INFORMATION_MES SAGE);requestFocus(); );JButton jb3 = new JButton( 退出游戲 ); jp.add(jb3);jb3.setBounds(630, 450, 100, 30); jb3.addActionListener(new ActionListener() Override public void actionPerformed(Action

32、Event e) System.exit(0);setVisible(false);requestFocus(); );this.requestFocus();this.addKeyListener(new MyKeyListener();/ 開始游戲 public void startGame() repaint(); this.remove(jp); this.setLayout(null); this.add(game);JPanel jp1 = new JPanel() public void paintComponent(Graphics g) super.paintComponen

33、t(g); ImageIcon img = new ImageIcon(GameFrame.class.getClassLoader().getResource(imgs/toolImg. png);g.drawImage(img.getImage(), 0, 0, null);jp1.setBounds(600, 0, 200, 600); jp1.setLayout(null);this.add(jp1);JButton jb = new JButton(后退一步 );jp1.add(jb);jb.setBounds(50, 200, 100, 30); jb.addActionListe

34、ner(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) game.back(); requestFocus(););JButton jb1 = new JButton( 上一關(guān) ); jp1.add(jb1);jb1.setBounds(50, 250, 100, 30); jb1.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) game.goBack(); reque

35、stFocus(););JButton jb4 = new JButton( 下一關(guān) ); jp1.add(jb4);jb4.setBounds(50, 300, 100, 30); jb4.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) game.goNext(); requestFocus(););JButton jb5 = new JButton( 選關(guān) ); jp1.add(jb5);jb5.setBounds(50, 350, 100, 30); jb5

36、.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / 用戶的選擇項(xiàng)目 Object selectedValue = JOptionPane.showInputDialog(null, 請(qǐng)選擇關(guān)卡 :, 選關(guān) ,JOptionPane.INFORMATION_MESSAGE, null,possibleValues, possibleValues0);if(selectedValue != null) for (int i = 0; i 50; i+) if(sel

37、ectedValue.toString().equals( possibleValue si.toString() game.choice(i + 1); break; requestFocus(););JButton jb6 = new JButton( 重新開始 ); jp1.add(jb6);jb6.setBounds(50, 400, 100, 30); jb6.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) game.reStart(); requestFocus(););JButton jb7 = new JButton( 退出游戲 ); jp1.add(jb7);jb7.setBounds(50, 450, 100, 30); jb7.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) System.exit(0);setVisible(false);requestFocus(););/ 鍵盤監(jiān)聽class MyKeyListener extends KeyAdapter public void ke

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論