小言_互联网的博客

java实现推箱子小游戏(附源码)

518人阅读  评论(0)

先上效果图

可以通过AWSD进行移动和推箱子

自己弄出来的代码玩起来还是很有意思的。

代码一共是三个.java文件,代码内容如下所示


  
  1. package ss;
  2. import java.awt.Graphics;
  3. import java.awt.Image;
  4. import java.awt.Point;
  5. import java.awt.event.KeyEvent;
  6. import java.awt.event.KeyListener;
  7. import javax.swing.ImageIcon;
  8. import javax.swing.JFrame;
  9. import javax.swing.JOptionPane;
  10. /**
  11. * 1.继承窗体类为当前类的父类
  12. * @author lizhicheng
  13. *
  14. */
  15. public class PushBox extends JFrame implements KeyListener{
  16. /**
  17. * 3.声明一个二维数组的地图
  18. */
  19. int[][] maps=
  20. {
  21. { 3, 3, 3, 3, 3, 3, 3, 3},
  22. { 3, 0, 0, 0, 0, 0, 0, 3},
  23. { 3, 0, 0, 0, 0, 2, 0, 3}, //3表示墙
  24. { 3, 0, 0, 0, 3, 0, 3, 3}, //2表示箱子
  25. { 3, 0, 0, 1, 0, 0, 0, 3}, //1表示人
  26. { 3, 0, 3, 0, 2, 0, 0, 3}, //0表示空地
  27. { 3, 0, 0, 0, 0, 0, 0, 3},
  28. { 3, 3, 3, 3, 3, 3, 3, 3},
  29. };
  30. /**
  31. * 6.声明两个变量来保存图标的起始位置
  32. *
  33. */
  34. int top= 10,left= 25;
  35. int posX= 3,posY= 4; //保存大力水手的位置
  36. /**
  37. * 2.构造方法添加固定的窗体设置
  38. */
  39. public PushBox()
  40. {
  41. //设置标题
  42. this.setTitle( "http://ai.52learn.online");
  43. //设置窗体大小
  44. this.setSize( 500, 350);
  45. //设置窗体默认关闭操作
  46. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  47. //设置窗体可见
  48. this.setVisible( true);
  49. //设置窗体居中显示
  50. this.setLocationRelativeTo( null);
  51. //进行监听
  52. this.addKeyListener( this);
  53. }
  54. /**
  55. * 4.窗体的绘制
  56. * @param args
  57. */
  58. @Override
  59. public void paint(Graphics g) {
  60. super.paint(g);
  61. refresh(); //7.调用刷新
  62. }
  63. /**
  64. * 5.重绘所有当前窗体的组件
  65. * @param args
  66. */
  67. public void refresh()
  68. {
  69. //获取当前窗体的画笔
  70. Graphics gs= this.getGraphics();
  71. //将图片资源引入
  72. ImageIcon wall = new ImageIcon( "bian.png");
  73. ImageIcon area = new ImageIcon( "kongdi.png");
  74. ImageIcon human = new ImageIcon( "ren.png");
  75. ImageIcon box = new ImageIcon( "xiang.png");
  76. //将资源绘制在窗体上
  77. for( int i = 0 ; i < maps.length ; i++)
  78. {
  79. for( int j = 0 ; j < maps[i].length ; j++)
  80. {
  81. if(maps[i][j]== 3)
  82. {
  83. //绘制墙
  84. gs.drawImage(wall.getImage(),top+j* 40,left+i* 40, 40, 40, null);
  85. }
  86. else if(maps[i][j]== 0)
  87. {
  88. //绘制空地
  89. gs.drawImage(area.getImage(),top+j* 40,left+i* 40, 40, 40, null);
  90. }
  91. else if(maps[i][j]== 1)
  92. {
  93. //绘制水手
  94. gs.drawImage(human.getImage(),top+j* 40,left+i* 40, 40, 40, null);
  95. }
  96. else if(maps[i][j]== 2)
  97. {
  98. //绘制箱子
  99. gs.drawImage(box.getImage(),top+j* 40,left+i* 40, 40, 40, null);
  100. }
  101. }
  102. }
  103. }
  104. public static void main(String[] args) {
  105. new PushBox();
  106. }
  107. @Override
  108. public void keyPressed(KeyEvent arg0) {
  109. // TODO Auto-generated method stub
  110. char ch=arg0.getKeyChar(); //获取按键
  111. //JOptionPane.showMessageDialog(null, "你按了"+ch);
  112. if(ch== 'w'||ch== 'W')
  113. {
  114. //向上走动
  115. if(maps[posY- 1][posX]== 0)
  116. {
  117. maps[posY- 1][posX]= 1;
  118. maps[posY][posX]= 0;
  119. posY--;
  120. }
  121. else if(maps[posY- 1][posX]== 2&&maps[posY- 2][posX]== 0)
  122. {
  123. maps[posY- 2][posX]= 2;
  124. maps[posY- 1][posX]= 1;
  125. maps[posY][posX]= 0;
  126. posY--;
  127. }
  128. }
  129. else if(ch== 's'||ch== 'S')
  130. {
  131. //向下走动
  132. if(maps[posY+ 1][posX]== 0)
  133. {
  134. maps[posY+ 1][posX]= 1;
  135. maps[posY][posX]= 0;
  136. posY++;
  137. }
  138. else if(maps[posY+ 1][posX]== 2&&maps[posY+ 2][posX]== 0)
  139. {
  140. maps[posY+ 2][posX]= 2;
  141. maps[posY+ 1][posX]= 1;
  142. maps[posY][posX]= 0;
  143. posY++;
  144. }
  145. }
  146. else if(ch== 'a'||ch== 'A')
  147. {
  148. //向左走
  149. if(maps[posY][posX- 1]== 0)
  150. {
  151. maps[posY][posX- 1]= 1;
  152. maps[posY][posX]= 0;
  153. posX--;
  154. }
  155. else if(maps[posY][posX- 1]== 2&&maps[posY][posX- 2]== 0)
  156. {
  157. maps[posY][posX- 2]= 2;
  158. maps[posY][posX- 1]= 1;
  159. maps[posY][posX]= 0;
  160. posX--;
  161. }
  162. }
  163. else if(ch== 'd'||ch== 'D')
  164. {
  165. //向右走
  166. if(maps[posY][posX+ 1]== 0)
  167. {
  168. maps[posY][posX+ 1]= 1;
  169. maps[posY][posX]= 0;
  170. posX++;
  171. }
  172. else if(maps[posY][posX+ 1]== 2&&maps[posY][posX+ 2]== 0)
  173. {
  174. maps[posY][posX+ 2]= 2;
  175. maps[posY][posX+ 1]= 1;
  176. maps[posY][posX]= 0;
  177. posX++;
  178. }
  179. }
  180. refresh();
  181. }
  182. @Override
  183. public void keyReleased(KeyEvent arg0) {
  184. // TODO Auto-generated method stub
  185. }
  186. @Override
  187. public void keyTyped(KeyEvent arg0) {
  188. // TODO Auto-generated method stub
  189. }
  190. }

  
  1. package mg;
  2. import java.util.Scanner;
  3. public class migong {
  4. public static void main(String[] args) {
  5. int[][] maps=
  6. {
  7. { 3, 3, 3, 3, 3, 3, 3, 3},
  8. { 3, 0, 0, 0, 0, 0, 0, 3},
  9. { 3, 0, 0, 0, 0, 2, 0, 3}, //3表示墙
  10. { 3, 0, 0, 0, 3, 0, 3, 3}, //2表示箱子
  11. { 3, 0, 0, 1, 0, 0, 0, 3}, //1表示人
  12. { 3, 0, 3, 0, 2, 0, 0, 3}, //0表示空地
  13. { 3, 0, 0, 0, 0, 0, 0, 3},
  14. { 3, 3, 3, 3, 3, 3, 3, 3},
  15. };
  16. //打印输出地图在控制台上
  17. for( int i = 0 ; i < maps.length ; i++)
  18. {
  19. for( int j = 0 ; j < maps[i].length ; j++)
  20. {
  21. System.out.print(maps[i][j]);
  22. }
  23. System.out.println();
  24. }
  25. //声明两个变量记录人的位置
  26. int posX= 3,posY= 4;
  27. //接收用户键盘的输入
  28. Scanner sc = new Scanner(System.in);
  29. System.out.print( "请输入方向:上:w,下:s,左:a,右:d : ");
  30. //运行程序
  31. while( true)
  32. {
  33. String str=sc.next();
  34. if(str.equalsIgnoreCase( "w"))
  35. {
  36. //向上
  37. if(maps[posY- 1][posX]== 0)
  38. {
  39. maps[posY- 1][posX]= 1;
  40. maps[posY][posX]= 0;
  41. posY--;
  42. }
  43. else if(maps[posY- 1][posX]== 2&&maps[posY- 2][posX]== 0)
  44. {
  45. maps[posY- 2][posX]= 2;
  46. maps[posY- 1][posX]= 1;
  47. maps[posY][posX]= 0;
  48. posY--;
  49. }
  50. }
  51. else if(str.equalsIgnoreCase( "s"))
  52. {
  53. //向下
  54. if(maps[posY+ 1][posX]== 0)
  55. {
  56. maps[posY+ 1][posX]= 1;
  57. maps[posY][posX]= 0;
  58. posY++;
  59. }
  60. else if(maps[posY+ 1][posX]== 2&&maps[posY+ 2][posX]== 0)
  61. {
  62. maps[posY+ 2][posX]= 2;
  63. maps[posY+ 1][posX]= 1;
  64. maps[posY][posX]= 0;
  65. posY++;
  66. }
  67. }
  68. else if(str.equalsIgnoreCase( "a"))
  69. {
  70. //向左
  71. if(maps[posY][posX- 1]== 0)
  72. {
  73. maps[posY][posX- 1]= 1;
  74. maps[posY][posX]= 0;
  75. posX--;
  76. }
  77. else if(maps[posY][posX- 1]== 2&&maps[posY][posX- 2]== 0)
  78. {
  79. maps[posY][posX- 2]= 2;
  80. maps[posY][posX- 1]= 1;
  81. maps[posY][posX]= 0;
  82. posX--;
  83. }
  84. }
  85. else if(str.equalsIgnoreCase( "d"))
  86. {
  87. //向右
  88. if(maps[posY][posX+ 1]== 0)
  89. {
  90. maps[posY][posX+ 1]= 1;
  91. maps[posY][posX]= 0;
  92. posX++;
  93. }
  94. else if(maps[posY][posX+ 1]== 2&&maps[posY][posX+ 2]== 0)
  95. {
  96. maps[posY][posX+ 2]= 2;
  97. maps[posY][posX+ 1]= 1;
  98. maps[posY][posX]= 0;
  99. posX++;
  100. }
  101. }
  102. else if(str.equalsIgnoreCase( "quit"))
  103. {
  104. System.out.print( "游戏即将结束\n");
  105. System.exit( 0);
  106. }
  107. //打印输出地图在控制台上
  108. for( int i = 0 ; i < maps.length ; i++)
  109. {
  110. for( int j = 0 ; j < maps[i].length ; j++)
  111. {
  112. System.out.print(maps[i][j]);
  113. }
  114. System.out.println();
  115. }
  116. System.out.print( "请输入方向:上:w,下:s,左:a,右:d : ");
  117. }
  118. }
  119. }

  
  1. package lzc;
  2. import java.awt.*;
  3. import java.awt.event.KeyEvent;
  4. import java.awt.event.KeyListener;
  5. import javax.swing.ImageIcon;
  6. import javax.swing.JFrame;
  7. import javax.swing.JLabel;
  8. import javax.swing.JOptionPane;
  9. public class Pig extends JFrame implements KeyListener{
  10. //进行引入图片
  11. ImageIcon pig = new ImageIcon( "右猪.gif");
  12. JLabel pigLab = new JLabel(pig);
  13. //背景
  14. ImageIcon grass = new ImageIcon( "草地.gif");
  15. JLabel grassLab = new JLabel(grass);
  16. //声明一个构造方法
  17. public Pig() {
  18. // TODO Auto-generated constructor stub
  19. this.setTitle( "小猪佩奇"); //设置窗体的标题
  20. this.setSize( 841, 310); //设置窗体的大小
  21. this.setVisible( true); //设置窗口的可见
  22. this.setLocationRelativeTo( null); //设置窗体居中显示
  23. //设置窗体的关闭默认操作:当你点击关闭窗口就自动退出程序
  24. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25. //设置窗体大小不可改变
  26. this.setResizable( false);
  27. pigLab.setBounds( 300, 150, 71, 88);
  28. //添加背景
  29. this.add(grassLab);
  30. grassLab.setBounds( 10, 10, 841, 310);
  31. //添加佩奇
  32. grassLab.add(pigLab);
  33. //进行监听
  34. this.addKeyListener( this);
  35. //move();
  36. }
  37. void move()
  38. {
  39. int x= 600,y= 40;
  40. while( true)
  41. {
  42. x-= 6;
  43. pigLab.setLocation(x, y);
  44. try {
  45. Thread.currentThread().sleep( 10);
  46. } catch (Exception a) {
  47. }
  48. if(x< 0) x= 840;
  49. }
  50. }
  51. public static void main(String[] args) {
  52. new Pig();
  53. }
  54. /**
  55. *用户按下并松开键盘上的按键
  56. */
  57. @Override
  58. public void keyPressed(KeyEvent arg0) {
  59. // TODO Auto-generated method stub
  60. char ch=arg0.getKeyChar(); //获取按键
  61. //获取佩琪的位置
  62. Point p=pigLab.getLocation();
  63. int x=p.x,y=p.y;
  64. //JOptionPane.showMessageDialog(null, "你按了"+ch);
  65. switch(ch)
  66. {
  67. case 'w':
  68. //向上走动
  69. y=y- 20;
  70. if(y< 0)
  71. {
  72. y= 310;
  73. }
  74. break;
  75. case 's':
  76. //向下走动
  77. y=y+ 20;
  78. if(y> 310)
  79. {
  80. y= 0;
  81. }
  82. break;
  83. case 'a':
  84. //向左走
  85. x=x- 20;
  86. if(x< 0)
  87. {
  88. x= 841;
  89. }
  90. break;
  91. case 'd':
  92. //向右走
  93. x=x+ 20;
  94. if(x> 841)
  95. {
  96. x= 0;
  97. }
  98. break;
  99. default :;
  100. }
  101. pigLab.setLocation(x, y);
  102. }
  103. @Override
  104. public void keyReleased(KeyEvent arg0) {
  105. // TODO Auto-generated method stub
  106. }
  107. @Override
  108. public void keyTyped(KeyEvent arg0) {
  109. // TODO Auto-generated method stub
  110. }
  111. }

点击获取代码和相关的图像资源


转载:https://blog.csdn.net/update7/article/details/108980339
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场