JAVA推箱子游戏
Java实现经典游戏推箱子的示例代码

Java实现经典游戏推箱⼦的⽰例代码⽬录前⾔主要设计功能截图代码实现核⼼类声⾳播放类总结前⾔《推箱⼦》推箱⼦是⼀个古⽼的游戏,⽬的是在训练你的逻辑思考能⼒。
在⼀个狭⼩的仓库中,要求把⽊箱放到指定的位置,稍不⼩⼼就会出现箱⼦⽆法移动或者通道被堵住的情况,所以需要巧妙的利⽤有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
游戏是⽤java语⾔实现,采⽤了swing技术进⾏了界⾯化处理,设计思路⽤了⾯向对象思想。
主要需求控制搬运⼯上下左右移动,来将箱⼦推到指定地点主要设计1、游戏⾯板⽣成显⽰2、地图⽣成算法3、⼈物移动算法4、播放背景⾳乐5、箱⼦移动算法6、全部箱⼦移动到指定位置,才算游戏过关功能截图游戏开始移动效果游戏过关代码实现核⼼类public class GameFrame extends JFrame implementsActionListener, MouseListener, KeyListener {// 实现动作事件监听器、⿏标事件监听器、键盘事件监听器// 当前的关卡数,默认为第⼀关,从1开始计数private int grade = 1;// row,column记载⼈的位置,分别表⽰⼆维数组中的⾏号和列号,即map[row][column]确定⼈的位置private int row = 7, column = 7;// leftX,leftY记载左上⾓图⽚的位置,避免图⽚从(0,0)坐标开始,因为是图⽚填充,从(0,0)开始不⾏private int leftX = 50, leftY = 50;// 记载地图的总共有多少⾏、多少列private int mapRow = 0, mapColumn = 0;// 记载屏幕窗⼝的宽度和⾼度private int width = 0, height = 0;private boolean acceptKey = true;// 程序所需要⽤到的图⽚private Image pics[] = null;// 图⽚数据private byte[][] map = null;// 地图数据private ArrayList list = new ArrayList();private SoundPlayerUtil soundPlayer;// 播放声⾳⼯具类/* 常量,即游戏中的资源 */private final static int WALL = 1;// 墙private final static int BOX = 2;// 箱⼦private final static int BOX_ON_END = 3;// 放到⽬的地的箱⼦private final static int END = 4;// ⽬的地private final static int MAN_DOWN = 5;// 向下的⼈private final static int MAN_LEFT = 6;// 向左的⼈private final static int MAN_RIGHT = 7;// 向右的⼈private final static int MAN_UP = 8;// 向上的⼈private final static int GRASS = 9;// 通道private final static int MAN_DOWN_ON_END = 10;// 站在⽬的地向下的⼈private final static int MAN_LEFT_ON_END = 11;// 站在⽬的地向左的⼈private final static int MAN_RIGHT_ON_END = 12;// 站在⽬的地向右的⼈private final static int MAN_UP_ON_END = 13;// 站在⽬的地向上的⼈private final static int MOVE_PIXEL = 30;// 表⽰每次移动30像素/*** 在构造⽅法GameFrame0中,调⽤initMap()法来初始化本关grade游戏地图,清空悔棋信* 息列表list,同时播放MIDI背景⾳乐。
用java实现推箱子(sokoban)游戏

推箱子游戏一、功能描述:➢可以通过面板上的按钮或是键盘上的pageup,pagedown键选择上下关➢可以通过面板上按钮或是键盘上的Backspace键后退,一直后退自己想要的位置,知道游戏开始时的位置。
➢可以通过面板上的按钮或是键盘上的字母r重新开始当前关卡游戏。
➢可以在复选框选择想要玩的关卡。
二、界面及运行截图三、源代码(三部分)1、地图类package box;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;//读取字符文件类FileReader import java.io.IOException;public class map {int[][] map=new int[20][20];int manX,manY;public map(int level){String filepath="mapc/"+level+".txt";File file = new File(filepath);FileReader fr = null;//利用FileReader流来读取一个文件中的数据BufferedReader br = null;//字符读到缓存里try {fr = new FileReader(file);br = new BufferedReader(fr);for (int i = 0; i < 15; i++){String line = br.readLine();//以行为单位,一次读一行利用BufferedReader 的readLine,读取分行文本byte[] point = line.getBytes();//将字符串转换为字节数组for (int j = 0; j < 15; j++) {map[i][j] = point[j] - 48;// 根据ASCall码表要减掉30H(十进制的48)if (map[i][j] == 5 || map[i][j] == 6 || map[i][j] == 7|| map[i][j] == 8){manX = i;manY = j;}}}}catch (FileNotFoundException e){e.printStackTrace();//深层次的输出异常调用的流程}catch (IOException e){e.printStackTrace();//深层次的输出异常调用的流程}catch(NullPointerException e){e.printStackTrace();//深层次的输出异常调用的流程}finally {if (br == null){try{br.close();}catch (IOException e){e.printStackTrace();}br = null;}if (fr == null){try {fr.close();} catch (IOException e){e.printStackTrace();}fr = null;}}}public int[][] getMap() {return map;}public int getManX() {return manX;}public int getManY() {return manY;}}2、游戏运行类package box;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.util.*;import javax.swing.*;public class pushbox extends JFrame implements KeyListener,ActionListener{ map map_level=new map(1); //首次获取地图int[][] map=new int[15][15]; //地图上每个位置所对应的图片int[][] map_restart=new int[15][15]; //备用图片static int manX,manY; //人所处的位置static int level=1; //所处关卡static int step=0;Image[] picture; //地图上的所有图片ImageIcon[] image=new ImageIcon[10];Stack<Integer> back_stack = new Stack<Integer>(); //存储所前行的路径JButton next,previous,back,restart,exit; //按钮:下一关,上一关,重新开始,退出String current_level="第"+level+"关"; //当前所处关卡(右上角显示文本)String[] level_button=new String[13]; //复选框的容JComboBox selectBox; //选关复选框final int Up = 0;final int Down = 1;final int Left = 2;final int Right = 3;int[] dir_x = {-1, 1, 0, 0};int[] dir_y = {0, 0, -1, 1};public pushbox(){super("推箱子");getmap(map);previous=new JButton("上一关");next=new JButton("下一关");restart=new JButton("重新开始");back=new JButton("后退");exit=new JButton("退出游戏");for(int i=0;i<13;i++)level_button[i]="第"+Integer.toString(i+1)+"关";selectBox=new JComboBox(level_button);FlowLayout layout=new FlowLayout(); //布局模式Container c=getContentPane();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER); //控件在布局中的位置c.setBackground(Color.CYAN); //背景色c.add(previous);c.add(next);c.add(back);c.add(restart);c.add(selectBox);c.add(exit);previous.addActionListener((ActionListener) this);previous.addKeyListener(this);next.addActionListener((ActionListener) this);next.addKeyListener(this);back.addActionListener(this);back.addKeyListener(this);restart.addActionListener((ActionListener) this);restart.addKeyListener(this);exit.addActionListener((ActionListener) this);exit.addKeyListener(this);selectBox.addItemListener( //监听复选框点击事件new ItemListener(){public void itemStateChanged(ItemEvent e){if(e.getStateChange()==e.SELECTED){step=0;back_stack.clear(); //每次重新选关后都要清空路径栈level=selectBox.getSelectedIndex()+1; //获取所选的关卡map_level=new map(level); //重新获取对应关卡的地图getmap(map);current_level="第"+level+"关"; //右上角提示所处关卡文本的更新repaint(); //重画地图requestFocus(); //重新获取焦点(因为按钮事件后键盘事件不起作用)}}});for(int k=0;k<10;k++){image[k]=new ImageIcon("picture/"+k+".png"); //获取图片}picture=new Image[]{image[0].getImage(),image[1].getImage(),image[2].getImage(),image[3].getImage(),image[4].getImage(),image[5].getImage(),image[6].getImage(),image[7].getImage(),image[8].getImage(),image[9].getImage()};this.setFocusable(true);this.addKeyListener((KeyListener)this);setSize(640,640);setVisible(true);}//判断是否通关(方法是,检查地图中是否还有箱子编号4)public Boolean pass(){int p=0;for(int i=0;i<15;i++)for(int j=0;j<15;j++){if(map[i][j]==4) p++;}if(p==0) return true;else return false;}//获取地图上每个位置所对应的图片编号public void getmap(int[][] map){for(int i=0;i<15;i++)for(int j=0;j<15;j++)map[i][j]=map_level.map[i][j];manX=map_level.manX;manY=map_level.manY;}public void paint(Graphics g){super.paint(g);//提示信息back_stack.push(Down + 5); //这里是一个细节,先将“DOWN”存入栈g.drawString(current_level,500,90);g.drawString("第"+step+"步",400,90);g.drawString("用键盘上的R重新开始,Q退出游戏",200,565);g.drawString("用键盘pageup,pagedown切换关卡",200,580);g.drawString("用键盘上的上下左右键控制人的移动",200,600);g.drawString("用键盘上的Backspace键后退",200,620);//在面板上画地图for (int i = 0; i < 15; i++)for (int j = 0; j < 15; j++)g.drawImage(picture[map[i][j]],100+30*j,100+30*i, this);}public void Step(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step++;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void move(int dir, Graphics g){int man = dir + 5;int dx = dir_x[dir];int dy = dir_y[dir];int x = manX;int y = manY;manX += dx;manY += dy;int origin_picture = map[manX][manY];int next_picture = map[manX + dx][manY + dy];if((map[manX][manY]==4||map[manX][manY]==3)&&(map[manX+dx][manY+dy]==2||map[ manX+dx][manY+dy]==4||map[manX+dx][manY+dy]==3)) //上面是箱子,箱子上面是墙或箱子{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==2) //上面是墙{manX -= dx;manY -= dy;return ;}if(map[manX][manY]==1||map[manX][manY]==9){ //人上面是草地或是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==1){//上面是箱子,箱子上面是草地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else{ //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[4],100+30*(manY+dy),(manX+dx)*30+100,this); //草地位置变箱子map[manX+dx][manY+dy]=4;Step(g);}if((map[manX][manY]==4||map[manX][manY]==3)&&map[manX+dx][manY+dy]==9){ //上面是箱子,箱子上面是目的地g.drawImage(picture[man],100+30*manY,manX*30+100,this); //人的朝向变化if(map[manX][manY]==3) //若是移动一大目的地的箱子,原箱子位置值为9map[manX][manY]=9;else map[manX][manY]=0;if(map[x][y]==9) //原来位置是目的地g.drawImage(picture[9],100+30*y,100+30*x,this);else { //原来位置是草地g.drawImage(picture[1],100+30*y,x*30+100,this);map[x][y]=1;}g.drawImage(picture[3],100+30*(manY+dy),(manX+dx)*30+100,this); //目的地位置变箱子map[manX+dx][manY+dy]=3;Step(g);}back_stack.push(next_picture);back_stack.push(origin_picture);back_stack.push(manY);back_stack.push(manX);back_stack.push(man);if(pass())JOptionPane.showMessageDialog(null, "恭喜你过关了!"); }//键盘事件public void keyPressed(KeyEvent e) {Graphics g=getGraphics();int dir ;switch(e.getKeyCode()){case KeyEvent.VK_UP:dir = Up;move(dir, g);break;case KeyEvent.VK_DOWN :dir = Down;move(dir, g);break;case KeyEvent.VK_LEFT:dir = Left;move(dir, g);break;case KeyEvent.VK_RIGHT:dir = Right;move(dir, g);break;case KeyEvent.VK_BACK_SPACE:back.doClick();break;case KeyEvent.VK_PAGE_DOWN :next.doClick();break;case KeyEvent.VK_PAGE_UP:previous.doClick();break;case KeyEvent.VK_R:restart.doClick();break;case KeyEvent.VK_Q :exit.doClick();break;}}public void keyReleased(KeyEvent e) {}public void keyTyped(KeyEvent e) {}//悔步后退public void step_back(Graphics g){g.setColor(Color.cyan);g.drawString("第"+step+"步",400,90);step--;g.setColor(Color.BLACK);g.drawString("第"+step+"步",400,90);}public void Back(){if(back_stack.size()==2)return;int dir=back_stack.pop() - 5; //获取上一步的方向int s = back_stack.pop();int t = back_stack.pop();int origin_picture = back_stack.pop();int netx_picture = back_stack.pop();int pre_dir = back_stElement();Graphics g=getGraphics();int dx = dir_x[dir];int dy = dir_y[dir];g.drawImage(picture[origin_picture],100+30*t,100+30*s,this);g.drawImage(picture[netx_picture],100+30*(t+dy),100+30*(s+dx),this);g.drawImage(picture[pre_dir],100+30*(t-dy),100+30*(s-dx),this);manX = s - dx;manY = t - dy;map[s][t] = origin_picture;map[s+dx][t+dy] = netx_picture;map[s-dx][t-dy] = pre_dir;step_back(g);}//按钮事件监听public void actionPerformed(ActionEvent e) {if(e.getSource()==restart){ //重新开始back_stack.clear(); //清空路径栈step=0;getmap(map);repaint();}else if(e.getSource()==exit) //退出游戏this.setVisible(false);else if(e.getSource()==next){ //下一关back_stack.clear();step=0;level++;if(level!=14){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==previous){ //上一关back_stack.clear();step=0;level--;if(level!=0){map_level=new map(level);getmap(map);current_level="第"+level+"关";repaint();}}else if(e.getSource()==back)Back();requestFocus();}}3、开始界面package box;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Game extends JFrame implements ActionListener{ Image image[];ImageIcon icon;JButton start,tip,exit;Container c;public Game(){super("推箱子");c=getContentPane();FlowLayout layout=new FlowLayout();c.setLayout(layout);layout.setAlignment(FlowLayout.CENTER);icon=new ImageIcon("picture/game.png");image=new Image[]{icon.getImage()};start=new JButton("开始游戏");exit=new JButton("退出游戏");tip=new JButton("游戏说明");c.add(start);c.add(tip);c.add(exit);start.addActionListener(this);tip.addActionListener(this);exit.addActionListener(this);setSize(640,480);setVisible(true);}public void paint(Graphics g){super.paint(g);g.drawImage(image[0],10,65,this);}public static void main(String args[]){Game g=new Game();g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==exit)this.setVisible(false);if(e.getSource()==start){this.setVisible(false);pushbox c=new pushbox();}if(e.getSource()==tip){String t="本游戏分为13关,难度逐关递增,可以自己选关";JOptionPane.showMessageDialog(null, t);}}}。
java推箱子游戏的课程设计

java推箱子游戏的课程设计一、课程目标知识目标:1. 掌握Java基础语法,包括数据类型、运算符、控制结构等;2. 学会使用Java面向对象编程,包括类的定义、对象的创建、封装、继承和多态;3. 了解二维数组的使用,能通过数组实现游戏地图的表示;4. 掌握推箱子游戏的逻辑设计和实现。
技能目标:1. 培养学生的编程思维和逻辑思维能力;2. 提高学生解决实际问题的能力,学会分析问题、设计解决方案;3. 学会使用Java编写简单的图形用户界面程序,实现游戏交互;4. 学会运用调试工具进行程序调试,找出并修复程序中的错误。
情感态度价值观目标:1. 激发学生对编程的兴趣,培养学习计算机科学的热情;2. 培养学生的团队协作精神,学会与他人共同解决问题;3. 培养学生的创新意识和实践能力,鼓励学生尝试不同的解决方案;4. 培养学生面对困难时坚持不懈、勇于挑战的精神。
本课程针对高年级学生,结合学科特点和教学要求,旨在通过推箱子游戏的开发,帮助学生巩固Java编程知识,提高编程技能,培养良好的编程习惯和团队协作能力。
课程目标具体、可衡量,为教学设计和评估提供了明确的指导。
1. Java基础语法复习:数据类型、变量、运算符、控制结构(条件语句、循环语句);2. 面向对象编程:类的定义、构造方法、成员变量、成员方法、封装、继承、多态;3. 二维数组:数组的概念、声明、初始化、遍历、应用场景;4. 图形用户界面(GUI):Swing库简介、窗口、面板、按钮、事件处理;5. 游戏逻辑设计:游戏规则、地图表示、角色移动、箱子推动、胜利条件;6. 程序调试与优化:调试工具使用、常见错误分析、性能优化;7. 项目实践:分组进行推箱子游戏的开发,包括需求分析、设计、编码、测试和调试。
教学内容依据课程目标进行选择和组织,保证科学性和系统性。
教学大纲明确以下安排和进度:- 第一章:Java基础语法复习(1课时)- 第二章:面向对象编程(2课时)- 第三章:二维数组(1课时)- 第四章:图形用户界面(GUI)(2课时)- 第五章:游戏逻辑设计(2课时)- 第六章:程序调试与优化(1课时)- 第七章:项目实践(4课时)教学内容与课本紧密关联,确保学生能够将所学知识应用于实际项目中,提高编程实践能力。
推箱子项目实训报告

一、项目背景推箱子游戏是一款经典的益智游戏,起源于日本。
玩家需要在狭小的仓库中,通过移动人物,将箱子推到指定的位置。
这款游戏不仅考验玩家的逻辑思维和空间想象力,还锻炼玩家的耐心和策略。
为了提高自身的编程能力,我们选择推箱子游戏作为实训项目。
二、实训目的1. 学习和掌握Java编程语言的基本语法和常用库;2. 熟悉图形用户界面(GUI)编程;3. 提高逻辑思维和编程能力;4. 实现一个具有良好用户体验的推箱子游戏。
三、项目设计1. 系统架构推箱子游戏采用MVC(模型-视图-控制器)架构,将游戏逻辑、界面展示和用户交互分离,提高代码的可读性和可维护性。
2. 关卡设计游戏共包含10个关卡,每个关卡都有不同的地图和目标。
关卡难度逐渐增加,以满足不同玩家的需求。
3. 游戏功能(1)基本功能1)地图展示:游戏开始时,展示当前关卡的地图,包括人物、箱子、目的地和墙壁;2)人物移动:玩家可以通过键盘或鼠标控制人物上下左右移动;3)箱子移动:当人物站在箱子旁边时,按空格键将箱子推到目标位置;4)胜利判断:所有箱子都推到目标位置,游戏胜利;5)失败判断:人物无法移动或通道被堵住,游戏失败。
(2)扩展功能1)悔棋功能:玩家可以撤销上一步操作,回到之前的状态;2)重置关卡:玩家可以重新开始当前关卡;3)关卡选择:玩家可以选择不同的关卡进行游戏;4)音乐和音效:游戏过程中,播放背景音乐和音效,增强游戏氛围。
四、关键技术1. Java编程语言:使用Java编程语言实现游戏逻辑、界面展示和用户交互;2. Swing库:使用Swing库实现图形用户界面;3. 图像处理:使用ImageIO类加载和显示游戏地图、人物、箱子等图片;4. 事件监听:使用ActionListener、KeyListener等监听器处理用户操作。
五、项目实现1. 创建项目:使用Eclipse创建Java项目,导入Swing库和ImageIO类;2. 设计界面:创建JFrame作为主窗口,添加JPanel作为游戏区域,添加JButton作为按钮控件;3. 游戏逻辑:定义游戏地图、人物、箱子等数据结构,实现人物移动、箱子移动、胜利判断和失败判断等功能;4. 图像处理:加载游戏地图、人物、箱子等图片,使用ImageIO类进行显示;5. 事件监听:为按钮控件添加ActionListener和KeyListener,处理用户操作。
推箱子java课程设计

采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换,悔一步操作让玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始。
4. 设计结果与分析4.1 程序运行结果程序编译无错误,单击运行按钮,运行通过,开始时弹出该游戏的页面,然后开始游戏。
一般的会显示出第一关的游戏,玩家可以根据自己的实际水平去操作,而后选择适于自己水平的关卡来玩。
一开始运行程序,显示该页面时,会在页面的正中央显示出该关为第一关,以提醒玩家。
第一关如下图3所示。
图3. 推箱子游戏第一关界面当玩家想选关时,可以根据自己的意愿去选关闯。
选第50关,如下图4所示。
图4. 推箱子游戏第50关页面4.2 尚需解决的问题游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模块,导入玩家自己喜欢的音乐。
在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。
对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。
5. 设计体会通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知。
java语言课程设计推箱子

java语言课程设计推箱子一、教学目标本章节的教学目标旨在让学生掌握Java语言基础,学会使用Java编写简单的推箱子游戏。
具体包括以下三个方面的目标:1.知识目标:使学生了解Java语言的基本语法、数据结构、控制流程和面向对象编程思想。
2.技能目标:培养学生具备使用Java语言编写程序的能力,能够独立完成推箱子游戏的设计与实现。
3.情感态度价值观目标:培养学生对编程的兴趣,提高学生解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容本章节的教学内容主要包括以下几个部分:1.Java语言基本语法:变量、数据类型、运算符、控制流程(循环、分支)。
2.数据结构:数组、链表、栈和队列。
3.面向对象编程:类和对象、封装、继承、多态。
4.推箱子游戏设计与实现:游戏规则、地图表示、角色控制、碰撞检测、算法。
三、教学方法为了达到本章节的教学目标,我们将采用以下几种教学方法:1.讲授法:讲解Java语言的基本语法、数据结构和面向对象编程思想。
2.案例分析法:分析推箱子游戏的实现案例,让学生了解游戏设计的思路和方法。
3.实验法:让学生动手编写推箱子游戏代码,提高学生的实际操作能力。
4.讨论法:分组讨论游戏设计中遇到的问题,培养学生的团队合作和解决问题的能力。
四、教学资源为了支持本章节的教学,我们将准备以下教学资源:1.教材:《Java语言程序设计》。
2.参考书:《Java核心技术》、《游戏编程模式》。
3.多媒体资料:PPT课件、推箱子游戏教学视频。
4.实验设备:计算机、网络环境。
5.在线编程平台:LeetCode、牛客网等,供学生练习和提交作业。
五、教学评估本章节的教学评估将采用多元化的评价方式,全面客观地评估学生的学习成果。
评估方式包括:1.平时表现:考察学生在课堂上的参与程度、提问回答、小组讨论等,占总评的20%。
2.作业:布置与推箱子游戏相关的编程作业,检查学生的编程能力和理解程度,占总评的30%。
Java课程设计推箱子游戏

图3 游戏主界面
图4 游戏成功界面
(2)打开推箱子游戏,点击“选项“按钮,选中选关,输入你想要玩的关数,例如第
3关,点击确定,游戏界面如图4所示:
图5开始选关界面
图6选关成功界面
(3)游戏的帮助功能也很强大,点击帮助按钮,选中“使用说明”,或是“关于”。
游戏界面如图6和图7所示:
图7使用说明界面
4.设计体会
为期两周的课程设计很快就结束了,回顾这两周,累并快乐着。
从老师开始给布置课程设计的题目、内容及要求到自己广泛借助互联网查阅资料并独立完成Java推箱子小应用程序;从两周前刚接到任务时的茫然与无助到两周后的清晰与明了;从对Java 的编辑器EditPlus和eclipse初步了解到熟练运用,历经了太多的困难。
对于环境变量的配置,我做到了知其然,知其所以然,对EditPlus的了解也完全上升了一个层次,从课堂上老师教给的在dos 界面中输入Javac 文件名.java编译、Java 文件名运行到在EditPlus中选中“工具”、“配置用户组“,设置编译和执行相关参数,按快捷键Ctrl+1编译、Ctrl+2运行,节省了大量时间,使编程效率有了很大的提高。
对于推箱子游戏,更是有了进一步的了解,其中用到了9张图片,用户可以通过改变图片来改变游戏的显示界面,当然,这个是不被允许的,因为每个程序的代码都有版权,但对于设计者而言,却可以更加清楚的了解代码的内部构造,达到熟能生巧的效果。
基于java的推箱子游戏解析

基于JAVA的推箱子游戏前言在这个充满竞争的社会里,随着生活节奏的不断加快,人们的生活水平越来越繁忙,因此,越来越多人感到无比的烦躁与巨大的压力,这些压力也带给人们诸多烦恼。
所以如何解除现代人的生活压力,释放心中苦闷已经成为现代人的共同心愿。
而本次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于EditPlus编译器,为大家开发了一款适合的、休闲娱乐的游戏,在娱乐的同时也给忙碌的上班族们开拓了另一个思考问题的空间。
基于JAVA的推箱子小游戏主要分为初始化模块,画图模块,移动小人模块,移动箱子模块以及功能控制模块。
玩家是通过控制小人的移动来推动箱子,需要避过障碍物与死角才能将其推放到指定位置从而达到过关的目的。
每关的难易程度各异,不仅适合人们休闲娱乐,还有助于开发智力,提高人们思考问题能力与想象能力,改善思考方式,拓展思维。
关键词:JAVA;解压;推箱子;休闲娱乐AbstractIn this competitive society, along with the accelerating pace of life, people's living standard more and busier, therefore, more and more people feel very upset and enormous pressure, the pressure also gives people a lot of trouble. So how to relieve the pressure of modern life, release the pain has become the common aspiration of the people. But this time based on the JAVA Push Box Game is the use of JAVA language and the combination of EditPlus compiler; we developed a suitable, recreational game, in the entertainment but also for busy office workers to develop another thinking space.Based on the JAVA Push Box Game consists of initialization module, drawing module, mobile SIM module, mobile box module and control module. Game player is controlled through a small mobile drive box, need to avoid obstacles and dead angle can be pushed into the specified location so as to achieve the purpose of clearance. Each level of difficulty degree is different, not only for recreation, also contribute to the development of intelligence, improve people's thinking ability and imagination ability, improve the way of thinking, the development of thinking.Key Words:JAVA; Relieve pressure; Push box; Recreation and entertainment目录前言 (I)Abstract (II)1.可行性研究 (2)1.1设计目的 (2)1.2可行性研究前提 (2)1.3可行性分析 (2)1.4结论意见 (3)2.需求分析 (3)2.1引言 (3)2.2游戏需求 (3)2.3软硬件需求 (4)硬件环境需求: (4)软件环境: (4)2.4接口控制 (4)2.5方案论证 (4)2.5.1.C++语言的优点 (4)2.5.2.Java语言的优点 (5)2.5.3.方案选择 (6)3.概要设计 (7)3.1游戏设计分析 (7)3.3.1.地图文件的引用 (7)3.3.2.程序运逻辑 (7)3.3.3.绘图 (7)3.3.4.显示平台 (7)3.2 注意事项 (8)3.3 游戏流程图 (8)4.详细设计 (9)4.1游戏总体结构与代码 (9)结论 (21)参考文献 (22)致谢 (23)引言在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机工程学院
课程设计报告
设计名称:面向对象课程设计
选题名称:推箱子的设计与实现
系(院):计算机工程学院
设计时间:2014.3.10~2014.4.12
设计地点:软件实验室、教室
(3)功能模块
本程序包括四个功能模块:class mainFrame,class mainpanel,class Sound,class Readmap,
既主面板类,绘图的面板,播放背景音乐,用输入流读取地图文件。
class mainpanel 主要是实现地图的初始化以及每一关地图的重载,class Sound主要是播放背景音乐。
Adpressed的功能是响应工人和箱子的移动以及工人、箱子、墙之间的碰撞检测。
表1 成员变量表
成员变量变量类型名称
开始状态Boolean Start
窗口高度int fHeight
窗口宽度int fWidth
计时器Timer timer
延时int delay
开始时间Date starttime
步数int steps
地图容器MapPanel mapPanel
玩法介绍String instruction
开始状态Boolean Start
表2方法表
方法名功能备注
Puzzle() 创建游戏窗口和设置图标
backaction() 后台操作getmap() 返回地图的方法
StartGame() 开始游戏控制,更新开始菜单
endgame() 结束游戏控制弹出结束窗口
getmap()/ 返回地图的方法调用类spite()
menuShowClik() 在游戏中显示完整图片调用类class ShowImage
actionPerformed() 动作演示
menuExit() 退出游戏
flush() 清空缓存
游戏过程设计
游戏中过程中,最为主要地方在于对地图矩阵,以及主角状态信息(包括位置、行走状态等)的维护,主角每行走一步,就更新一次地图信息和主角状态信息。
另外一个比较重要的地方是游戏状态的保存方面。
在该游戏中,使用栈结构保存主角每次行走的
图3 游戏主界面
图4 游戏成功界面
图5 选关界面图6 选关成功界面
图7 悔一步界面
如若要更改背景音乐,则点击右下角的下拉箭头,则出现可供挑选的背景音乐,点击选中即可:。