推箱子java课程设计
用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);}}}。
推箱子游戏设计与实现

四川师范大学成都学院本科毕业设计推箱子游戏设计与实现学生姓名___________ 张起明__________学号_______________________________所在系___________ 通信工程系________专业名称__________ 通信工程_________班级2012级宽带一班指导教师____________________________四川师范大学成都学院二O—六年五月推箱子游戏的设计与实现刖吕于如今竞争激烈的快节奏时代中,人们的生活水平越来越繁忙,因为此,愈来愈多的人感到内心的空虚与压力带来的烦躁,这些也带给人们许许多多心理上和身体上的困惑。
所以如何缓解当代人们的生活压力,已成为人们的共同夙愿。
这一次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于ECIiPSeS 编译器,开发出了这样一款适合用于休闲的小游戏,在放松的同时也给忙碌的人们打开另一个思考的空间。
这一款基于JAVA开发的推箱子主要分为初始化、画图、移动小人、移动箱子以及功能控制共五个模块。
玩家可以通过控制游戏中的小人的移动来实现推动箱子,同时需要避开障碍物和死角方能将箱子推放到正确位置从而过关。
每关的难易程度各不相同,不仅可以供人们用以娱乐,还有助于开发智力,提高人们思考问题与想象的能力,改善人们的思维方式,拓展思维。
关键词:JAVA解压推箱子游戏AbStractIn today,s COmPetitiVe era Of fast-paced, PeOPIe ,s IiVing IeVeI is becoming more and InOre busy, because Of this, an increasing number Of PeOPle have felt irritability Of emptiness and PreSSUre, these also bring PeOPle many PSyChOIOgiCal and PhySiCal PUZZleS・ SO how to alleviate the PreSSUre Of COntemPOrary life, has become the COmmOn aspiration Of the PeOPle・ ThiS time the based On JaVa SOkOban game is USing the JaVa IangUage and the COmbinatiOn Of the eclipses Of the COmPiIer developed SUCh a SUitabIe for IeiSUre game, in a relaxed but also to the busy PeOPIe to OPen another thinking SPaCe. ThiS is based On the JAVA development Of the PUSh box is divided into initialization, drawing, InOVing people, moving boxes and a total Of five functional COntrOl module. PlayerS Can COntrOl the game through the Vinain,s mobile to achieve the PrOmOtiOn Of the box, WhiIe the need to avoid ObStaCIeS and dead Side to PUSh the box to the COrreCt POSitiOn SO that. EaCh IeVel Of CiiffiCUlty is different, not OnIy Can be USed for PeOPle to entertain, but also helps to develop intelligence, improve PeOPle,s ability to think about PrObIemS and imagination, improve PeOPleS Way Of thinking, expand thinking.Key WOrdS : JAVA RelieVe PreSSUre PUSh box Game1.可行性研究设计目的灵活运用自己在学校学习期间所学到的理论知识和实际动手技能,并结合自己于课外查找到的资料,该推箱子游戏设计并开发基于JAVA I使自己能够熟悉和熟练应用开发过程及相关技能,培养独立思考能力,测试学习结果.实践和提高编程能力,并为今后的工作打下坚实基础的实际能力。
JAVA 推箱子

基于JAVA的面向对象课程设计--------推箱子小游戏设计第一章绪论1.1JAVA语言的发展史1995年,美国Sun Microsystems公司正式向IT业界推出了java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,当时以web 为主要形式的互联网正在迅猛发展,java语言的出现迅速引起所有程序员和软件公司的极大关注,程序员们纷纷尝试用java语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。
包括IBM、Oracle、微软、Netscape、Apple、SGI等大公司纷纷与Sun Microsystems公司签订合同,授权使用java 平台技术。
微软公司总裁比尔盖茨先生在经过研究后认为"java语言是长时间以来最卓越的程序设计语言"。
目前,java语言已经成为最流行的网络编程语言,截止到2001年中,全世界大约有310万java程序员,许多大学纷纷开设java 课程,java正逐步成为世界上程序员最多的编程语言。
在经历了以大型机为代表的集中计算模式和以PC机为代表的分散计算模式之后,互联网的出现使得计算模式进入了网络计算时代。
网络计算模式的一个特点是计算机是异构的,即计算机的类型和操作系统是不一样的,例如SUN工作站的硬件是SPARC体系,软件是UNIX中的Solaris操作系统,而PC机的硬件是INTEL体系,操作系统是windows或者是Linux,因此相应的编程语言基本上只是适用于单机系统,例如COBOL、FORTRAN、C、C++等等;网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移,这就迫切需要一种跨平台的编程语言,使得用它编写的程序能够在网络中的各种计算机上能够正常运行,java就是在这种需求下应运而生的。
正是因为java语言符合了互联网时代的发展要求,才使它获得了巨大的成功。
大家想一想,在PC下用windows编写的程序能够不做修改就直接拿到UNIX 系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。
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课时)教学内容与课本紧密关联,确保学生能够将所学知识应用于实际项目中,提高编程实践能力。
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的推箱子游戏解析

基于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)引言在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。
推箱子--java课程设计

推箱子--java课程设计一、课程目标知识目标:1. 理解并掌握Java基本语法结构,包括变量声明、数据类型、运算符和流程控制语句;2. 学会使用二维数组表示游戏地图,掌握数组的基本操作;3. 掌握面向对象编程的基本概念,包括类与对象、方法定义与调用;4. 理解“推箱子”游戏的逻辑规则,并能用Java语言实现。
技能目标:1. 能够独立设计并编写简单的“推箱子”游戏程序,实现游戏的基本功能;2. 培养学生运用计算机编程解决问题的能力,提高逻辑思维和算法设计能力;3. 学会使用调试工具,能对程序进行调试和优化,提高程序的可读性和效率。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习计算机科学的热情;2. 培养学生良好的编程习惯,注重团队协作,学会分享与交流;3. 培养学生面对挑战的积极态度,敢于尝试,勇于克服困难。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握Java编程基础知识的基础上,通过设计“推箱子”游戏,提高编程实践能力,培养创新思维和团队协作精神。
课程目标具体、可衡量,便于后续教学设计和评估。
二、教学内容1. Java基本语法- 变量声明与数据类型- 运算符与表达式- 流程控制语句(条件语句、循环语句)2. 二维数组与数组操作- 二维数组的定义与初始化- 数组的基本操作(遍历、赋值、查找)3. 面向对象编程基础- 类与对象- 方法定义与调用- 封装、继承、多态4. “推箱子”游戏逻辑设计- 游戏规则与需求分析- 地图表示与用户交互- 算法设计与实现5. 编程实践- 设计“推箱子”游戏界面- 编写游戏逻辑代码- 调试与优化程序6. 教学进度安排- 第1-2课时:复习Java基本语法- 第3-4课时:学习二维数组与数组操作- 第5-6课时:面向对象编程基础- 第7-8课时:“推箱子”游戏逻辑设计- 第9-10课时:编程实践与调试优化教学内容依据课程目标,结合课本章节,确保科学性和系统性。
java推箱子课程设计

不足与改进方向
课程设计存在一定的难度,需 要进一步简化和优化
课程内容需要更加丰富,增加 更多的实践案例和项目
课程评价体系需要进一步完善, 增加更多的评价维度和指标
课程需要更加注重培养学生的 创新能力和实践能力,增加更 多的创新实践环节
对未来发展的展望
技术发展趋势:Java推箱子游戏将继续发展,可能会出现更多新的玩法和功能。
教育应用:Java推箱子游戏可以作为一种教学工具,帮助学生更好地理解和掌握Java编程知 识。
创新与挑战:未来可能会出现更多类似的游戏,需要不断创新和挑战,以保持竞争力。
社区建设:可以建立一个Java推箱子游戏的社区,让玩家和开发者共同交流和分享经验。
THANKS
汇报人:
线程:程序的执行单元,可以同时执行多个任务 线程同步:确保多个线程对共享资源的访问不会产生冲突 线程通信:线程之间传递信息,如使用wait()、notify()等方法 线程调度:操作系统决定哪个线程执行,如使用优先级、时间片等策略
Java数据结构与算法的应用
数组:用于存储游戏地图 和箱子的位置
链表:用于实现箱子的移 动和碰撞检测
箱子角色:控制箱 子的移动和操作
障碍物角色:控制 障碍物的移动和操 作
游戏界面:控制游 戏界面的显示和操 作
箱子移动逻辑
箱子移动规则:只能向四个方向移 动,不能穿过墙壁或障碍物
箱子移动方式:通过键盘或鼠标控 制,按下相应的方向键或点击相应 的方向按钮
添加标题
添加标题
添加标题
添加标题
箱子移动条件:箱子周围有空间, 且没有其他箱子或障碍物阻挡
游戏状态管理
游戏状态:开始、进行、结束、暂停等 状态转换:根据玩家操作和游戏条件进行状态转换 状态存储:保存游戏进度和玩家信息 状态恢复:根据存储的状态信息恢复游戏进度和玩家信息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换,悔一步操作让玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始。
4. 设计结果与分析
4.1 程序运行结果
程序编译无错误,单击运行按钮,运行通过,开始时弹出该游戏的页面,然后开始游戏。
一般的会显示出第一关的游戏,玩家可以根据自己的实际水平去操作,而后选择适于自己水平的关卡来玩。
一开始运行程序,显示该页面时,会在页面的正中央显示出该关为第一关,以提醒玩家。
第一关如下图3所示。
图3. 推箱子游戏第一关界面
当玩家想选关时,可以根据自己的意愿去选关闯。
选第50关,如下图4所示。
图4. 推箱子游戏第50关页面
4.2 尚需解决的问题
游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模块,导入玩家自己喜欢的音乐。
在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。
对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。
5. 设计体会
通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知。