当前位置:文档之家› java推箱子游戏源代码(含推箱子的判断)

java推箱子游戏源代码(含推箱子的判断)

java推箱子游戏源代码(含推箱子的判断)
java推箱子游戏源代码(含推箱子的判断)

第一个Java文件:

package xiaoA;

import java.awt.Color;

import java.awt.HeadlessException;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class GameFrame extends JFrame {

JPanel zhuobu = new JPanel();

//工人

JLabel worker = null;

//箱子

JLabel box = null;

//目的地

JLabel goal = null;

JLabel[] walls = null;

public static final int SPEED = 12;

//设置图片大小

int imgSize = 48;

public void setImgSize(int imgSize){

this.imgSize = imgSize;

}

public GameFrame(String title) throws HeadlessException { super(title);

//构造方法中调用本类的其它方法

this.initContentPane();

this.addKeyListener(new KeyListener() {

//键盘按下事件

public void keyPressed(KeyEvent e) {

//[2.5] 使工人可以移动

int xSpeed = 0, ySpeed = 0;

switch (e.getKeyCode()) {

case KeyEvent.VK_LEFT :

xSpeed = -SPEED;

worker.setIcon(new ImageIcon("image/workerUp.gif"));

break;

case KeyEvent.VK_RIGHT :

xSpeed = SPEED;

worker.setIcon(new ImageIcon("image/workerUp.gif"));

break;

case KeyEvent.VK_UP :

ySpeed = -SPEED;

worker.setIcon(new ImageIcon("image/workerUp.gif"));

break;

case KeyEvent.VK_DOWN :

ySpeed = SPEED;

worker.setIcon(new ImageIcon("image/workerUp.gif"));

break;

default:

return;

}

worker.setBounds(worker.getX() + xSpeed, worker.getY() + ySpeed, worker.getWidth(), worker.getHeight());

//[2.7] 判断工人是否撞到墙壁

for (int i = 0; i < walls.length; i++) {

if(worker.getBounds().intersects(walls[i].getBounds())) {

worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());

}

}

//[3.2] 使工人可以推动箱子

if (worker.getBounds().intersects(box.getBounds())) {

box.setBounds(box.getX() + xSpeed, box.getY() + ySpeed, box.getWidth(), box.getHeight());

//[3.3] 判断箱子是否撞到墙壁

for (int i = 0; i < walls.length; i++) {

if (box.getBounds().intersects(walls[i].getBounds())) {

worker.setBounds(worker.getX() - xSpeed, worker.getY() - ySpeed, worker.getWidth(), worker.getHeight());

box.setBounds(box.getX() - xSpeed, box.getY() - ySpeed, box.getWidth(), box.getHeight());

}

}

//[3.4] 判断是否胜利

if (box.getX()==goal.getX() && box.getY()==goal.getY()) { JOptionPane.showMessageDialog(null, "您赢啦!");

}

}

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}});

}

/**

*设置内容面板

*/

public void initContentPane() {

zhuobu.setBackground(Color.red);

zhuobu.setLayout(null);

//调用父类的属性和方法

super.setContentPane(zhuobu);

}

/**

*把某个图片以组件的方式加入窗体

*@param imgPath图片路径

*@param x x

*@param y y

*@param width宽度

*@param height高度

*@return添加完的组件

*/

public void addComponent(int tag, String imgPath, int x, int y) { ImageIcon img = new ImageIcon(imgPath);

//创建JLabel并把ImageIcon通过构造方法传参传入

//把食物放到盘子里

JLabel componet = new JLabel(img);

//设置盘子在桌布上的位置和大小

componet.setBounds(x, y, imgSize, imgSize);

//把盘子放到桌布上

zhuobu.add(componet);

switch (tag) {

case 1:

box = componet;

break;

case 2:

goal = componet;

break;

case 3:

worker = componet;

break;

}

}

public void addWall(String imgPath, int[][] loactions) { ImageIcon wallImg = new ImageIcon(imgPath);

walls = new JLabel[66 + loactions.length];

for (int i = 0; i < walls.length; i++) {

//创建没每一个围墙,他们使用的是同一个图片

walls[i] = new JLabel(wallImg);

}

for (int i = 0; i < walls.length; i++) {

//创建没每一个围墙,他们使用的是同一个图片

walls[i] = new JLabel(wallImg);

}

int index = 0;

/*分别设置各个图片位置*/

for (int i = 0; i < 14; i++) {

//左边墙

walls[index].setBounds(0, i * imgSize, imgSize, imgSize);

zhuobu.add(walls[index]);

index++;

//右边墙

walls[index].setBounds(20 * imgSize, i * imgSize, imgSize, imgSize);

zhuobu.add(walls[index]);

index++;

}

for (int i = 0; i < 19; i++) {

//上边墙

walls[index].setBounds((i + 1) * imgSize, 0, imgSize, imgSize);

zhuobu.add(walls[index]);

index++;

//下边墙

walls[index].setBounds((i + 1) * imgSize, 13 * imgSize, imgSize, imgSize);

zhuobu.add(walls[index]);

index++;

}

//添加中间障碍耦合解耦

for (int i = 0; i < loactions.length; i++) {

walls[index].setBounds(loactions[i][0]* imgSize, loactions[i][1]* imgSize, imgSize, imgSize);

zhuobu.add(walls[index]);

index++;

}

}

}

第二个Java文件:

public class Run {

public static void main(String[] args) {

GameFrame gameFrame = new GameFrame("推箱子游戏…");

//设置大小

gameFrame.setBounds(100, 50, 21 * 48 + 5, 14 * 48 + 25);

//窗体大小不可变

gameFrame.setResizable(false);

gameFrame.setImgSize(48);

gameFrame.addComponent(3, "workerUp.png", 400, 100);

gameFrame.addComponent(1, "box.png", 160, 60);

gameFrame.addComponent(2, "goal.png", 80, 520);

int[][] wallLocations ={

{4, 5},{5, 5},{6, 5},{7, 5},

{8, 5},{9, 5},{10, 5},{6, 8},

{7, 8},

{8, 8},

{9, 8},

{10, 8},

{11, 5}

};

gameFrame.addWall("wall.png", wallLocations);

gameFrame.setVisible(true);

}

}

推箱子游戏报告书

推箱子游戏设计报告书 一、项目背景 本实训要求对“推箱子游戏”进行分析、设计。 本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。同时,本实训中了解图形界面设计基本技术。 通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。 二、设计目的 本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用VB 开发应用程序的基本方法及基本技巧。 三、游戏介绍 本游戏设计了关卡设计器对有难度进行设计,同时用方向键↑↓←→控制小人的移动,空格重新开始,回车选择下一关,page up 上一关,page down 下一关,Esc 退回。小人移动来推箱子使箱子到达指定位置,如果箱子全部到达指定位置就表示过关 3.1界面设计 3.1.1界面设计原则: 1用户帮助 2向导 3快捷键 4鼠标与键盘对应 5布局合理化 6显示信息一致性 7界面一致性 8美观与协调性 9合理性 10规范性 11易用性 12一般交互 13数据输入 本游戏是一个简单游戏所以只涉及一些简单的界面设计原则.

3.2用户界面 又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件。 GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面。 本系统坚持图形用户界面(GUI)设计原则,界面直观、对用户透明。用户接触软件后对界面上对应的功能一目了然、不需要多少培训就可以方便地使用本应用系统。

推箱子java代码

import java.util.*; import java.io.*; public class Main{ int r;//地图行数 int c;//地图列数 int begx, begy;//箱子开始坐标 int endx, endy;//目标坐标 int begsx, begsy;//人开始坐标 char map[][];//地图 int[] dx ={-1, 1, 0, 0};//人和箱子都有四个方向可移动 int[] dy ={0, 0, 1, -1}; char[] P ={'N', 'S', 'E', 'W'};//表示箱子向某个方向移动 char[] M ={'n', 's', 'e', 'w'};//表示人向某个方向移动 Node f=new Node(0,0,0,0,""); Node g=new Node(0,0,0,0,""); node1 F=new node1(0,0,""); node1 G=new node1(0,0,""); int mark[][];//标志数组,表示地图上某一位置mark[i][j]是否访问过。 public Main(char[][] map,int r,int c,int begx,int begy,int endx,int endy,int begsx,int begsy){ this.map=map; this.r=r; this.c=c; this.begx=begx; this.begy=begy; this.endx=endx; this.endy=endy; this.begsx=begsx; this.begsy=begsy; mark=new int[r][c]; } public boolean ok(int x,int y) { if (x >= 0 && x < r && y >= 0 && y < c) return true; return false; } public boolean SToB(int bx,int by,int ex, int ey) {//人到箱子BFS int[][] Mark1= new int[r][c]; //标志数组,表示地图上某一位置Mark1[i][j]是否访问过。 Queue P = new LinkedList();

推箱子游戏攻略

第一关: 直接将箱子推向钱币处就完成任务,此关是给大家一个基础练习,知道先点击一下箱子,然后再点击一下钱币,工人会自动帮助将箱子推向所想推到的位置。 第二关: 先将最下面的箱子推向最里面的钱币,然后再点击最外的箱子,推向第二个钱币,最后将余下的箱子推进最后一枚钱币。 第三关: 将挡在中间的箱子向下推两步,将靠右边的箱子向上顶一步,将最下面的箱子向左推一步,将原先推下来的箱子向顶回原来的位置,这时将挡在左边的箱子推至钱币的右下角,然后将中间挡路的箱子推向右上角,再将靠中间墙的箱子推至左下角,最后将余上的箱子推至最后一枚钱币。 第四关: 将挡路的箱子向下推一步,将挡路的第二个箱子向右推一步,工人向下走一步,然后将右手的箱子向右推一步,将已经在钱币中的箱子向上推至顶,将第二排右手边的第一个箱子向右推一步入钱币中,再将头顶的箱子上顶入钱币,将左手的箱子向右推两步进钱币,最后将余下的箱子推入最后一枚钱币。 第五关: 将挡路的箱子向右推两步,将右下角的箱子向上顶两步,将中间的箱子推入最里的钱币,将第一个箱子推入中间的钱币,最后将余下的箱子推入最后的钱币。 第六关: 将中间右下角的箱子推至目前工人所站位置的头顶,然后将另三个箱子按顺时针的顺序推入相邻的钱币,最后将第一个推动的箱子再直顶入钱币中。 第七关: 从下往上,将第一个箱子向右推一步,将第二个箱子向上顶一步,将最上的箱子推入最顶的钱币,然后将并排的三个箱子右手边的第一个推入第二枚钱币,将并排的两个箱子的左手那

个箱子向上顶一步,将右手的箱子推入钱币的最下一枚,将上墙的箱子向右直推入第三枚钱币,最后余下的箱子推入最后的钱币中。 第八关: 直接将中间的箱子顶入品字形的箱子中形成连体,将并排的三个箱子中的右手箱子直接顶至最顶的钱币,将最品字形最顶的箱子向左推一步,将并排的两个箱子的右手那个直顶入最高的钱币中,将最下的箱子直顶入钱币,将竖排两箱子的最下那个箱子推入中间的钱币,最后再完成最后一个箱子。 第九关: 先将右边中间的箱子推入左下角的钱币中,再将右手边的上下两箱分别推入左手边的中、上两钱币,将最上挡路的箱子向左推一步,将中间挡路的箱子向下推两步,将最下的箱子推入右下角的钱币中,最后将余下的两个箱子分别推入右手的钱币中就完成任务。 第十关: 先将最右边的箱子推至最底,将纵列三个箱子中的中间箱子向右推两步入钱币,将三列中的中间箱子向上顶一步,然后再将其向下推至最底,将最上的箱子向右推两步,将最后箱子推入钱币完成任务。 第十一关: 先将脚下的箱子向左挪一步,再将第二排的箱子向下推至与第三排箱子并排,然后将最上的箱子推至第一枚钱币,再将并排的箱子的右手箱子直接顶回到第二枚钱币,最后按从下往上的顺序将最后的两箱推入相应的钱币即完成任务。 第十二关: 先将最上的第一个箱子向上顶一步,再向下推两步入钱币,将中间的箱子向上顶两步,将最下的箱子向左推一步入钱币,最后推完余下的箱子完成任务。 第十三关: 这关开始有些难度了,别看箱子少,但确实得花一段时间思考一下呵。先将左数过来的第二个箱子向下推两步,再将左手第一个箱子向左推两步入钱币,将第右手由上往下数的第一个箱子向左推三步入钱币,再将目前并排未入钱币的右数第一个箱子向上顶一步,将第二个箱子向右推一步,好,现在将排成列的右手的箱子由上往下的第一个推至钱币的最上面一枚,

JAVA推箱子游戏

淮海工学院计算机工程学院 课程设计报告 设计名称:面向对象课程设计 选题名称:推箱子的设计与实现 系(院):计算机工程学院 设计时间: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() 清空缓存 游戏过程设计 游戏中过程中,最为主要地方在于对地图矩阵,以及主角状态信息(包括位置、行走状态等)的维护,主角每行走一步,就更新一次地图信息和主角状态信息。另外一个比较重要的地方是游戏状态的保存方面。在该游戏中,使用栈结构保存主角每次行走的

推箱子小游戏

#include //标准输入输出头文件 #include //system函数的头文件 #include //getch函数的头文件 int i,j; void draw_map(int map[10][12]); //声明画图函数 int main() { char input; int count=0; //定义记分变量 /*下面定义一个二维数组,其中的元素是不同图像的ID号,在后面的函数中将讲解不同数字分别代表的图像元素*/ int map[10][12] = { {2,2,2,2,2,1,1,1,1,1,2,2}, {1,1,1,1,2,1,0,0,0,1,1,2}, {1,0,0,1,1,1,0,1,0,0,1,2}, {1,0,4,3,3,3,3,3,1,0,1,1}, {1,0,0,1,1,3,3,3,4,0,0,1}, {1,0,0,0,0,4,1,1,4,1,0,1}, {1,0,4,1,4,0,0,0,4,0,0,1}, {1,1,0,6,0,1,1,1,4,1,0,1}, {2,1,1,1,1,1,2,1,0,0,0,1}, {2,2,2,2,2,2,2,1,1,1,1,1} }; while (1) //死循环,等待用户命令 { system("CLS"); draw_map(map); printf("当前得分:%d\n",count); //找初始位置 for (i=0;i<10;i++) { for (j=0;j<12;j++) { if (map[i][j]==6||map[i][j]==9) break; } if (map[i][j]==6||map[i][j]==9) break; } printf("您的当前坐标(%d,%d)",i,j); input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。 switch (input) {

基于java的推箱子游戏解析

基于JAVA的推箱子游戏 前言 在这个充满竞争的社会里,随着生活节奏的不断加快,人们的生活水平越来越繁忙,因此,越来越多人感到无比的烦躁与巨大的压力,这些压力也带给人们诸多烦恼。所以如何解除现代人的生活压力,释放心中苦闷已经成为现代人的共同心愿。而本次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于EditPlus编译器,为大家开发了一款适合的、休闲娱乐的游戏,在娱乐的同时也给忙碌的上班族们开拓了另一个思考问题的空间。 基于JAVA的推箱子小游戏主要分为初始化模块,画图模块,移动小人模块,移动箱子模块以及功能控制模块。玩家是通过控制小人的移动来推动箱子,需要避过障碍物与死角才能将其推放到指定位置从而达到过关的目的。每关的难易程度各异,不仅适合人们休闲娱乐,还有助于开发智力,提高人们思考问题能力与想象能力,改善思考方式,拓展思维。 关键词:JAVA;解压;推箱子;休闲娱乐

Abstract In 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

推箱子游戏任务说明书

推箱子游戏程序开发 一、实验题目: 设计一个简单实用推箱子游戏程序。 二、推箱子游戏介绍 推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由Thinking Rabbit 公司首次发行,名“仓库番”。 游戏规则:在设定的游戏地图里面,箱子只可以推, 不可以拉, 而且一次只能推动一个。 胜利条件:把所有的箱子都推到目的地。 1.图1-1 推箱子游戏截图 三、程序设计要求: 2.地图大小为20*20,‘#’表示墙,‘0’表示箱子,‘*’表示‘人’,‘X’表示空位置, 可以放箱子。初始地图如图2-1所示,光标显示在’*’下方。 图2-1 推箱子初始地图 3.使用方向键↑↓←→进行移动,在前进方向上没有墙阻挡时,可以一次移动‘人’ (‘*’表示)一格;当‘人’与箱子(‘0’表示)相连接,如果对应方向没有墙‘#’阻挡,按方向键,则可以将箱子推动一格。 4.当‘人’将箱子‘0’推入到空位置‘X’后,‘X’消失。 5.当所有的箱子‘0’被推入箱子,游戏结束,在屏幕输出“You Win!”

4.游戏过程中按‘ESC’键,游戏结束 四、实验说明 1.互相之间可以进行算法的讨论,但文档以及程序每个人必须独立完成,如果发现雷同,则重做。 2.认真准备,实验前做好准备工作,准备工作包括完成实验报告中的(1)~(5)的部分,实验报告中(6)~(7)部分在实验结束后继续填写。 3.程序要上机调试成功并形成可执行的程序,记录调试过程中出现的错误现象以及如何改正 4.程序的运行结果要结合程序测试数据进行分析。 5.提交实验报告(实验报告的格式见附录B)和源程序以及可以运行的程序。 五、实验报告内容 (1)实验题目 (2)实验设计的数据结构及说明 (3)用层次图描述程序结构,并说明程序各函数的名称、功能,图示各函数之间相互的调用关系。 (4)各个函数的设计、流程图及说明 (5)测试数据的设计及预期结果 (6)调试过程记录:在程序调试过程中可能会出现许多问题,对这些问题要逐个记录错误位置、编译的描述(英文以及中文的含义)、如何解决。 (7)实验结果记录以及与预期结果比较以及分析:在实验过程中除非一次成功,否则会有多个实验结果,对这些实验结果要逐个记录,并且与预期结果进行比较并分析。 (8)总结及心得体会: 六、实验成绩评定 每个实验从三个方面考核每个实验的成绩:功能完成情况、实验报告以及程序风格、界面设计以及操作方便性。

推箱子游戏设计与实现

四川师范大学成都学院本科毕业设计推箱子游戏设计与实现 学生姓名张起明 学号2012101087 所在系通信工程系 专业名称通信工程 班级2012级宽带一班 指导教师陆园 四川师范大学成都学院 二○一六年五月

推箱子游戏的设计与实现 前言 于如今竞争激烈的快节奏时代中,人们的生活水平越来越繁忙,因为此,愈来愈多的人感到内心的空虚与压力带来的烦躁,这些也带给人们许许多多心理上和身体上的困惑.所以如何缓解当代人们的生活压力,已成为人们的共同夙愿。这一次的这个基于JAVA 的推箱子小游戏正是使用JAVA语言并且结合于Eclipses编译器,开发出了这样一款适合用于休闲的小游戏,在放松的同时也给忙碌的人们打开另一个思考的空间.这一款基于JAVA开发的推箱子主要分为初始化、画图、移动小人、移动箱子以及功能控制共五个模块。玩家可以通过控制游戏中的小人的移动来实现推动箱子,同时需要避开障碍物和死角方能将箱子推放到正确位置从而过关。每关的难易程度各不相同,不仅可以供人们用以娱乐,还有助于开发智力,提高人们思考问题与想象的能力,改善人们的思维方式,拓展思维。 关键词:JAVA 解压推箱子游戏

Abstract In today's competitive era of fast-paced, people ’s living level is becoming more and more busy, because of this, an increasing number of people have felt irritability of emptiness and pressure, these also bring people many psychological 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 language and the combination of the eclipses of the compiler developed such a suitable for leisure game, in a relaxed but also to the busy people to open another thinking space。 This is based on the JAVA development of the push box is divided into initialization, drawing, moving people, moving boxes and a total of five functional control module. Players can control the game through the villain’s mobile to achieve the promotion of the box, while the need to avoid obstacles and dead side to push the box to the correct position so that. Each level of difficulty is different, not only can be used for people to entertain, but also helps to develop intelligence,improve people’s ability to think about problems and imagination, improve people's way of thinking, expand thinking。 Key Words:JAVA Relieve pressure Push box Game

c语言推箱子代码

#include #include void map1(); void map2(); void map3(); void show(); void move(); void main(int argc,char*argv[]) { time_t a,b; time(&a); system("color 1E"); loop1: { system("cls");//刷屏 printf("\n\n\n\n\n\n\t\t\t\t欢迎进入推箱子游戏\n\n\t\t\t\t 请按a b c选择游戏\n\n\t\t\t\t 按 d 键结束"); int t=getch(); if(t=='d') { printf("\n\t\t\t "); } else { if(t=='a') { map1(); goto loop1; } if(t=='b') { map2(); goto loop1; } if(t=='c') { map3(); goto loop1; } else { printf("\n\n\t\t\t\t 请重新输入:"); goto loop1; } }

time(&b); printf("\n\n\n\n\t\t\t\t 游戏总共用时%.3d秒\n\t\t\t ",b-a); getch();//等待读取回车符以结束程序 } void map1() { time_t p,q,o; time(&p); int i=4,j=4,m=6,n=2,t=1,k=3; system("cls");//刷屏 system("color 2E"); int x=1,y=7; char z,a[9][9]= { /*为背景设置初始资料*/ {'#','#','#','#','#','#','#','#','#'}, {'#','#','#', 3, 0 , 0 , 0 , 1 ,'#'}, {'#','#', 0 , 0 , 0 ,'#', 0 ,'#','#'}, {'#', 0 , 0 ,'#', 0 , 0 , 5 , 0 ,'#'}, {'#', 0 , 5 , 5 , 3 , 0 , 0 , 0 ,'#'}, {'#','#', 0 ,'#', 0 , 0 ,'#','#','#'}, {'#','#', 3 , 0 , 0 , 0 ,'#','#','#'}, {'#','#','#','#','#','#','#','#','#'}, {'#','#','#','#','#','#','#','#','#'} }; show(a);//调用输出函数 loop://语句标号 move(a,&x,&y,i,j,m,n,t,k,&z); if(a[i][j]=='!'&&a[m][n]=='!'&&a[t][k]=='!') { system("cls");//刷屏 show(a); printf("\t\t\t\t YOU ARE WIN!\n"); time(&q); printf("\t\t\t\t\t 用时%.3d秒\n",q-p); printf("\t\t\t\t*******回车重新选择*******\n\t\t\t\t"); getch(); } else { time(&o); if(z=='d') { return;

推箱子游戏-需求分析教学

推箱子 需求分析报告 报告名称:推箱子需求分析报告组长座号: 组长姓名:

一、引言 1.1.项目名称 推箱子游戏 1.2.项目目标 从推箱子游戏的需求及现有技术等方面研究该推箱子游戏项目的可行性,嵌入大型游戏中 1.3.项目背景 (1)开发软件的名称:JAVA (2)项目提出者:福建工程学院 (3)项目开发者:福建工程学院开发小组 (4)本游戏可作为大型游戏系统中的一部分 1.4.参考资料 清华大学出版社《软件工程》 二、需求分析 2.1.项目概述 经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。在一个狭小的仓库中,要求把木箱放在指定的位置,稍不小心就会出现箱子无法移动或则通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理安排移动的次序和未知,才能顺利地完成任务

2.2.系统的功能描述 2.2.1能够显示主菜单和功能 游戏需要提供主菜单让玩家进行游戏设置,同时能能够把地图文件中的信息转换成为图像显示到祝游戏界面上 2.2.2能够实现键盘操作功能 能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏任务移动到响应的位置,例如,当玩家单击方向键“上”时,如果向上的未知是可移动的,那么就当把游戏人物向上移动一个方格 2.2.3能够把放置到位置上的箱子进行变色显示 当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。这样就能明确地显示出该箱子已经放置到指定位置上 2.2.4支持游戏扩展功能 玩家可以自己扩展原游戏地图文件,从而生成新的游戏地图 2.2.5游戏胜负判断功能 在游戏中,当玩家把全部的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏,如果玩家无法将指定的箱子全部推到放置点时,玩家失败。玩家可以选择重新进行当前关口的游戏,还是退出游戏 2.2.6支持关口选择功能 玩家在哟西中可自行选择需要挑战的关口 2.2.7游戏提供支持背景音乐功能 通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音

用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 {

推箱子源代码

#include #include #include #include #include using std::cout; using std::endl; #ifndef SOKOBAN_H_ //防止文件重复包含 #define SOKOBAN_H_ #include using std::queue; //每一步的数据类型 struct node { int bx, by; //箱子的坐标 int px, py; //人的坐标 }; //推箱子类 class Sokoban { private: enum {L = 15, H = 7}; char GameMap[H][L]; //地图 int Pex, Pey; //人的位置 int Boxx, Boxy; //箱子的位置 int Succeed, Prove; //是否成功到目的地, 是否可玩性 int dx[4], dy[4]; //方向数组 protected: char Empty; char People; char Box; char Block; char Target; int dir; //记录按键方向 node s, e; public: Sokoban(); //构建函数 ~Sokoban() {} //析构函数,即为inline //地图初始化函数 void Initial(); //箱子路劲验证函数,参数为箱子坐标(bx,by),人坐标(px,py) void Box_Bfs(int bx, int by, int px, int py); //人路劲验证函数,人所到的目的地(ex,ey)

推箱子--Java课程设计

《面向对象程序设计》 课程设计报告 题目:经典推箱子趣味游戏设计与实现 院(系):信息科学与工程学院 专业班级:计算机科学与技术1201班 学生姓名:程伟 学号:20121183011 指导教师:吴奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日 华中科技大学武昌分校制

面向对象程序设计课程设计任务书

目录 1需求与总体设计 (1) 1.1需求分析 (1) 1.2总体设计 (2) 2详细设计 (4) 2.1 mainFrame类 (4) 2.2 mainpanel类 (5) 2.3S o u n d类 (7) 2.4 Readmap类 (7) 3 编码实现 (9) 3.1游戏源码 (9) 4系统测试 (42) 总结 (45)

1需求与总体设计 1.1需求分析 1.1.1功能结构图 推箱子游戏的功能结构图如图1.1所示。 在系统中,编写4个Java类:mainFrame,mainpanel,Sound,Readmap;分别对应初始化游戏界面,游戏操作,背景音乐,绘制地图。 图1.1

1.1.2 UML类图 推箱子系统除了上述4个Java类外,还需要Java系统提供的一些重要的类。这些类之间的UML图如图1.2所示。 图1.2 1.2总体设计 1.2.1 mainFrame类 mainFrame类负责创建系统的主窗口。mainFrame类有多种重要类型的对象,这些对象构成了游戏界面的简明与美观,并且通过监听实现方法赋予了这些组件的相应功能。MainFrame类通过调用Readmap类来实现将地图绘制在游戏主界面,通过调用Sound 类来实现对背景音乐的管理,实现音乐开关以及选择上一曲下一曲的操作。 设计中包括了所有你所能直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单, 包括:"选项""设置音乐""帮助"。按钮包括:"重来""悔一步""第一关""上一关""下一关""最终关""选关""音乐"等。 1.2.2 mainpanel类 Mainpanel类中集成了小人与箱子的移动规则,并且还包含了对键盘操作移动的响应方法。在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物动作会使系统更有效.通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动

推箱子游戏代码

#include #include #include #include #include #include typedef struct winer { int x,y; struct winer *p; }winer; char status [20][20]; char far *printScreen=(char far* )0xB8000000; void putoutChar(int y,int x,char ch,char fc,char bc); void printWall(int x, int y); void printBox(int x, int y); void printBoxDes(int x, int y); void printDestination(int x, int y); void printDestination1(int x,int y,winer **win,winer **pw); void printMan(int x, int y); void init(); winer *initStep1(); winer *initStep2(); winer *initStep3(); winer *initStep4(); void moveBoxSpacetoSpace(int x ,int y, char a); void moveBoxDestoSpace(int x ,int y, char a) ; void moveBoxSpacetoDes(int x, int y, char a); void moveBoxDestoDes(int x, int y, char a); int judge(int x, int y); void move(int x, int y, char a); void reset(int i); void putoutChar(int y,int x,char ch,char fc,char bc) { printScreen[(x*160)+(y<<1)+0]=ch; printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc; } void printWall(int x,int y) { putoutChar(y-1,x-1,219,GREEN,BLACK); status[x][y]='w'; } void printBox(int x,int y) { putoutChar(y-1,x-1,10,WHITE,BLACK); status[x][y]='b'; } void printDestination1(int x,int y,winer **win,winer **pw) {

推箱子游戏

陕西师范大学 C语言课程设计 推箱子 院(系)别计科院 班级信息管理与信息系统 指导教师何秀青 时间2015-6 参与者:王杰王启星贾臻孙楠

1.设计目的 本程序涉及软中断,二维数组,键盘操作,图形化函数等方面的知识。通过本程序的训练,能基本掌握显示器中断寄存器的设置,二维数组及结构体的应用,图形方式下光标的显示和定位,以及部分图形函数。 2.功能描述 本游戏共有五关,由易到难,每关都有初始化,按键处理,充值和退出功能。 (1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化为宽80像素,高25像素。 (2)按键处理包括移动小人和推动箱子,通过移动上下左右键控制小人移动,从而推动箱子,以把箱子推到指定的目的地为通关。 (3)每一关都可以重置,按空格键可以重置当前关卡。 (4)按Esc键可以在任何时候退出游戏。 3.总体设计 (1)系统模块图 初始化模块:该模块包括屏幕初始化和游戏每关的初始化,屏幕初始化用于输出欢迎信息和操作提示,游戏每关的初始化是构建每一关的关卡。 画图模块:画图模块主要被其他模块调用,用于画墙,在空地画箱子,在目的地画箱子,画小人和画目的地。 移动箱子模块:该模块用于移动箱子,包括目的地之间,空地之间和目的地与空地之间的箱子移动。 移动小人模块:该模块用于控制小人移动,从而推动箱子到目的地。 功能控制模块:该模块是几个功能函数的集合,包括屏幕输出功能,指定位置状态判断功能和关卡重置功能。 (2)任务执行流程图推箱子游戏 初始化模块画 图 模 块 移 动 箱 子 模 块 移 动 小 人 模 块 功 能 控 制 模 块

否 是 否 有 否 是 是 否 (3)小人移动流程图 小人移动方向有四个,move()函数(处理小人移动的函数)对这四个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人的移动方向,然后根据小人所处的当前状态,下一步状态或者下下一步的状态进行适当的处理。 开始 第一任务开始 是否继续完成 有无成功希望 是否成功 是否第六关 进入下一任务 显示通关信息提示结束 按Esc 键退出 按空格键回到开始

java推箱子游戏源代码(含推箱子的判断)

第一个Java文件: package xiaoA; import java.awt.Color; import java.awt.HeadlessException; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; public class GameFrame extends JFrame { JPanel zhuobu = new JPanel(); //工人 JLabel worker = null; //箱子 JLabel box = null; //目的地 JLabel goal = null; JLabel[] walls = null; public static final int SPEED = 12; //设置图片大小 int imgSize = 48; public void setImgSize(int imgSize){ this.imgSize = imgSize; } public GameFrame(String title) throws HeadlessException { super(title); //构造方法中调用本类的其它方法 this.initContentPane(); this.addKeyListener(new KeyListener() { //键盘按下事件 public void keyPressed(KeyEvent e) { //[2.5] 使工人可以移动 int xSpeed = 0, ySpeed = 0; switch (e.getKeyCode()) { case KeyEvent.VK_LEFT :

推箱子游戏—c语言实训

实训四:游戏篇 4.1推箱子游戏 【实训内容】 (1)功能要求 经典的推箱子是一个来自日本的古老游戏,目的是在训练人的逻辑思考能力。在一个狭小的仓库中,要求把木箱从开始位置推放到指定的位置。在仓库有障碍物,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。本游戏一共4关,由易到难,每一关都有初化、按键处理、重置及退出功能。(1)初始化包括屏幕初始化和每一关卡的初始化,屏幕被初始化宽80像素,高25像素。(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。(3)每一关都可以重置,按空格键可以重置当前关。(4)按Esc键可以在任何时候退出游戏。 (2)技术要求 定义二维数组char status[20][20],用于记录屏幕一各点的状态。其中,“0”表示什么都没有,“b”表示箱子,“w”表示目的地,“i”表示箱子在目的地。首先将屏幕20*20范围内的状态初始化为0,然后根据具体情况,在画箱子时,将箱子所在点的状态改为“b”;在画墙壁时,将墙壁所在点的状态改为“w”;在画目的地时,将目的地所在点的状态改为“m”;当箱子被推到目的地时,箱子所在点的状态改为“i”,如果每一关中所有目的地的状态都为“i”,则说明该关已完成。 定义字符指针char far *printScreen=(char far*)0xB8000000,用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。 定义结构体typedef struct winer{int x; int y; struct winer *p; }winer; 定义结构体struct winer用于判断每一关是否已完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地坐标对应的状态都为“i”,即箱子在目的地,则表示已经过关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。 【概要设计】本程序采用模块化设计,包括5个模块,分别是初始化模块、画图模块、 移动箱子模块、移动小人模块和功能控制模块。各个模块的功能描述如下: (1)初始化模块。该模块包括屏幕初始化和游戏第一关的初始化。屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。 (2)画图模块。该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。 (3)移动箱子模块。该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。 (4)移动小人模块。该模块用于控制小人移动,从而推动箱子到目的地。 (5)功能控制模块。该模块是几个功能函数的集合,包括屏幕输出功能、指定位置

相关主题
文本预览
相关文档 最新文档