项目简介:

团队选择难度为B的小游戏推箱子一方面是该项目难度中肯值得一试,并且团队两名成员对此方面有浓厚的兴趣,另一方面是此项目能充分发挥我们所学尤其是课本后几章的内容,也有利于我们的期末复习。我和队员耗时两周左右利用课余空闲时间完成了推箱子小游戏的书写,该游戏设有十个关卡实现了传统游戏推箱子的基本操作,不足之处还请老师指导批评。

项目主要技术:二维动态数组、文件、awt抽象窗口工具包、部分复杂算法、大部分注释、GUI界面、面向对象程序设计、线程等

项目需求分析

:1、简洁清晰的操作界面,最好是环境友好型(我们选择了绿色背景保护您的双眼);

2、地图元素区分明显、让用户一眼明了;

3、能够用鼠标键盘进行流利的操作(上下左右撤回跳关);

项目亮点: 1、构思和设计过程中不断引进所需包2、充分发挥键盘事件实现流利操作3、图像的绘制和移除(人物地图元素)4、音乐的添加  5、利用三重数组构造多组二维地图 6、利用动态数组实现撤回功能7、采用逆向设计路线完成操作部分 8、友好的GUI操作界面

功能截图演示部分:

任务分配:

位置姓名 任务分配
组长:董可举 1.负责git仓库创建、团队博客创建及书写整理 、任务分配和团队答辩筹备  2、负责 整个游戏界面构建(窗口、容器、对话框、游戏地图初始化及绘制)和各类操作设置(上下左右撤回跳关)。
组员:于泮之 1、负责游戏素材(人物图像、音乐、地图)搜寻并添加创意,相关较难知识查询(图像绘制相关包、设置音乐相关包)2、负责游戏音乐和地图的书写、检查整体代码漏洞以及进一步完善。

项目git地址:

https://gitee.com/DKJ666888/program-design-dkj/blob/master/dkj%E7%9A%84%E8%AE%BE%E8%AE%A1

git提交记录:

代码部分:

//22-38 各类包
//48-67 变量声明
//63-83 基本界面和
//85-99 初始化地图
//102-109 获取人物位置
//116-125获取游戏区域大小及显示游戏的左上角位置
//127-130   绘制基础
//134-140判断人物走过后的位置是过道还是终点
//143-256人物上下左右前进方法
//262-269判断是否通关
//278-310键盘事件接口
//306 初始绘制
//309-323 通关提示与选择
//330-341 图像绘制
//344-353 其他基本方法
//361  对话框
//364-375 撤回操作
//378-398上下关初始化
//402-403 清除绘制import java.awt.Color;                            //封装颜色
import java.awt.Container;                      //容器
import java.awt.Font;                             //字体
import java.awt.Graphics;                       //2D图像(图像像素、颜色绘制)
import java.awt.Image;                          //创建、修改图像
import java.awt.Toolkit;                          //操作图像
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; //三种事件及其监视器import java.util.ArrayList;                                        //调整数组import javax.swing.JFrame;                                     //窗口
import javax.swing.JOptionPane;                              //通知对话框//董可举部分
public class GameFrame extends JFrame implements ActionListener ,MouseListener,KeyListener{public static void main(String[] args){new GameFrame();               //创建窗口}private static final long serialVersionUID = 1L;                //系列化时保持版本兼容性private int grade = 0;//关卡数private int row = 7,column = 7,leftX = 0,leftY = 0;//row,column表示人物坐标;leftX,leftY记载左上角图片位置private int mapRow = 0,mapColumn = 0;//地图的行列数private int width = 0,height = 0;//屏幕大小private boolean acceptKey = true;private Image pic[] = null;                        //图像元素private byte[][] map = null;                     //地图private ArrayList list = new ArrayList();//用于撤回操作Sound sound;final byte WALL = 1,BOX = 2,BOXONEND = 3,END = 4,MANDOWN = 5,MANLEFT = 6,MANRIGHT = 7,MANUP = 8,GRASS = 9,MANDOWNONEND = 10,MANLEFTONEND = 11,MANRIGHTONEND = 12,MANUPONEND = 13;                  //给予元素编号   10-13为占据终点的5-8;public GameFrame(){                              //设置游戏基本界面super("推箱子可举泮之版");                  //创建窗口名字setSize(600,600);setVisible(true);setResizable(false);setLocation(400,100);setBackground(Color.green);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cont = getContentPane();               //创建容器cont.setLayout(null);cont.setBackground(Color.green);                  //窗体背景颜色为绿色getPic();                                                    //103行 生成图像元素width = this.getWidth();height = this.getHeight();this.setFocusable(true);                              //设置焦点,以便键盘鼠标操作initMap();this.addKeyListener(this);this.addMouseListener(this);//播放音乐sound = new Sound();sound.loadSound();}public void initMap(){                       //初始化地图map = MapFactory.getMap(grade);                   //获取该关卡的地图list.clear();                                   //清除列表byte[][] temp = map;for(int i=0;i<temp.length;i++){for(int j=0;j<temp[0].length;j++){System.out.print(temp[i][j]+" ");       }System.out.println();} getMapSizeAndPosition();getManPosition();}//获取人物当前位置public void getManPosition(){for(int i=0;i<map.length;i++){for(int j=0;j<map[0].length;j++){if(map[i][j]==MANDOWN||map[i][j]==MANUP||map[i][j]==MANLEFT||map[i][j]==MANRIGHT){row = i;column = j;break;}          }}}//获取游戏区域大小及显示游戏的左上角位置public void getMapSizeAndPosition(){mapRow = map.length;mapColumn = map[0].length;leftX = (width - map[0].length * 30)/2;leftY = (height - map.length * 30)/2;System.out.println(leftX);System.out.println(leftY);System.out.println(mapRow);System.out.println(mapColumn);}//绘制基础 获取图片并储存在数组中public void getPic(){pic = new Image[14];for(int i=0;i<=13;i++){pic[i] = Toolkit.getDefaultToolkit().getImage("D:/Game/pic"+i+".png");}}public byte grassOrEnd(byte man){                               //判断人物走过后的位置是过道还是终点byte result = GRASS;if(man == MANLEFTONEND || man == MANRIGHTONEND || man == MANUPONEND || man == MANDOWNONEND){result = END;}return result;}private void moveUp(){if(map[row-1][column]==WALL)return;                             //结束方法调用byte tempBox;byte tempMan;if(map[row-1][column]==BOX||map[row-1][column]==BOXONEND){     //如果向上一格是箱子if(map[row-2][column]==GRASS||map[row-2][column]==END){     //如果向上第二格是过道或者终点Map currentMap = new Map(row,column,map);           //保留当前地图信息list.add(currentMap);//用于撤回操作tempBox = map[row-2][column]==END?BOXONEND:BOX;tempMan = map[row-1][column]==BOXONEND?MANUPONEND:MANUP;               //条件表达式map[row][column] = grassOrEnd(map[row][column]);map[row-2][column] = tempBox;map[row-1][column] = tempMan;                                        //修改人离开后的坐标row--;}}else{//如果向上一格是过道或者终点Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempMan = map[row-1][column]==GRASS?MANUP:MANUPONEND;map[row][column] = grassOrEnd(map[row][column]);map[row-1][column] = tempMan;                                              //修改人离开后的坐标row--;}}private void moveDown(){if(map[row+1][column]==WALL)return ;byte tempBox;byte tempMan;if(map[row+1][column]==BOX||map[row+1][column]==BOXONEND){if(map[row+2][column]==END||map[row+2][column]==GRASS){Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempBox = map[row+2][column] == END?BOXONEND:BOX;tempMan = map[row+1][column] == BOXONEND?MANDOWNONEND:MANDOWN;map[row][column] = grassOrEnd(map[row][column]);map[row+2][column] = tempBox;map[row+1][column] = tempMan;row++;}}else{Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempMan = map[row+1][column]==GRASS?MANDOWN:MANDOWNONEND;map[row][column] = grassOrEnd(map[row][column]);map[row+1][column] = tempMan;row++;}}private void moveLeft(){if(map[row][column-1]==WALL)return ;byte tempBox;byte tempMan;if(map[row][column-1]==BOX||map[row][column-1]==BOXONEND){if(map[row][column-2]==END||map[row][column-2]==GRASS){Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempBox = map[row][column-2] == END?BOXONEND:BOX;tempMan = map[row][column-1] == BOXONEND?MANLEFTONEND:MANLEFT;map[row][column] = grassOrEnd(map[row][column]);map[row][column-2] = tempBox;map[row][column-1] = tempMan;column--;}}else{Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempMan = map[row][column-1]==GRASS?MANLEFT:MANLEFTONEND;map[row][column] = grassOrEnd(map[row][column]);map[row][column-1] = tempMan;column--;}}private void moveRight(){if(map[row][column+1]==WALL)return ;byte tempBox;byte tempMan;if(map[row][column+1]==BOX||map[row][column+1]==BOXONEND){if(map[row][column+2]==END||map[row][column+2]==GRASS){Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempBox = map[row][column+2] == END?BOXONEND:BOX;tempMan = map[row][column+1] == BOXONEND?MANRIGHTONEND:MANRIGHT;map[row][column] = grassOrEnd(map[row][column]);map[row][column+2] = tempBox;map[row][column+1] = tempMan;column++;}}else{Map currentMap = new Map(row,column,map);list.add(currentMap);//用于撤回操作tempMan = map[row][column+1]==GRASS?MANRIGHT:MANRIGHTONEND;map[row][column] = grassOrEnd(map[row][column]);map[row][column+1] = tempMan;column++;}}//判断是否通关public boolean isFinished(){for(int i=0;i<mapRow;i++)for(int j=0;j<mapColumn;j++){if(map[i][j]==END||map[i][j]==MANDOWNONEND||map[i][j]==MANUPONEND||map[i][j]==MANLEFTONEND||map[i][j]==MANRIGHTONEND){return false;                                         //无false即通关} }return true;}//人物操作设置@Override                                                                   //检查方法正确性 断言作用public void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_UP){moveUp();}if(e.getKeyCode() == KeyEvent.VK_DOWN){moveDown();}if(e.getKeyCode() == KeyEvent.VK_LEFT){moveLeft();}if(e.getKeyCode() == KeyEvent.VK_RIGHT){moveRight();}if(e.getKeyCode() == KeyEvent.VK_A){//上一关acceptKey = true;priorGrade();return ;}if(e.getKeyCode() == KeyEvent.VK_D){//下一关acceptKey = true;nextGrade();return ;}if(e.getKeyCode() == KeyEvent.VK_B){//撤回undo();}//初始绘制repaint();if(isFinished()){//禁用按键acceptKey = false;                                       //false无法撤回if(grade==10){DisplayToast("恭喜你通过最后一关");}else{String msg = "恭喜你通过第"+(grade+1)+"关!!!\n是否要进入下一关?";int type = JOptionPane.YES_NO_OPTION;String title = "过关";int choice = 0;choice = JOptionPane.showConfirmDialog(null, msg,title,type);  //选择是否进入下一关if(choice==1){System.exit(0);}else if(choice == 0){acceptKey = true;nextGrade();}}}}
//绘制地图细节public void paint(Graphics g){for(int i=0;i<mapRow;i++)for(int j=0;j<mapColumn;j++){if(map[i][j]!=0){g.drawImage(pic[map[i][j]],leftX+j*30,leftY+i*30,30,30,this);//设置每个图片元素的大小}}g.setColor(Color.RED);g.setFont(new Font("楷体_2312",Font.BOLD,30));g.drawString("现在是第", 150, 140);g.drawString(String.valueOf(grade+1),310,140);g.drawString("关", 360, 140);}public int getManX(){return row;}public int getManY(){return column;}public int getGrade(){return grade;}public byte[][] getMap(int grade){      return MapFactory.getMap(grade);}//显示相关提示信息对话框public void DisplayToast(String str){JOptionPane.showMessageDialog(null, str,"提示",JOptionPane.ERROR_MESSAGE);}// 撤回操作public void undo(){if(acceptKey){if(list.size()>0){Map priorMap = (Map)list.get(list.size()-1);map = priorMap.getMap();row = priorMap.getManX();column = priorMap.getManY();repaint();list.remove(list.size()-1);       //撤回后移除撤回前数据}}else{DisplayToast("此关已完成,不能撤销");}}//上一关public void priorGrade(){grade--;acceptKey = true;if(grade<0)grade = 0;initMap();clearPaint(this.getGraphics());repaint();}//下一关public void nextGrade(){if(grade>=MapFactory.getCount()-1){DisplayToast("恭喜你完成所有关卡");acceptKey = false;}else{grade++;initMap();clearPaint(this.getGraphics());repaint();acceptKey = true;}}// 清除矩形区域绘制private void clearPaint(Graphics g) {g.clearRect(0, 0, width+leftX, height+leftY);}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseClicked(MouseEvent e) {// TODO Auto-generated method stubif(e.getButton() == MouseEvent.BUTTON3)                     //鼠标右键也可以进行撤回操作{undo();}}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub}}
//用来封装当前游戏信息以便于撤回时利用;
public class Map {int manX = 0;int manY = 0;byte map[][];int grade;public Map(int manX,int manY,byte[][] map){                                              this.manX = manX;this.manY = manY;int row = map.length;int column = map[0].length;byte temp[][] = new byte[row][column];for(int i=0;i<row;i++){for(int j=0;j<column;j++){temp[i][j] = map[i][j];}}this.map = temp;//避免直接引用}public Map(int manX,int manY,byte[][] map,int grade){this(manX,manY,map);this.grade = grade;}public int getManX(){return manX;}public int getManY(){return manY;}public byte[][] getMap(){return map;}public int getGrade(){return grade;}}//于泮之部分
public class MapFactory {//地图数据类static byte map[][][] = {                           //三维数组实现多个二维地图{{0,0,1,1,1,0,0,0},{0,0,1,4,1,0,0,0},{0,0,1,9,1,1,1,1},{1,1,1,2,9,2,4,1},{1,4,9,2,5,1,1,1},{1,1,1,1,2,1,0,0},{0,0,0,1,4,1,0,0},{0,0,0,1,1,1,0,0}},{{1,1,1,1,1,0,0,0,0},{1,9,9,5,1,0,0,0,0},{1,9,2,2,1,0,1,1,1},{1,9,2,9,1,0,1,4,1},{1,1,1,9,1,1,1,4,1},{0,1,1,9,9,9,9,4,1},{0,1,9,9,9,1,9,9,1},{0,1,9,9,9,1,1,1,1},{0,1,1,1,1,1,0,0,0}},{{1,1,1,1,1,0,0,0,0},{1,9,9,9,1,1,0,0,0},{1,9,2,9,9,1,0,0,0},{1,1,9,2,9,1,1,1,1},{0,1,1,1,5,4,9,9,1},{0,0,1,9,9,4,1,9,1},{0,0,1,9,9,9,9,9,1},{0,0,1,1,1,1,1,1,1}         },{{0,0,1,1,1,1},{0,1,1,9,9,1},{1,1,9,2,9,1},{1,4,2,9,5,1},{1,2,4,9,1,1},{1,4,9,1,1,0},{1,1,1,1,0,0}},{{1,1,1,1,1,1},{1,9,5,9,9,1},{1,9,2,9,9,1},{1,2,9,1,1,1},{1,4,9,4,1,0},{1,1,1,1,1,0}},{{0,0,0,1,1,1,1,0,0},{0,0,1,1,9,9,1,1,0},{1,1,1,9,5,2,4,1,1},{1,9,9,9,9,2,4,9,1},{1,9,9,9,1,2,4,9,1},{1,1,1,1,1,9,1,9,1},{0,0,0,0,1,9,9,9,1},{0,0,0,0,1,1,1,1,1}},{{0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0},//19行{0,0,0,0,1,9,9,9,1,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,1,2,9,9,1,0,0,0,0,0,0,0,0,0,0},{0,0,1,1,1,9,9,2,1,1,0,0,0,0,0,0,0,0,0},{0,0,1,9,9,2,9,2,9,1,0,0,0,0,0,0,0,0,0},{1,1,1,9,1,9,1,1,9,1,0,0,0,1,1,1,1,1,1},{1,9,9,9,1,9,1,1,9,1,1,1,1,1,9,9,4,4,1},{1,9,2,9,9,2,9,9,9,9,9,9,9,9,9,9,4,4,1},{1,1,1,1,1,9,1,1,1,9,1,5,1,1,9,9,4,4,1},{0,0,0,0,1,9,9,9,9,9,1,1,1,1,1,1,1,1,1},{0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}},{{1,1,1,1,1,1,1,1,1,1,1,1,0,0},//14行{1,4,4,9,9,1,9,9,9,9,9,1,1,1},{1,4,4,9,9,1,9,2,9,9,2,9,9,1},{1,4,4,9,9,1,2,1,1,1,1,9,9,1},{1,4,4,9,9,9,9,5,9,1,1,9,9,1},{1,4,4,9,9,1,9,1,9,9,2,9,1,1},{1,1,1,1,1,1,9,1,1,2,9,2,9,1},{0,0,1,9,2,9,9,2,9,2,9,2,9,1},{0,0,1,9,9,9,9,1,9,9,9,9,9,1},{0,0,1,1,1,1,1,1,1,1,1,1,1,1}},{{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0},//17行{0,0,0,0,0,0,0,0,1,9,9,9,9,9,5,1,0},{0,0,0,0,0,0,0,0,1,9,2,1,2,9,1,1,0},{0,0,0,0,0,0,0,0,1,9,2,9,9,2,1,0,0},{0,0,0,0,0,0,0,0,1,1,2,9,2,9,1,0,0},{1,1,1,1,1,1,1,1,1,9,2,9,1,9,1,1,1},{1,4,4,4,4,9,9,1,1,9,2,9,9,2,9,9,1},{1,1,4,4,4,9,9,9,9,2,9,9,2,9,9,9,1},{1,4,4,4,4,9,9,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0}   },{{0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0},//19行{0,0,0,0,0,1,1,1,1,0,1,9,9,1,0,0,0,0,0},{0,0,0,1,1,1,9,5,1,1,1,2,9,1,0,0,0,0,0},{0,0,1,1,9,9,9,9,9,9,2,9,9,1,0,0,0,0,0},{0,1,1,9,9,2,9,2,2,1,1,9,1,1,0,0,0,0,0},{0,1,9,9,1,2,1,1,9,9,9,9,9,1,0,0,0,0,0},{0,1,9,1,9,2,9,2,2,9,1,9,1,1,1,0,0,0,0},{0,1,9,9,9,2,9,1,9,9,1,9,2,9,1,1,1,1,1},{1,1,1,1,9,9,9,9,1,9,9,2,2,9,1,9,9,9,1},{1,1,1,1,9,1,1,9,2,9,9,9,9,9,9,9,9,9,1},{1,4,9,9,9,9,1,1,1,9,9,1,1,1,1,1,1,1,1},{1,4,4,9,4,4,1,0,1,1,1,1,0,0,0,0,0,0,0},{1,4,4,4,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,4,4,4,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0},{1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}}};static int count = map.length;//初始化关卡地图public static byte[][] getMap(int grade){byte[][] temp;if(grade>=0&&grade<count)temp = map[grade];elsetemp = map[0];int row = temp.length;                              //行int column = temp[0].length;                     //列byte[][] result = new byte[row][column];//备份关卡版本并返回for(int i=0;i<row;i++){for(int j=0;j<column;j++){result[i][j] = temp[i][j];}}return result;}public static int getCount(){return count;}}import javax.sound.midi.*;                             //设置音乐import java.io.File;                                       //文件类
import java.io.IOException;                           //异常处理public class Sound {String path = new String("D:/Music/");String file = new String("nor.mid");Sequence seq;Sequencer midi;boolean sign;public void loadSound(){try {seq = MidiSystem.getSequence(new File(path+file));midi = MidiSystem.getSequencer();midi.open();midi.setSequence(seq);midi.start();midi.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);} catch (InvalidMidiDataException | IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MidiUnavailableException e) {// TODO Auto-generated catch blocke.printStackTrace();}sign = true;}public Sound(){}void mystop(){midi.stop();midi.close();sign=false;}boolean isplay(){return sign;}void setMusic(String e){file=e;}}

java程序设计-推箱子(董可举、于泮之)相关推荐

  1. 基于java的推箱子游戏系统设计与实现(项目报告+答辩PPT+源代码+部署视频)

    项目报告 基于Java的推箱子游戏设计与实现 社会在进步,人们生活质量也在日益提高.高强度的压力也接踵而来.社会中急需出现新的有效方式来缓解人们的压力.此次设计符合了社会需求,Java推箱子游戏可以让 ...

  2. Java 编写推箱子报告_Java推箱子怎么写啊?

    展开全部 这是我之前写的一篇java实现推箱子算法的文章,简单的给你看一下: <推箱子游戏>是一款益智32313133353236313431303231363533e59b9ee7ad9 ...

  3. 【Java】推箱子小游戏(带背景音乐)完整代码

    Java实现推箱子小游戏 一.整体框架 二.游戏效果图 三.推箱子四大类 1. GameFrame类 2. Map类 3. MapFactory类 4. Sound类 四.游戏分析 1.游戏操作 2. ...

  4. JAVA简易推箱子小游戏制作

    以下是代码: Run.java public class Run {public static void main(String[] args) {// TODO Auto-generated met ...

  5. java版 推箱子,俄罗斯方块,诗歌默写,坦克!由瑶哥特改造哦!

    其实我发现自己用java还真的写了好多小游戏了,一起刚刚开始学java的时候听学长说,写个俄罗斯方块要看一本搬砖厚的书, 刚开始还不信,不过现在信了,javaSe学完是要有本搬砖候的书了! 这个好像也 ...

  6. Java 编写推箱子报告,推箱子游戏用java怎么去写

    推箱子游戏用java怎么去写 发布时间:2020-06-22 16:31:07 来源:亿速云 阅读:100 作者:清晨 这篇文章将为大家详细讲解有关推箱子游戏用java怎么写,小编觉得挺实用的,因此分 ...

  7. 【基于Swing+Java的推箱子小游戏的设计与实现(效果+源代码+论文+答辩PPT)墙裂推荐!!超级好玩儿!带背景音乐~~】

    快速阅读目录 (一)效果 (1)游戏静态截图 (2)动态游戏示例 (二)源代码示例 (三)说明 (一)效果 (可以通过上下左右键来控制箱子的移动) (1)游戏静态截图 初始化游戏界面: 选项: < ...

  8. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  9. 一文教你使用java开发一款推箱子游戏

    导读:社会在进步,人们生活质量也在日益提高.高强度的压力也接踵而来.社会中急需出现新的有效方式来缓解人们的压力.此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣.具有操作 ...

最新文章

  1. Pytorch的神经网络编程学习第一节
  2. js画布组件(canvas/canvas)
  3. Spring Boot OAuth 2.0 客户端
  4. Tool/IDE之MinGW:MinGW(C++环境)的简介、安装、使用方法之详细攻略
  5. SQL注入之布尔盲注——sql-lab第八关
  6. J - 哈密顿绕行世界问题
  7. php 面向过程分页,无JS,完全php面向过程,数据分页
  8. java代码执行linux命令_java执行Linux命令的方法
  9. SAP Gateway service language determination
  10. [BZOJ 2654]tree(陈立杰)
  11. Google再次从官方商店下架伪装成合法程序的恶意应用
  12. java jdk 的环境变量_Java JDK14(Java 14)在Windows上安装与环境变量配置
  13. Maven学习总结(18)——深入理解Maven仓库
  14. Spring源码分析之SpringMVC的DispatcherServlet是如何处理Http请求的
  15. [HDU5739]Fantasia(圆方树DP)
  16. JAVA 文件上传 和 下载
  17. hp服务器修改raid,HP服务器RAID设置方法介绍
  18. app跳转到指定app
  19. kubernetes in action读书笔记(四)ConfigMap、Secret、滚动升级、downwardAPI、Deployment、Statefulset
  20. 《The Tobii I-VT Fixation Filter Algorithm description》阅读

热门文章

  1. R语言dplyr包group_by函数、quantile函数、summarise函数计算dataframe数据中指定数值数据列在每个分组中的多个分位数值
  2. STM32F103C8T6工程模板 ——固件库版、正点原子代码风格、包含SYSTEM文件夹
  3. sign (数学符号函数)
  4. 11-wtm附件管理
  5. 【Vim】使用Vundle管理配置Vim基本插件
  6. 2021速卖通什么产品好卖?2021速卖通重点招商品类:家居工具行业出海机遇
  7. 对于 React 结合 Antd 实现富文本编辑功能
  8. RF射频PCB板布局布线经验总结
  9. 总结 | 完整的产品生命线知识垂直整合
  10. 达梦数据库-初探监视器服务与守护进程服务