推箱子FLASH小游戏的设计与实现(含flash源文件)
推箱子问题的设计与实现
《推箱子问题的设计与实现》实验报告班级:计本四班学号:2012020386 姓名:刘宝同一、问题描述码头仓库是划分为n×m个格子的矩形阵列。
有公共边的格子是相邻格子。
当前仓库中有的格子是空闲的;有的格子则已经堆放了沉重的货物。
由于堆放的货物很重,单凭仓库管理员的力量是无法移动的。
仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。
管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。
管理员站在与箱子相对的空闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。
推箱时只能向管理员的对面方向推。
由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。
二、问题求解分析对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置,设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所需的最少推动次数。
数据输入:由文件input.txt 提供输入数据。
输入文件第1行有2个正整数n 和m (1<=n,m<=100),表示仓库是n×m个格子的矩形阵列。
接下来有n 行,每行有m个字符,表示格子的状态。
S 表示格子上放了不可移动的沉重货物;w 表示格子空闲;M 表示仓库管理员的初始位置;P 表示箱子的初始位置;K 表示箱子的目标位置。
结果输出:将计算出的最少推动次数输出到文件output.txt。
如果仓库管理员无法将箱子从开始位置推到目标位置则输出“No solution!”。
三、源程序关键代码#include <stdio.h>#include <stdlib.h>#include <conio.h>int map1(int a[9][10]);char move(char t,int map[9][10]){int i,j,x,y;system("CLS"); //清屏for(i=0;i<9;i++) // 查找当前人位置{for(j=0;j<10;j++)if(map[i][j]==4 || map[i][j]==6){x=i,y=j;};}switch(t){case '8':{ if(map[x-1][y]==1)//如果人面前时路{map[x-1][y]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-1][y]==3)//人面前是箱子{if(map[x-2][y]==2)// 人前箱子箱子前面是空位{map[x-1][y]=4;map[x-2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-2][y]==0 || map[x-2][y]==3 || map[x-2][y]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}else if(map[x-2][y]==1)// 人前是箱子箱子前面是路{map[x-1][y]=4;map[x-2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x-1][y]==0) //人前是墙{printf("\a");}else if(map[x-1][y]==2){map[x-1][y]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-1][y]==5)//人前是已在空位的箱子{if(map[x-2][y]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x-1][y]=6;map[x-2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x-2][y]==0 || map[x-2][y]==3 || map[x-2][y]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x-2][y]==1)//人前是已在空位上的箱子箱子前是路{map[x-1][y]=6;map[x-2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '6':{ if(map[x][y+1]==1)//如果人面前时路{map[x][y+1]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+1]==3)//人面前是箱子{if(map[x][y+2]==2)// 人前箱子箱子前面是空位{map[x][y+1]=4;map[x][y+2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+2]==0 || map[x][y+2]==3 || map[x][y+2]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y+2]==1)// 人前是箱子箱子前面是路{map[x][y+1]=4;map[x][y+2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x][y+1]==0) //人前是墙{printf("\a");}else if(map[x][y+1]==2){map[x][y+1]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+1]==5)//人前是已在空位的箱子{if(map[x][y+2]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x][y+1]=6;map[x][y+2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+2]==0 || map[x][y+2]==3 || map[x][y+2]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y+2]==1)//人前是已在空位上的箱子箱子前是路{map[x][y+1]=6;map[x][y+2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '2':{ if(map[x+1][y]==1)//如果人面前时路{map[x+1][y]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+1][y]==3)//人面前是箱子{if(map[x+2][y]==2)// 人前箱子箱子前面是空位{map[x+1][y]=4;map[x+2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+2][y]==0 || map[x+2][y]==3 || map[x+2][y]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}else if(map[x+2][y]==1)// 人前是箱子箱子前面是路{map[x+1][y]=4;map[x+2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x+1][y]==0) //人前是墙{printf("\a");}else if(map[x+1][y]==2){map[x+1][y]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+1][y]==5)//人前是已在空位的箱子{if(map[x+2][y]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x+1][y]=6;map[x+2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+2][y]==0 || map[x+2][y]==3 || map[x+2][y]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x+2][y]==1)//人前是已在空位上的箱子箱子前是路{map[x+1][y]=6;map[x+2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '4':{ if(map[x][y-1]==1)//如果人面前时路{map[x][y-1]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-1]==3)//人面前是箱子{if(map[x][y-2]==2)// 人前箱子箱子前面是空位{map[x][y-1]=4;map[x][y-2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-2]==0 || map[x][y-2]==3 || map[x][y-2]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y-2]==1)// 人前是箱子箱子前面是路{map[x][y-1]=4;map[x][y-2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x][y-1]==0) //人前是墙{printf("\a");}else if(map[x][y-1]==2){map[x][y-1]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x][y-1]==5)//人前是已在空位的箱子{if(map[x][y-2]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x][y-1]=6;map[x][y-2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-2]==0 || map[x][y-2]==3 || map[x][y-2]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y-2]==1)//人前是已在空位上的箱子箱子前是路{map[x][y-1]=6;map[x][y-2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;}map1(map);return (map[9][10]);}int map1(int a[9][10]){int i,j;static int count=0;system("cls");printf("\n\n\t\t\t 欢迎选玩*【推箱子游戏】O(∩_∩)O~~~ \n\n\t\t\t\t\t 游戏规则:\n\t\t□:代表墙×:代表路○:代表空位\n\t\t ●:代表箱子♀:代表人※:代表箱子已在空位上\n\t\t\t\t\t 8:向上移动\n\t\t\t\t\t 2:向下移动\n\t\t\t\t\t 4:向左移动\n\t\t\t\t\t 6:向右移动\n\t\t\t\t\t") ;for(i=0;i<9;i++){printf("\n\t\t\t\t ");for(j=0;j<10;j++){switch(a[i][j]){case 0:printf("□");break;//"□"代表墙case 1:printf("×");break;//"×"代表路case 2:printf("○");break;//"○"代表空位case 3:printf("●");break;//"●"代表箱子case 4:printf("♀");break;//"♀"代表人case 5:printf("※");break;//"※"代表箱子已在空位上case 6:printf("♀");break;}}}printf("\n\t\t\t\t步数:%d",count++);printf("\n\t\t\t\t"); return (a[9][10]);}int main(){char c;int map[9][10]={{0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,2,1,0,0,0},{0,1,3,2,3,3,3,1,1,0},{0,1,0,1,0,2,1,0,1,0},{0,1,4,2,1,2,1,0,1,0},{0,0,0,0,1,3,1,1,1,0},{0,0,0,0,3,2,0,0,0,0},{0,0,0,0,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}};system("color E9");map1(map);while(1){ c=getch();if(c=='8' || c=='6' || c=='2' || c=='4'){ move(c,map);}}}四、总结通过对推箱子游戏的编程和设计,进一步巩固了数据结构和算法设计与分析所学的知识,在查阅了有关推箱子游戏问题编程的相关知识的同时,也进一步了解了结构体之间的密切关系,并加深和巩固了函数调用的方法和技巧。
推箱子之完美游戏程序清单
//.推箱子源代码.#include <stdio.h> //标准输入输出头文件#include <stdlib.h> //system函数的头文件#include <conio.h> //getch函数的头文件#include <windows.h>int i,j;void drawmap(int map[10][12]); //声明画图函数void setback();int main(){char input;int count=0; //定义记分变量/*下面定义一个二维数组,其中的元素是不同图像的ID号,不同数字分别代表的图像元素*/ setback ();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,0,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");printf(" 由范占伟,刘艳威制:\n\n\n");drawmap(map);printf(" 你的当前得分=%d\n\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)\n",i,j);input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
推箱子游戏设计与实现
毕业设计(论文)课题名称基于开发的推箱子游戏学生姓名吕季干学号 0840819035 系、年级专业理学与信息科学系2008级信息与计算科学指导教师戴亚滨职称讲师2012 年 5 月 25 日摘要在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为娱乐方式。
但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂的设计、艺术、声音和软件。
推箱子游戏是一款很有趣味的游戏,它由英雄、魔王、笼子、墙和地板组成,然后存储在一个数组中,用户根据键盘的向上、向左、向右和向下键操作。
其开发过程有一定的技巧和方法,其中涉与到二维数组、键盘操作以与图形化函数等方面的知识。
此次设计是在7系统下,以为开发语言,在平台上进行游戏的设计与实践。
关键词:游戏设计、数组、开发语言, 's , . 's , a , , , .a , , , , , . , a , . 7 , , .: , ,目录摘要.................................................................................. 错误!未指定书签。
............................................................................................ 错误!未指定书签。
前言.................................................................................... 错误!未指定书签。
1可行性分析..................................................................... 错误!未指定书签。
1.1要求.............................................................................. 错误!未指定书签。
说明书-推箱子-课程设计
尚需解决的问题
游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入”模 块,导入玩家自己喜欢的音乐。在此次课程设计中,我遇到了一些问题,如:对于面 向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于 Java 语言, 只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在 短时间内用 Java 语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一 个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难 以动手,这表明所学的知识不能灵活运用到实际中。
对于推箱子游戏,更是有了进一步的了解,其中用到了 9 张图片,用户可以通过 改变图片来改变游戏的显示界面,当然,这个是不被允许的,因为每个程序的代码都 有版权,但对于设计者而言,却可以更加清楚的了解代码的内部构造,达到熟能生巧 的效果。
游戏的帮助和关于设计人性化,在写代码是遇次课程设计,将我本周所 学的 JAVA 知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同 学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不
推箱子游戏 3
图 1 游戏运行界面 .2 任务执行流程图
游戏从第一关开始,按上下左右方向键控制小人移动来推动箱子,可以在游戏中 的任何时候按退出键退出。如果游戏无成功希望,可以按空格键回到当前任务的开始 状态;如果成功完成当前关,则显示通关信息,如果想继续闯,按回车闯下一关,否 则结束游戏。
游戏同时还具有时间和步数的记录,在开始游戏之前首先把图片添加到 pic 目录 下,程序会自动获取该目录下的所有文件。
系统模块图 本程序包括 5 个模块,分别是初始化模块、画图模块、移动箱子模块、移动小 模
实验四【程序源码 8-3】推箱子(C版)学生实验讲解
/*实验要求:1.有些方向的移动不能工作,需要根据能工作的进行对比研究后修改,确保四个方向都能正常移动2.计数器工作有故障,需要根据实际效果找到问题解决之3.添加第四关的基础数据并使之在软件开始玩和重新玩中全部承认4.添加栈的机制使得可以在推到墙体时可以后退一步或者数步*///推箱子小游戏C版#include<stdio.h>#include<windows.h>#include<stdlib.h>#include<conio.h>const roomsize=9; //设计房间内部为正方形,边长为9int map[roomsize+2][roomsize+2]; //推箱子房间布局的数据结构:二维数组int data; //记录最短步骤数目int times=0;int array[2]={100,100}; //记录最好成绩char string[30]="正在装入..................";//以下为前几轮游戏房间中细节布局的数据结构:二维数组的实际内容int map1[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, //0{-1,0,0,0,0,1,1,1,1,1,-1}, //1{-1,0,0,0,0,1,0,0,0,1,-1}, //2{-1,1,1,1,0,1,0,0,0,1,-1}, //3{-1,1,2,1,0,1,0,0,0,1,-1}, //4{-1,1,2,1,0,1,0,3,0,1,-1}, //5{-1,1,2,1,1,1,0,3,0,1,-1}, //6{-1,1,0,0,0,0,3,4,0,1,-1}, //7{-1,1,0,0,1,0,0,0,0,1,-1}, //8{-1,1,1,1,1,1,1,1,1,1,-1}, //9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10};int map2[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//0{-1,0,1,1,1,1,0,0,0,-1,-1}, //1{-1,0,1,4,0,1,1,1,0,-1,-1}, //2{-1,0,1,0,3,0,0,1,0,-1,-1}, //3{-1,1,1,1,0,1,0,1,1,-1,-1}, //4{-1,1,2,1,0,1,0,0,1,-1,-1}, //5{-1,1,2,3,0,0,1,0,1,-1,-1}, //6{-1,1,2,0,0,0,3,0,1,-1,-1}, //7{-1,1,1,1,1,1,1,1,1,-1,-1}, //8{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10 };int map3[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//0{-1,1,1,1,1,1,1,1,1,-1,-1}, //1{-1,1,4,0,0,0,1,1,1,-1,-1}, //2{-1,1,0,3,3,0,0,0,1,-1,-1}, //36{-1,1,0,2,1,2,0,0,1,-1,-1}, //4{-1,1,0,0,1,1,3,0,1,-1,-1}, //5{-1,1,0,0,1,1,2,1,1,-1,-1}, //6{-1,1,0,0,0,0,0,1,1,-1,-1}, //7{-1,1,1,1,1,1,1,1,1,-1,-1}, //8{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10 };//其他关的房间布局模板int map4[roomsize+2][roomsize+2]={ //0,1,2,3,4,5,6,7,8,9,10{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//0{-1,1,1,1,1,1,1,1,1,-1,-1}, //1{-1,1,0,0,1,0,0,0,1,-1,-1}, //2{-1,1,0,1,0,0,1,0,1,-1,-1}, //3{-1,1,0,0,0,3,1,0,1,-1,-1}, //4{-1,1,1,1,3,0,3,4,1,-1,-1}, //5{-1,1,0,0,0,0,1,0,1,-1,-1}, //6{-1,1,0,2,2,2,0,0,1,-1,-1}, //7{-1,1,1,1,1,1,1,1,1,-1,-1}, //8{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},//9{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1} //10};int positionh;//人的位置纵坐标int positionl;//人的位置横坐标int flag;//标志位,记录人在目标位置上int gate;//记录关数int step;//记录步数void initbox();//初始化函数void begin();//开始界面void choose_gate();//选关提示void choose();//游戏时c选项的提示void replay();//重玩void playing();//玩游戏时界面void display();//显示地图void moveleft();//移向左方向void moveright();//移向右方向void movedown();//移向下方向void moveup();//移向上方向void test_flag();//过关提示void record();//成绩排行榜//=====void playing()//Ascii码键盘键位:左为75 右为77 上为72 下为80 {int choice;step=0;printf("开始游戏!");while(1){display();switch(getch()){case 72:moveup();step++;break;case 80:movedown();step++;break;case 75:moveleft();step++;break;case 77:moveright();step++;break;case 'c':case 'C':choose();break;case 'q':case 'Q':printf(" ╭─────────────╮\n");printf(" │是退出游戏还是返回到主界面? │\n");printf(" │ 1. 返回主界面│\n");printf(" │ 2. 退出游戏│\n");printf(" ╰──────────────╯\n");scanf("%d",&choice);switch(choice){case 1:step=0;Sleep(500);system("cls");begin();break;case 2:exit(0);}default:break;}system("cls");}}void display(){printf("\n\n\n\n\n");for(int i=1;i<=roomsize;i++){printf(" ");for(int j=1;j<=roomsize;j++){if(map[i][j]==0) printf(" ");if(map[i][j]==1) printf("■");//墙if(map[i][j]==2) printf("○");//目标位置if(map[i][j]==3) printf("★");//箱子if(map[i][j]==4) printf("☇");//人if(map[i][j]==5) printf("㊣");//箱子在目标位置上}printf("\n");}printf("\n\n");printf("选项(c) 步数:%d\n",step);}void moveright(){if(map[positionh][positionl+1]==0)//向空白位置移动{map[positionh][positionl+1]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionl++;}else if(map[positionh][positionl+1]==2)//人要到目标位置上{map[positionh][positionl+1]=4;if(flag==1)//人在目标位置上map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionl++;}else if(map[positionh][positionl+1]==3&&map[positionh][positionl+2]==0)//将箱子推到空白位置上{map[positionh][positionl+2]=3;map[positionh][positionl+1]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionl++;}else if(map[positionh][positionl+1]==5&&map[positionh][positionl+2]!=1)//要将箱子从目标位置上推出{if(map[positionh][positionl+2]==2)//下一个位置还是目标位置{map[positionh][positionl+2]=5;map[positionh][positionl+1]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0; flag=1; }}else if(map[positionh][positionl+2]==0)//下一个位置是空白{map[positionh][positionl+2]=3;map[positionh][positionl+1]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0; flag=1; }}positionl++;}else if(map[positionh][positionl+1]==3&&map[positionh][positionl+2]==2)//要将箱子推到目标位置上{map[positionh][positionl+2]=5;//箱子在目标位置上map[positionh][positionl+1]=4;if(flag==1)//人在目标位置上{ map[positionh][positionl]=2; flag=0; }else //人不在目标位置上map[positionh][positionl]=0;positionl++;}else step--;//抵消人不动的情况test_flag();}void moveleft(){if(map[positionh][positionl-1]==0)//向空白位置移动{map[positionh][positionl-1]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionl--;}else if(map[positionh][positionl-1]==2)//人要到目标位置上{map[positionh][positionl-1]=4;if(flag==1)//人在目标位置上map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionl--;}else if(map[positionh][positionl-1]==3&&map[positionh][positionl-2]==0)//将箱子推到空白位置上{map[positionh][positionl-2]=3;map[positionh][positionl-1]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionl--;}else if(map[positionh][positionl-1]==5&&map[positionh][positionl-2]!=1)//要将箱子从目标位置上推出{if(map[positionh][positionl-2]==2)//下一个位置还是目标位置{map[positionh][positionl-2]=5;map[positionh][positionl-1]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0; flag=1; }}else if(map[positionh][positionl-2]==0)//下一个位置是空白{map[positionh][positionl-2]=3;map[positionh][positionl-1]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0; flag=1; }}positionl--;}else if(map[positionh][positionl-1]==3&&map[positionh][positionl-2]==2)//要将箱子推到目标位置上{map[positionh][positionl-2]=5;//箱子在目标位置上map[positionh][positionl-1]=4;if(flag==1)//人在目标位置上{ map[positionh][positionl]=2; flag=0; }else //人不在目标位置上map[positionh][positionl]=0;positionl--;}else step--;//抵消人不动的情况test_flag();}void moveup(){if(map[positionh-1][positionl]==0){map[positionh-1][positionl]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionh--;}else if(map[positionh-1][positionl]==2)//人要到目标位置上{map[positionh-1][positionl]=4;if(flag==1)map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionh--;}else if(map[positionh-1][positionl]==3&&map[positionh-2][positionl]==0)//将箱子推到空白位置上{map[positionh-2][positionl]=3;map[positionh-1][positionl]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionh--;}else if(map[positionh-1][positionl]==5&&map[positionh-2][positionl]!=1)//要将箱子从目标位置上推出{if(map[positionh-2][positionl]==2)//下一个位置还是目标位置{map[positionh-2][positionl]=5;map[positionh-1][positionl]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0;flag=1; }}else if(map[positionh-2][positionl]==0)//下一个位置是空白{map[positionh-2][positionl]=3;map[positionh-1][positionl]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0;flag=1; }}positionh--;}else if(map[positionh-1][positionl]==3&&map[positionh-2][positionl]==2)//要将箱子推到目标位置上{map[positionh-2][positionl]=5;//箱子在目标位置上map[positionh-1][positionl]=4;if(flag==1)//人在目标位置上{ map[positionh][positionl]=2;flag=0; }else //人不在目标位置上map[positionh][positionl]=0;positionh--;}else step--;//抵消人不动的情况test_flag();}void movedown(){if(map[positionh+1][positionl]==0){map[positionh+1][positionl]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionh++;}else if(map[positionh+1][positionl]==2)//人要到目标位置上{map[positionh+1][positionl]=4;if(flag==1)map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionh++;}else if(map[positionh+1][positionl]==3&&map[positionh+2][positionl]==0)//将箱子推到空白位置上{map[positionh+2][positionl]=3;map[positionh+1][positionl]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionh++;}else if(map[positionh+1][positionl]==5&&map[positionh+2][positionl]!=1)//要将箱子从目标位置上推出{if(map[positionh+2][positionl]==2)//下一个位置还是目标位置{map[positionh+2][positionl]=5;map[positionh+1][positionl]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0;flag=1; }}else if(map[positionh+2][positionl]==0)//下一个位置是空白{map[positionh+2][positionl]=3;map[positionh+1][positionl]=4;if(flag==1)map[positionh][positionl]=2;else{ map[positionh][positionl]=0;flag=1; }}positionh++;else if(map[positionh+1][positionl]==3&&map[positionh+2][positionl]==2)//要将箱子推到目标位置上{map[positionh+2][positionl]=5;//箱子在目标位置上map[positionh+1][positionl]=4;if(flag==1)//人在目标位置上{ map[positionh][positionl]=2;flag=0; }else //人不在目标位置上map[positionh][positionl]=0;positionh++;}else step--;//抵消人不动的情况test_flag();}void initbox()//初始化函数{positionh=0;positionl=0;flag=0;step=0;gate=0;}void begin(){printf(" ╭────────────────────────────────╮\n");printf(" ││\n");printf(" │★☆★推箱子★☆★│\n");printf(" │╭─────╮│\n");printf(" ││游戏简介││\n");printf(" │╰──────╯│\n");printf(" │推箱子游戏:最终目的是操作一个人(☇)将箱子(★)推到目标位置(○)上。
一个C语言编写的推箱子游戏源代码 (1)
/* 一个C语言编写的推箱子游戏源代码*//* 本游戏是字符模式的,请不要在中文dos下运行。
本游戏在TURBO C下调试通过*/程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。
#include <dos.h>#include <stdio.h>#include <ctype.h>#include <conio.h>#include <bios.h>#include <alloc.h>/* 定义二维数组ghouse来记录屏幕上各点的状态,其中:0表示什么都没有,'b'表示箱子,'w'表示墙壁,'m'表示目的地,'i'表示箱子在目的地。
*/ char ghouse[20][20];/* 以下函数为直接写屏函数,很酷的函数哦!是我朋友告诉我的。
*/定义全局变量char far *screen=(char far* )0xb8000000; 用于在屏幕上输出字符。
彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。
void putchxy(int y,int x,char ch,char fc,char bc)Putchxy()函数在屏幕上的指定位置输出指定的字符。
其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的字符颜色,bc 表示背景色。
{screen[(x*160)+(y<<1)+0]=ch; /*屏幕输出字符*/screen[(x*160)+(y<<1)+1]=(bc*16)+fc; /*指定字符颜色fc,背景色bc*/}/* 定义判断是否胜利的数据结构*/typedef struct winer {int x,y;struct winer *p;}winer;定义结构体struct winer用于判断每一关是否已完成。
C语言课程设计-推箱子游戏-毕业论文2.doc
X x 工业大学《C++语言程序设计》课程设计(论文)题目:推箱子院(系):软件学院专业班级:软件工程103班学号:学生姓名:指导教师:教师职称:讲师起止时间:2012.12.20-2012.12.31课程设计(论文)任务及评语目录第1章课程设计目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1 C++语言程序设计------《推箱子》问题分析 (2)2.1.1 功能分析 (2)2.1.2 算法设计及程序设计中技术重点 (2)2.2 程序中涉及的类的UML类图和主要函数流程图或框图。
(5)2.3 程序源代码 (7)2.4 程序的实现 (10)第3章课程设计总结 (13)参考文献 (14)第1章课程设计目的与要求1.1 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
1.2 课程设计的实验环境硬件要求能运行Windows 操作系统的微机系统。
推箱子游戏设计与实现
方案选择
3.概要设计
3.1游戏设计分析
地图注意事项
3.3游戏流程图
4.详细设计
4.1游戏总体结构与代码
结论
参考文献
致谢
1.可行性研究
1.1设计目的
灵活运用自己在学校学习期间所学到的理论知识和实际动手技能,并结合自
己于课外查找到的资料, 该推箱子游戏设计并幵发基于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 gameis 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 JAVAdevelopment 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 gamethrough 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.
(毕业设计)基于FLASH的儿童益智类游戏的设计与实现---以推箱子游戏为例
基于FLASH的儿童益智类游戏的设计与实现---以推箱子游戏为例摘要随着计算机技术、互联网技术以及多媒体技术的迅速发展,各式各样的游戏犹如雨后春笋般遍及网络的各个角落。
然而有些游戏在娱乐生活的同时,也不可避免地产生了一些负面效果,比如一些充斥着血腥厮杀场面的格斗类游戏将给少年儿童的身心健康带来严重不良的影响。
还有部分青少年儿童长期沉迷于那些需要消耗大量时间和精力的网络游戏,从而耽误了学业,贻害一生。
“益智游戏”顾名思义就是“有益于智力开发的游戏”,为了发挥电脑的教育作用,我们可以利用它来引导儿童进行绿色游戏。
并且益智类是Flash 比较擅长的游戏,相对于动作类游戏的快节奏,益智类游戏的特点就是玩起来速度慢,比较休闲,主要培养玩家在某些方面的智力和反应能力。
本文主要介绍了Flash和ActionScript这两款软件的相关功能特性,以及如何利用Flash8.0以及ActionScript2.0开发儿童益智类游戏的详细过程,同时也介绍了如何设计并实现此系统的具体过程与详细内容,最终开发出一个可以培养儿童独立思考并解决问题的能力的益智游戏。
我所制作的推箱子游戏是一款非常经典的益智类游戏,其设计目的是训练儿童的逻辑思维能力。
游戏场景一般是设定在空间狭小的场景中,要求把箱子摆放到指定位置。
这就要求玩家巧妙的运用有限的空间和通道,合理的安排箱子的位置和移动次序才可能完成任务。
此款游戏的目的就是激发儿童的想象力,增强他们的耐挫力,利用游戏的内在动机调动他们的积极性,开拓其创造性思维。
关键词Flash 推箱子益智游戏儿童思考Based on the FLASH of the fancy of the design and implementation of the game ——with pushed box game for exampleAbstract With computer technology, Internet technology and the rapid development of multimedia technology, a variety of games have mushroomed across the network as if every corner.However, some games in the entertainment, but also inevitably produced some negative effects, such as some fight scenes full of bloody fighting game will have serious physical and mental health of children adversely affected.There are some young children are chronically addicted to those who need a lot of time and energy consuming online game, which delayed their studies and harming life."Puzzle game" by definition is "conducive to intellectual development of the game", in order to play the role of computer education, we can use it to guide the children in the green game.Flash and the puzzle is better at the game, as opposed to the fast-paced action games, puzzle games to play together is characterized by slow, more casual, the main players in some aspects of training intelligence and response capabilities.This paper introduces ActionScript Flash and related software, these two features, and how to use Flash8.0 and development of children's puzzle game ActionScript2.0 the detailed process, but also explains how to design and implement specific process of this system details, and ultimately to develop a child can develop independent thinking and problem-solving puzzle game.I have made Sokoban game is a very classic puzzle game, designed to train children's logical thinking.Game scene is generally set the scene in the narrow space, the requirements placed in the box to the specified location.This requires players to smart use of limited space and access, reasonable arrangements for the location and movement order of boxes is possible to complete the task.The purpose of this game is to stimulate children's imagination, increase their frustration and force, using the game's intrinsic motivation to mobilize their enthusiasm to open up their creative thinking.Keywords Flash Sokoban puzzle game Children Thinking目录引言 (5)第一章绪论 (7)1.1基于FLASH的儿童益智类游戏的设计与实现——以推箱子游戏为例的系统开发.. 7 1.2儿童益智游戏的设计理念 (7)1.3游戏的主要面向对象——儿童 (8)1.3.1 本文对儿童的界定 (8)1.3.2 儿童心理年龄特征和智力发展状况 (8)1.4设计工具及脚本语言简介 (9)1.4.1 Flash 8.0新功能简介 (9)1.4.2 ActionScript简介 (11)第二章FLASH益智游戏的开发及可行性分析 (13)2.1益智类游戏的开发背景 (13)2.2可行性分析 (13)2.2.1 需求分析 (13)2.2.2设计分析 (14)2.2.3技术分析 (14)第三章推箱子游戏的游戏设计 (16)3.1游戏设计流程 (16)3.2游戏设计内容 (17)3.2.1各种元件的设计与制作 (17)3.2.2各种模块的主要功能 (18)3.2.2修正并定型 (19)第四章推箱子游戏的游戏制作 (20)4.1游戏素材的准备 (20)4.1.1 声音素材的准备 (20)4.1.2 元件素材的准备 (20)4.2游戏关卡的显示与设置 (25)4.2.1 显示游戏关卡的动态文本 (25)4.2.2 各关卡界面的设置 (25)4.3游戏的实现与主要代码的添加 (26)4.4推箱子游戏的发布 (32)结论 (33)致谢 (34)参考文献 (35)引言一、基于FLASH的儿童益智类游戏的设计与实现——以推箱子游戏为例系统开发的背景F lash游戏在游戏形式上的表现与传统游戏基本无异,但主要生存于网络之上,因为它的体积小、传播快、画面美观,所以大有取代传统web网游的趋势,现在国内外用Flash 制作无端网游已经成为一种趋势,只要浏览器安装了ADOBE的Flash player,就可以玩所有的Flash游戏了,这比传统的web网游进步许多。
C++实现推箱子游戏源代码
#define qiang 1#define ren 2#define xiangzi 3#define jia 6#define men 8#define space 9int map[13][17] = {0};int fuben[13][17];int num_guan; //现在的关数int num_xiangzi; //箱子的个数int move_num = 0; //人行走的次数int push_num = 0; //人推箱子的次数int people[2]; //M[0] 是人所在位置的横坐标M[1]是人所在位置的纵坐标int door[2]; //门所在的坐标int tem = 0;int cc;void play();void chushi2();void guan1();void guan2();void guan3();void guan4();void guan5();void guan6();void guan7();void guan8();void guan9();void guan10();void guan11();void guan12();void guan13();void guan14();void dayin();int control();int finish();/****************************************************** ****主方法******************************************************* ******************/int main(){void jiemian();void shuoming();void xuanguan();void chushi(int nn);void chushi1();int i;char c;chushi1();for(i = 0;i<=999;i++){jiemian();c = getche();if(c == '1')play();else if(c == '2')xuanguan();else if(c == '3')shuoming();else if(c == '4')break;else system("cls");}}/*************************游戏主界面******************************/void jiemian(){printf("\n\n\n\n");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY | FOREGROUND_BLUE);printf(" ╭╮■■□□◆◆◆◆◆◆◆◆\n");printf(" ││■■□□□□□□□□◆ \n");printf(" ╭─┘└╮■■■■■□■□■◆◆ \n");printf(" ╰─┐┌■■■□┏━━━┓◆◆ \n");printf(" ││■■■■□□□□┃┏━┓┃◆◆ \n");printf(" ╭─┘└╮■■□┃┏━┓┃┏━━━━◆━━┓\n");printf(" ╰─┐┌╯■■■■□□┃┏━┓┃┗━━━━◆━━┛\n");printf(" ╭─┘│■■□□□┃┗━┛┃◆ \n");printf(" ╰──╯■■■■■□□□┗━━━┛◆◆◆◆◆◆ \n\n");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf(" >>1 开始游戏\n\n");printf(" >>2 选择关卡\n\n");printf(" >>3 游戏帮助\n\n");printf(" >>4 退出游戏\n\n");}void chushi1(){int i,j;for(i = 0;i<=12;i++)for (j = 0;j<=16;j++)fuben[i][j] = 0;}void chushi2(){int i,j;move_num = 0;push_num=0;for(i = 0;i<=12;i++)for(j = 0;j<=16;j++){map[i][j] = 0;fuben[i][j] = 0;}}/*************************游戏规则及说明******************************/void shuoming(){int i;char c;for(i = 0;i<=999;i++){system("cls");LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf("\t\t\t╭───────────╮\n");printf("\t\t\t│游戏规则及说明│\n");printf("\t\t\t╰───────────╯\n\n ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),BACKGROUND_INTENSITY|FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN |BACKGROUND_BLUE|FOREGROUND_RED|FOREGROUND_RED);printf("囧");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf(" ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf("别看了,这就是你了,还挺cool的吧,嘿嘿\n\n\n");LE),FOREGROUND_INTENSITY | FOREGROUND_INTENSITY);printf(" █ ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf("这个是墙,放心,不是豆腐渣工程,要不你可以去撞撞看,\n");printf(" 你会懂得......\n\n\n");printf(" ■ ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf("这个是箱子,就是要你去推的那个,不要试图一下推两个箱\n");printf(" 子,更不要想推着箱子把墙撞开,没用的...不要沮丧,再免\n");printf(" 费给你一句忠告,要是把箱子推到了死角,呵呵,直接下一\n");printf(" 关吧\n\n\n");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_RED);printf(" ★ ");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HAND LE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);printf("这里就是箱子们的最终归宿了,箱子要是回不到家,哼哼,\n");printf(" 你自己掂量着办吧。
flash推箱子
if ((b3x == mx) && (b3y == my)) {
box1_y = getProperty(box1, _y);
box2_x = getProperty(box2, _x);
box2_y = getProperty(box2, _y);
box3_x = getProperty(box3, _x);
box3_y = getProperty(box3, _y);好,至此大功告成,剩下的就是添加四个按钮,用来监测按下“上、下、左、右”时根据不同状态做出判断、移动就OK了。
}
if ((b3x == mx) && (b3y == my)) {
setProperty("box3", _x , getProperty(box3, _x) + 30);
}
} else if (a[mx + 1][my] == "4") {
if (a[mx + 2][my] == "0") {
a[mx + 1][my] = "2";
b3x = b3x + 1;
}
onit = onit + 1;
step = step + 1;
if ((b1x == mx) && (b1y == my)) {
setProperty("box1", _x , getProperty(box1, _x) + 30);
a[mx + 1][my] = "0";
a[mx + 2][my] = "4";
推箱子游戏设计与实现教案
SMART CREATE
推箱子游戏设计与实现教案
01
推箱子游戏简介与历史
推箱子游戏的定义与起源
01 推箱子游戏是一种益智游戏
• 玩家需要通过移动箱子到指定位置来完成关卡 • 游戏目标是通过最少的移动次数来完成任务
02 起源可以追溯到20世纪80年代
• 最初的推箱子游戏是在计算机上实现的 • 随着时间的推移,游戏变得越来越流行,出现了各种版 本和变体
推箱子游戏的创新与发展方向
创新:推箱子游戏的新元素和新玩法
• 可以尝试将推箱子游戏与其他类型的游戏相结合,如角色扮演、策略等 • 还可以尝试引入虚拟现实、增强现实等新技术,提高游戏的沉浸感
发展方向:推箱子游戏的市场趋势和发展潜力
• 可以继续开发更多具有挑战性的关卡和变体 • 还可以将推箱子游戏推向移动设备、游戏机等平台,扩大游戏的市场范围
推箱子游戏的教学方法与案例
教学方法:如何教授推箱子游戏
• 可以通过讲解、示范等方式进行教学 • 还可以通过实践、练习等方式提高玩家的水平
案例:推箱子游戏的教学实例
• 可以提供一些简单的关卡,让玩家熟悉游戏的基本操作 • 还可以提供一些具有挑战性的关卡,让玩家提高自己的 游戏水平
推箱子游戏的玩家反馈与改进
玩家反馈:玩家对推箱子游戏的评价和建议
• 可以通过社交媒体、游戏论坛等渠道收集玩家的反馈 • 还可以通过问卷调查、用户测试等方式了解玩家的需求
改进:根据玩家反馈对推箱子游戏进行优化和改进
• 可以对游戏的难度、平衡性等进行调整 • 还可以对游戏的界面、交互等进行优化,提高游戏的可玩性
06
推箱子游戏的未来发展与挑战
推箱子游戏的设计要素与原则
13-3 Flash AS3实现推箱子推箱子
置好的箱子。修改相关位置格子的状态值。 (4)P1 处为放到目的地的箱子,P2 处为通道; 如果工人前方 P1 处为放到目的地的箱子,P2 处为通道;工人可以进到 P1 方格;P2 方
格状态为箱子。修改相关位置格子的状态值。 (5)P1 处为放到目的地的箱子,P2 处为目的地; 如果工人前方 P1 处为放到目的地的箱子,P2 处为目的地;工人可以进到 P1 方格;P2
3. 设计人物动作影片剪辑元件 同理创建人物动作块影片剪辑元件。选择菜单“插入”→“新建元件”。在新弹出的“新 建元件”窗口中,将元件名称设置为“人物”,将元件类型设置为“影片剪辑”,并设置其对 应的链接类为“Man”,单击“确定”按钮后,Flash 界面将转变为“地图块”元件的编辑区。 选择菜单“文件”→“导入”→“导入到舞台”,将以下素材文件导入到“人物”元件 的编辑界面。其中第 1 帧为 6.gif(向左的人),第 2 帧为 7.gif(向右的人),第 3 帧为 8.gif (向上的人),第 4 帧为 9.gif(向下的人)。
方格状态为放置好的箱子。修改相关位置格子的状态值。 综合前面的分析,可以设计出整个游戏的实现流程。
3. 游戏设计的步骤
3.1 创建 Flash 文件 1. 创建 Flash 文件 打开 Flash CS5 软件后,选择“文件”→“新建”选项,系统将弹出“新建文档”窗口。 在窗口中选择“ActionScript 3.0”选项。在属性窗口设置文档类为 Box。 2. 设计地图单元块影片剪辑元件 选择菜单“插入”→“新建元件”。在新弹出的“新建元件”窗口中,将元件名称设置 为“地图块”,将元件类型设置为“影片剪辑”,并设置其对应的链接类为“MapCell”,单击 “确定”按钮后,Flash 界面将转变为“地图块”元件的编辑区。 选择菜单“文件”→“导入”→“导入到舞台”,将以下素材文件导入到“地图块”元 件的编辑界面。其中第1帧为0.gif(空地),第2帧为1.gif(墙),第3帧为2.gif(通道),第4 帧为3.gif(在目的地上的箱子),第5帧为4.gif(目的地),第6帧为5.gif(箱子)。
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);}}。
推箱子游戏设计与实现
四川师范大学成都学院本科毕业设计推箱子游戏设计与实现学生姓名张起明学号**********所在系通信工程系专业名称通信工程班级2012级宽带一班指导教师陆园四川师范大学成都学院二○一六年五月推箱子游戏的设计与实现前言于如今竞争激烈的快节奏时代中,人们的生活水平越来越繁忙,因为此,愈来愈多的人感到内心的空虚与压力带来的烦躁,这些也带给人们许许多多心理上和身体上的困惑。
所以如何缓解当代人们的生活压力,已成为人们的共同夙愿。
这一次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于Eclipses编译器,开发出了这样一款适合用于休闲的小游戏,在放松的同时也给忙碌的人们打开另一个思考的空间。
这一款基于JAVA开发的推箱子主要分为初始化、画图、移动小人、移动箱子以及功能控制共五个模块。
玩家可以通过控制游戏中的小人的移动来实现推动箱子,同时需要避开障碍物和死角方能将箱子推放到正确位置从而过关。
每关的难易程度各不相同,不仅可以供人们用以娱乐,还有助于开发智力,提高人们思考问题与想象的能力,改善人们的思维方式,拓展思维。
关键词:JAVA 解压推箱子游戏四川师范大学成都学院本科毕业设计AbstractIn 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目录前言 (II)Abstract (III)1.可行性研究 (3)1.1设计目的 (3)1.2可行性研究前提 (3)1.3可行性分析 (3)1.4结论意见 (4)2.需求分析 (4)2.1引言 (4)2.2游戏需求 (5)2.3软硬件需求 (5)硬件环境需求: (5)软件环境: (5)2.4接口控制 (5)2.5方案论证 (6)2.5.1.C++语言的优点 (6)2.5.2.Java语言的优点 (6)2.5.3.方案选择 (8)3.概要设计 (9)3.1游戏设计分析 (9)3.3.1.地图文件的引用 (9)3.3.2.程序运逻辑 (9)3.3.3.绘图 (9)3.3.4.显示平台 (10)3.2 注意事项 (10)3.3 游戏流程图 (10)4.详细设计 (11)4.1游戏总体结构与代码 (11)结论 (28)参考文献 (29)致谢..................................................................................................... 错误!未定义书签。
推箱子游戏设计
摘要推箱子游戏是一款很有趣味的游戏,气开发过程有一定的技巧和方法,其中涉及到软件中断,二维数组,键盘操作以及图形化函数等方面的知识。
本游戏的开发者需要基本掌握显示器中断寄存器的设置。
二维数组及结构体的定义,键盘上键值的获取,方式下光标的显示各定位,以及部分图形函数的使用。
关键字:推箱子过程开发前言推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带有这种游戏。
它既能锻炼思维的严密性,又有很多乐趣,我个人也比较喜欢玩这个游戏,因此,我就借这个机会将这个推箱子游戏用汇编语言实现出来,当然,我也借鉴了前人的一些技巧经验,由于时间仓促和本人水平有限,此游戏的制作显得很粗燥,希望老师能够谅解,我以后将会再接再厉。
目录摘要 ....................................................................................................................... 一系统分析............................................................................................................1.1推箱子游戏具有的功能............................................................................ 二系统总体设计....................................................................................................2.1功能模块的设计........................................................................................ 三详细设计..........................................................................................................3.1程序结构设计...........................................................................................3.2出错处理设计............................................................................................3.3推箱子游戏的主界面设计........................................................................3.4推箱子游戏菜单设计................................................................................3.5游戏关口选择的设计................................................................................3.6游戏帮助对话框的实现............................................................................ 四系统测试............................................................................................................4.1主菜单和界面显示功能的测试................................................................4.2键盘的操作和功能测试............................................................................4.3箱子放置到指定位置时变色显示功能的测试演示................................4.4游戏是否通关判断功能的测试演示........................................................4.5隐藏炸弹和移动炸弹的功能测试演示.................................................... 五软件使用说明书................................................................................................5.1操作说明:................................................................................................5.2特殊说明.................................................................................................... 六设计总结............................................................................................................参考文献: .........................................................................................................致谢................................................................................................................附录..................................................................................................................计算机科学与技术专业(11级)汇编语言实训课程设计任务书题目:推箱子游戏程序班级:11计算机科学与技术1班学生姓名:任元元学号:11730117题目类型:软件工程(R)指导教师:刘树群一.题目简介通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
推箱子FLASH小游戏的设计与实现(含flash源文件)
推箱子FLASH小游戏的设计与实现(含flash源文件)(11500字) 摘要:随着现代科技的高速发展,短短几十年,电脑游戏得到迅猛发展。
电脑游戏充分利用多媒体网络优势,拓宽了传统游戏的界限,给人们带来全新的体验。
在这些游戏中,FLASH游戏以其好看的动画,绚丽...
<p>推箱子小游戏的设计与实现(含flash源文件)(字)<br />
摘要:随着现代科技的高速发展,短短几十年,电脑游戏得到迅猛发展。
电脑游戏充分利用多媒体网络优势,拓宽了传统游戏的界限,给人们带来全新的体验。
在这些游戏中,FLASH 游戏以其好看的动画,绚丽的声光效果,高度的通畅性,以及很强的可玩性,而受到广大青少年的青睐。
<br />
本文主要针对目前网络流行的FLASH小游戏——推箱子游戏的设计与实现进行了浅要分析,采用FLASH 8进行游戏设计以及解决设计中遇到的一系列问题,以各游戏模块为线索,详细说明了FLASH 8的基本操作和脚本编程,深入浅出地对FLASH基本功能和脚本编程进行全面细致的讲解,涵盖了FLASH在开发过程中的一些基本技术,充分展示了FLASH的一些经典特色。
该游戏既能锻炼思维的严密性,又有很多乐趣。
<br />
关键词:结构;模块;流程;设计<br />
<br />
Design And Implementaion Of Sokokan Flash Game<br />
Abstract:With the rapid development of modern science and technology, only lasts for a few decades, computer games rapid development. Computer games make full use of multimedia network advantage, and widened the boundaries of traditional games, people brings a whole new experience. In these games, FLASH game with its nice animation, gorgeous effects of sound, high unobstructed sex, and strong can play sex, by the broad adolescent's favor. <span
class='Bpp898'></span> <br />
This paper mainly aiming at the network popular FLASH get-away drama -- pushed box game the design and implementation of the shallow analysis, using FLASH 8 games design and solve a series of problems encountered in the design, with each game module for clues, detail the FLASH 8 basic operation and scripting, explaining the basic function and scripts to FLASH on the thorough and careful programming explained that covers a FLASH in the process of developing the basic technology, displayed to the full FLASH for some of the classic characteristic. This game can exercise thinking of rigor, and lots of fun. <br />
Keywords: structure;modules;process;design <br />
<br />
游戏设计<br />
游戏设计的任务是:在游戏分析提出的游戏逻辑模型结构的基础上,科学合理的进行物理模型的设计。
具体的说,就是根据游戏逻辑模型提出的各项功能要求,结合实际的设计条件,详细的设计出游戏的处理流程和基本结构,并为游戏实施阶段的各项工作准备还全部必要的技术资料和有关文件。
游戏模型分为逻辑模型和物理模型。
逻辑模型主要确定系统做什么,而物理模型则主要解决这样做的问题,前者是游戏设计的任务。
经过游戏设计,设计人员应能为程序员提供完整、清楚的设计文档,并做出解释[17]。
<br />
3.1 游戏设计原则<br />
(1) 游戏性原则<br />
游戏作为统一整体而存在,因此,在游戏设计中,要从整个游戏的角度出发,游戏的代码要统一,设计规范要标准,传递语言要尽可能一致。
<br />
(2) 活性原则<br />
为保持游戏的长久生命力,要求系统具有较强的环境适应性。
为此,游戏应具有较好的开放性和结构的可变化性。
在游戏设计中,应尽量采用模块化结构,提高模块的独立性,以便于对模块的修改,提高游戏适应环境变化的能力。
<br />
(3) 可靠性原则<br />
可靠性既是评价游戏设计质量的一个重要指标,又是游戏设计的一个基本出发点。
只有设计出的游戏是安全可靠的,才能在实际运行中发挥出它应有的作用。
所以在系统设计中必须考虑到对各种不安全因素抵御能力的设计。
例如安全保密、检错、抗病毒能力和在出现意外情况后,游戏恢复能力的设计等。
<br />
(4) 经济性原则。
<br />
在满足游戏需求的前提下,尽可能的减少游戏的开销。
这里既要考虑到现实系统的费用,又要考虑到游戏实施后的费用[9]。
<br />
3.2 功能设计<br />
推箱子游戏出现在计算机中,最早起源于1994年中国台湾省李果兆开发的仓库世家,又名仓库番,箱子只可以推,不可以拉,而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。
推箱子游戏是一种老少皆宜的益智游戏。
该游戏主要是根据二维数组中的内容产生地图,控制主人公的移动来推动箱子。
其中根据二维数组中的内容产生地图,主要是通过判断语句和控制元件的帧跳转来实现的;控制主人公移动,主要是使用
“on(keyPress"<>")”语句来实现的。
该游戏只设置了五关作为示范,可以通过增加“tuku”数组中的元素来增加关卡。
每一关的难度区分比较明显,并且有最高纪录的存取功能。
另外,还可以根据需要添加各种功能按钮,从而制作出一个内容更加丰富,操作更加方便的推箱子游戏。
<p class='Bpp898'></p> <br />
3.3 结构设计<br />
“推箱子FLASH小游戏的设计与实现”可分为几个结构模块:界面设计模块、关数显示模块、推动箱子模块、游戏实现模块和数据录入模块。
按照结构化的系统设计方法,将整个系统分解成相对独立的若干模块,通过对模块的设计和模块之间关系的协调来实现整个软件系统的功能,从而得到游戏的功能模块结构图。
</p>
<br />
<br />
<br />
<br />
<p class='Bpp898'></p> <br /> <br />
<br />
<p><P></P>。