推箱子FLASH小游戏的设计与实现(含flash源文件)
- 格式:doc
- 大小:162.00 KB
- 文档页数:4
《推箱子问题的设计与实现》实验报告班级:计本四班学号: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要求.............................................................................. 错误!未指定书签。
/*实验要求: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语言编写的推箱子游戏源代码*//* 本游戏是字符模式的,请不要在中文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用于判断每一关是否已完成。
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 操作系统的微机系统。
基于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网游进步许多。
#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小游戏的设计与实现(含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>。