C语言推箱子源代码推箱子代码完善

C语言推箱子源代码推箱子代码完善
C语言推箱子源代码推箱子代码完善

#include

#include

#include

typedef struct MAP//地图

{

int wall[50][2];//墙

int box[9][2];//箱子

int des[9][2];//终点

int overlap[9][2];//箱子与终点的重叠位置

int all,now;//总箱子个数,到位箱子个数

int x,y;//起点

} MAP,*map;

//全局变量//

int U=1,D=2,L=3,R=4; //定义按键状态

//int jump;

int ofx=10,ofy=9; //定义xy偏移量

int player[2];//玩家位置

int nextp[2],nextb[2];//玩家下一步位置,箱子下一步位置MAP Pass[5];//关卡数组

map Group,p;//关卡数组指针,当前关卡指针

int level;//关卡等级

int status;//玩家状态

int boxc[9][2],overlapc[9][2];//箱子状态栈,重叠箱子状态栈int nowbox;//当前到位箱子个数

int reset;//是否重玩

//声明全部函数//

void Pos(int x,int y)//设置光标位置

{

COORD pos;

HANDLE hOutput;

pos.X=x;

pos.Y=y;

hOutput=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hOutput,pos);

system("color 3B");

}

void welcometogame()//开始界面

{

system("title 2017程序设计之推箱子");

Pos(28,3);

printf("欢迎来到推箱子!");

Pos(50,24);

printf(" 软件1603 刘刈16110572087\n");

Pos(27,9);

printf("用↑.↓.←.→控制人物的移动。");

Pos(27,10);

printf("按空格键重新开始此局。");

Pos(27,11);

printf("按ESC结束游戏。\n");

Pos(0,22);

system("pause");

if(GetAsyncKeyState(VK_ESCAPE))

{

system("cls");

Pos(34,14);

printf("欢迎下次再玩。");

Pos(25,20);

printf("请按任意键退出。");

getch();

exit(0);

}

system("cls");

}

void inputmap(int a[][2])//创建地图数据

{

int i,k;

p->x=a[0][0];

p->y=a[0][1];//玩家坐标

p->all=a[1][0];

p->now=a[1][1];//箱子状态

for(k=0,i=2; i<2+p->now; i++,k++) //输入重叠箱子信息{

p->overlap[k][0]=a[i][0];

p->overlap[k][1]=a[i][1];

}

for(k=0; i<2+p->now+p->all; i++,k++) //输入终点信息

{

p->des[k][0]=a[i][0];

p->des[k][1]=a[i][1];

}

for(k=0; i<2+p->now+2*p->all; i++,k++) //输入箱子信息{

p->box[k][0]=a[i][0];

p->box[k][1]=a[i][1];

}

for(k=0; a[i][0]!=666; i++,k++) //输入墙的信息

{

p->wall[k][0]=a[i][0];

p->wall[k][1]=a[i][1];

}

}

void initgame()//初始化游戏

{

//[0][0],[0][1]是玩家起始位置,[1][0],[1][1]是箱子个数和到位个数,//之后是重叠箱子位置,终点位置,箱子位置,墙位置

int a0[50][2]= {{4,4},{4,0},{1,4},{3,1},{4,6},{6,3},{3,3},{3,4},{4,5},{5,3}, {0,3},{0,4},{0,5},{1,3},{1,5},{2,0},{2,1},{2,2},{2,3},{2,5},

{3,0},{3,5},{3,6},{3,7},{4,0},{4,1},{4,2},{4,7},

{5,2},{5,4},{5,5},{5,6},{5,7},{6,2},{6,4},{7,2},{7,3},{7,4},{666,666} },

a1[50][2]= {{1,1},{3,0},{7,3},{7,4},{7,5},{2,2},{2,3},{3,2},

{0,0},{0,1},{0,2},{0,3},{0,4},{1,0},{1,4},{1,5},{1,6},{1,7},{1,8},

{2,0},{2,4},{2,5},{2,8},{3,0},{3,8},{4,0},{4,1},{4,2},{4,3},{4,4},{4,8},

{5,4},{5,6},{5,7},{5,8},{6,2},{6,3},{6,4},{6,7},{7,2},{7,7},

{8,2},{8,3},{8,4},{8,5},{8,6},{8,7},{666,666}

},

a2[50][2]= {{2,3},{4,0},{2,4},{2,5},{3,4},{3,5},{2,2},{4,3},{6,4},{7,3}, {0,2},{0,3},{0,4},{0,5},{1,0},{1,1},{1,2},{1,5},{1,6},{2,0},{2,6},

{3,0},{3,2},{3,6},{4,0},{4,2},{4,4},{4,5},{4,6},{5,0},{5,2},{5,6},

{6,0},{6,6},{7,0},{7,1},{7,6},{8,1},{8,4},{8,5},{8,6},

{9,1},{9,2},{9,3},{9,4},{666,666}

},

a3[50][2]= {{1,2},{5,1},{3,6},{1,5},{1,6},{2,6},{3,6},{4,6},

{2,2},{2,3},{2,5},{3,4},{3,6},{0,1,},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},

{1,0},{1,1},{1,3},{1,4},{1,7},{2,0},{2,7},{3,0},{3,7},

{4,0},{4,1},{4,2},{4,3},{4,7},{5,3},{5,4},{5,5},{5,6},{5,7},{666,666} };

Group=Pass;

p=Group+0;

inputmap(a0);

p=Group+1;

inputmap(a1);

p=Group+2;

inputmap(a2);

p=Group+3;

inputmap(a3);

}

void printfoverlap(int b[9][2])//打印重叠箱子位置

{

int i;

for(i=0; i<9; i++)

if(b[i][0]==0&&b[i][1]==0)

continue;

Pos(2*(b[i][0]+ofx),b[i][1]+ofy);

printf("66");

}

}

void loadmap()//加载地图

{

int i;

Pos(2*(p->wall[0][0]+ofx),p->wall[0][1]+ofy);

printf("■");

for(i=1; p->wall[i][0]!=0 || p->wall[i][1]!=0; i++) //打印墙

{

Pos(2*(p->wall[i][0]+ofx),p->wall[i][1]+ofy);

printf("■");

}

for(i=0; p->des[i][0]!=0 || p->des[i][1]!=0; i++) //打印终点

{

Pos(2*(p->des[i][0]+ofx),p->des[i][1]+ofy);

printf("×");

}

for(i=0; p->box[i][0]!=0 || p->box[i][1]!=0; i++) //打印箱子

{

Pos(2*(p->box[i][0]+ofx),p->box[i][1]+ofy);

printf("◇");

}

printfoverlap(p->overlap);//打印重叠箱子位置

Pos(2*(p->x+ofx),p->y+ofy);//打印玩家位置

printf("★");

Pos(79,29);

}

void copybox(int copy[9][2],int b[9][2])//复制箱子信息

{

int i;

for(i=0; i<9; i++)

{

copy[i][0]=b[i][0];

copy[i][1]=b[i][1];

}

}

void trans(int p[2],int q[2])//状态传递,接收到玩家状态之后进行坐标改变的存储{

if(status==U)

p[0]=q[0];

p[1]=q[1]-1;

}

else if(status==D)

{

p[0]=q[0];

p[1]=q[1]+1;

}

else if(status==L)

{

p[0]=q[0]-1;

p[1]=q[1];

}

else if(status==R)

{

p[0]=q[0]+1;

p[1]=q[1];

}

}

void move()//玩家移动

{

int i,j,k,con;

//i用于遍历,j保存要移动的箱子编号,k标记重叠箱子

//con:0下一步有墙重合,1下一步没有墙,2下一步没有墙没有箱子

//,3下一步有箱子,4箱子下一步没有墙,5箱子下一步有墙

//,6箱子下一步没有墙没有箱子,7箱子下一步有其他箱子

if(status!=0)//status不等于0执行移动

{

trans(nextp,player);//更新下一步

for(i=1,con=1; p->wall[i][0]!=0||p->wall[i][1]!=0; i++) //判断玩家下一步是否与墙重合

{

if(p->wall[i][0]==nextp[0]&&p->wall[i][1]==nextp[1])

{

con=0;//重合使con为0

break;

}

}

if(con==1)//1下一步没有墙

{

for(i=0,con=2; boxc[i][0]!=0||boxc[i][1]!=0; i++) //判断下一步是否有箱子

{

if(boxc[i][0]==nextp[0]&&boxc[i][1]==nextp[1])

{

con=3;//下一步有箱子使con为3

j=i;//保存要移动的箱子

break;

}

}

if(con==3)//3下一步有箱子

{

trans(nextb,nextp);//更新盒子下一步

for(i=1,con=4; p->wall[i][0]!=0||p->wall[i][1]!=0; i++) //判断箱子下一步是否与墙重合

{

if(p->wall[i][0]==nextb[0]&&p->wall[i][1]==nextb[1])

{

con=5;//箱子下一步与墙重合使con为5

break;

}

}

if(con==4)//4箱子下一步没有墙

{

for(i=0,con=6; boxc[i][0]!=0||boxc[i][1]!=0; i++) //判断箱子下一步是否有其他箱子

{

if(boxc[i][0]==nextb[0]&&boxc[i][1]==nextb[1])

{

con=7;//箱子下一步有其他箱子使con为7

break;

}

}

if(con==6)//6箱子下一步没有墙并且也没有其他箱子

{

Pos(2*(nextb[0]+ofx),nextb[1]+ofy);

printf("◇");

Pos(2*(nextp[0]+ofx),nextp[1]+ofy);

printf("★");

Pos(2*(player[0]+ofx),player[1]+ofy);

printf(" ");

for(i=0; p->des[i][0]!=0||p->des[i][1]!=0; i++) //当前玩家位置是否有终点标记

{

if(p->des[i][0]==player[0]&&p->des[i][1]==player[1])

{

Pos(2*(player[0]+ofx),player[1]+ofy);

printf("×");

break;

}

}

for(i=0; p->des[i][0]!=0||p->des[i][1]; i++) //判断要移动的箱子是否在终点上

{

if(p->des[i][0]==boxc[j][0]&&p->des[i][1]==boxc[j][1])

{

nowbox--;//当前到位的箱子数减一

for(k=0; k<9; k++) //从箱子重叠表中删除离开终点的箱子

{

if(overlapc[k][0]==p->des[i][0]&&overlapc[k][1]==p->des[i][1])

{

overlapc[k][0]=0;

overlapc[k][1]=0;

break;

}

}

break;

}

}

for(i=0; p->des[i][0]!=0||p->des[i][1]; i++) //判断下一个箱子是否在终点上

{

if(p->des[i][0]==nextb[0]&&p->des[i][1]==nextb[1])

{

nowbox++;//当前到位的箱子数减加一

for(k=0; k<9; k++) //从箱子重叠表中加入移入终点的箱子

{

if(overlapc[k][0]==0&&overlapc[k][1]==0)

{

overlapc[k][0]=p->des[i][0];

overlapc[k][1]=p->des[i][1];

break;

}

}

break;

}

}

printfoverlap(overlapc);

Pos(79,29);

boxc[j][0]=nextb[0];

boxc[j][1]=nextb[1];

player[0]=nextp[0];

player[1]=nextp[1];

}

}

}

else if(con==2)//2下一步没有墙没有箱子

{

Pos(2*(nextp[0]+ofx),nextp[1]+ofy);

printf("★");

Pos(2*(player[0]+ofx),player[1]+ofy);

printf(" ");

for(i=0; p->des[i][0]!=0||p->des[i][1]!=0; i++) //当前玩家位置是否有终点标记

{

if(p->des[i][0]==player[0]&&p->des[i][1]==player[1])

{

Pos(2*(player[0]+ofx),player[1]+ofy);

printf("×");

break;

}

}

Pos(79,29);

player[0]=nextp[0];

player[1]=nextp[1];

}

}

status=0;

}

}

void gamecircle()//控制游戏,根据当前按键保存玩家状态

{

copybox(boxc,p->box);

copybox(overlapc,p->overlap);

player[0]=p->x;

player[1]=p->y;

nowbox=p->now;//还原游戏初始状态

while(1)

{

Sleep(80);

if(GetAsyncKeyState(VK_ESCAPE))

{

system("cls");

printf("欢迎下次再玩。");

Sleep(800);

exit(0);

}

if(GetAsyncKeyState(VK_SPACE))

{

reset=1;

break;

}

else if(GetAsyncKeyState(VK_UP))

{

status=U;

}

else if(GetAsyncKeyState(VK_DOWN))

{

status=D;

}

else if(GetAsyncKeyState(VK_LEFT))

{

status=L;

}

else if(GetAsyncKeyState(VK_RIGHT))

{

status=R;

}

if(nowbox==p->all)//完成此局

break;

move();

}

}

void startgame()//开始游戏

{

while(1)

{

system("cls");

Pos(25,5);

printf("第%d关",level+1);

Pos(40,20);

printf("按空格键重新开始此关游戏。");

Pos(40,21);

printf("按ESC键结束游戏。");

loadmap();

getch(); //防止第一次按键对游戏的影响

if(reset==0)//reset为0不重玩

break;

else if(reset==1)//reset为1重玩

reset=0;

// if(jump==0)

// break;

// else if(jump==1)

// jump=0;

}

Sleep(300);

}

int main()

{

system("mode con cols=80 lines=25"); //控制台宽度80,高度25 welcometogame(); //欢迎界面

initgame(); //初始化地图信息,创建关卡地图

for(level=0; level<4; level++) //开始游戏

{

p=Group+level;

startgame();

}

system("cls");

Pos(32,14);

printf("您已通关!!\n");

Pos(0,20);

system("pause");

}

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;

推箱子游戏报告书

推箱子游戏设计报告书 一、项目背景 本实训要求对“推箱子游戏”进行分析、设计。 本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。同时,本实训中了解图形界面设计基本技术。 通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。 二、设计目的 本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用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)设计原则,界面直观、对用户透明。用户接触软件后对界面上对应的功能一目了然、不需要多少培训就可以方便地使用本应用系统。

基于VC++的推箱子游戏设计与实现

本科毕业设计(论文) 基于VC++的推箱子游戏设计与实现 学院自动化学院 专业电子信息科学与技术 年级班别2008级(2)班 学号3108001166 学生姓名吕文财 指导教师 ________张学习 ___ __ 2012年6月

基于 VC++ 的推箱子游戏的设计与实现 吕文财 自动化学院

摘要 近年来随着科技的飞速发展, Visual C++语言的应用正在不断深入。Visual C++语言是当今国际上非常流行的计算机高级编程语言之一,它是面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它更以自动编译功能和高级除错功能著称。因此,广泛受到编程人员青睐。不仅适合作为系统描述语言,也用来编写系统软件,还可以用来编写应用软件和设计游戏等。 本论文着重分析用Microsoft Visual C++语言实现一个较为简单的推箱子游戏,旨在介绍推箱子游戏的实现方法,并逐步介绍Microsoft Visual C++6.0图形编程的方法和技巧。本设计通过主界面对话框类、关口选择对话框类、帮助对话框类三大类以及键盘操作模块、游戏规则模块、地图文件读取模块、背景音乐播放模块、地图绘制模块,共五大模块构成。实现了任意关数选择、难度依次加大、游戏步数记录、背景音乐播放、游戏帮助、胜负判断等多个功能,采用图形函数的使用实现了一个完整的推箱子游戏界面,界面清晰可见。 关键词:推箱子,c++语言,模块,图形编程

推箱子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() 清空缓存 游戏过程设计 游戏中过程中,最为主要地方在于对地图矩阵,以及主角状态信息(包括位置、行走状态等)的维护,主角每行走一步,就更新一次地图信息和主角状态信息。另外一个比较重要的地方是游戏状态的保存方面。在该游戏中,使用栈结构保存主角每次行走的

使用C语言编写简单小游戏

纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e 时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude <> /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们. 让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧! 2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构: struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴,y轴的速度*/ }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: gotoxy, ;/*把光标移到指定的坐标*/ printf(" ");/*输出一个空格,把先前的字符擦去*/ 然后我们让物体按其速度运动: += ;/*水平方向按x轴的速度运动*/ += ;/*垂直方向按y轴的速度运动*/ 运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: gotoxy, ; printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/ 怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧! 3,交互的实现——让我们来控制笑脸运动 这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句: while (bioskey(1) == 0);/*等待按键*/ key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ 然后用switch语句来判断按键以及执行相关操作,如下: switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ … break; /*让物体向上运动,并退出switch*/

推箱子源代码

#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推箱子实验报告

Java设计报告 1.1设计背景: 经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的

完成任务。一想起这款小游戏,就想起了我的童年,它陪我们这一代度过了一段美好且愉快的时光。所以想到自己也写一个推箱子游戏,既可以享受过去的美好回忆,又可以锻炼自己的Java设计能力。 1.2设计目的: 综合运用在校期间所学到的理论知识和技能,并且结合课外参考资料,设计开发基于JA V A 的推箱子小游戏,让自己能够熟悉并熟练应用系统的开发过程,培养独立思考能力,检验学习成果和实际动手能力,以及提高工程实践能力,为今后的工作打下坚实的基础。 1.3游戏需求: 玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。 游戏功能需求如下所示: 游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。 游戏内容需求::小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。 键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。 显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。可以由玩家喜欢选择关卡进行游戏。 2.1游戏设计分析 从面向对象的观念出发,本程序可分为以下几个对象: 地图文件的引用小人与箱子的移动程序运算逻辑绘图显示平台 分析对象的技巧在于它的重复利用及维护效率。如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。 2.2.1.地图文件的引用 在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。程序通过读取地图文件中的数据来获取画面的布局安排。 地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。把这组数据保存到一个文件中,这个文件就是地图文件了。 2.2.2.程序运逻辑 程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。 2.2. 3.绘图

C语言推箱子小游戏程序

推箱子程序: #include #include #include #define U 1 #define D 2 #define L 3 #define R 4 //按键状态,U:上;D:下;L:左R:右 #define ofx 10 #define ofy 9 //x,y方向偏移量 typedef struct MAP //地图 { int wall[50][2]; //墙 int box[9][2]; //箱子 int des[9][2]; //终点 int overlap[9][2];//箱子与终点的重叠位置 int all,now; //总箱子个数,到位箱子个数 int x,y; //起点 }MAP,*map; //全局变量// int player[2]; //玩家位置 int nextp[2],nextb[2]; //玩家下一步位置,箱子下一步位置 MAP Pass[5]; //关卡数组 map Group,p; //关卡数组指针,当前关卡指针 int level; //关卡等级 int status; //玩家状态 int boxc[9][2],overlapc[9][2]; //箱子状态栈,重叠箱子状态栈 int nowbox; //当前到位箱子个数 int regame; //是否重玩 //声明全部函数// void Pos(int x,int y); //设置光标位置 void welcometogame(); //开始界面 void initgame(); //初始化游戏 void startgame(); //开始游戏 void copybox(int copy[9][2],int b[9][2]); //复制箱子信息 void loadmap(); //加载地图 void printfoverlap(int b[9][2]); //打印重叠箱子位置 void move(); //玩家移动 void trans(int p[2],int q[2]); //状态传递 void inputmap(int a[][2]); //输入地图数据 void gamecircle(); //控制游戏 int main() { system("mode con cols=80 lines=30"); //控制台宽度80,高度30

C语言编写小程序

教你如何使用C语言编写简单小游戏 编辑:匿名发布时间:2011年9月6日留言(0) 纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式.作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude/*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过.2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们.让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件conio.h.3,ASCII码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c",2)来输出一个笑脸.现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧!

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

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 :

推箱子--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类中集成了小人与箱子的移动规则,并且还包含了对键盘操作移动的响应方法。在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物动作会使系统更有效.通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动

c语言推箱子代码

#i n c l u d e<> #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");d秒\n\t\t\t ",b-a); getch();d秒\n",q-p); printf("\t\t\t\t*******回车重新选择*******\n\t\t\t\t"); getch();

} else { time(&o); if(z=='d') { return; } if(o-p>30) { loop1: system("cls");d秒\n",q-p); printf("\t\t\t\t*******回车重新选择*******\n\t\t\t\t"); getch(); } else { time(&o);

{ return; } if(o-p>30) { loop1: system("cls");d秒\n",q-p); printf("\t\t\t\t*******回车重新选择*******\n\t\t\t\t"); getch(); } else { time(&o); if(z=='d') { return; }

{ loop1: system("cls"); if(*t=='d'){}//遇到d返回 if(*t==75)//左键 { if(c[*x][*y-1]=='#'||c[*x][*y-1]==5&&c[*x][*y-2]==5 ||c[*x][*y-1]==5&&c[*x][*y-2]=='!'){}//遇到墙或推两个箱子else { if(c[*x][*y-1]=='!')//把箱子推出目的地 { if(c[*x][*y-2]!=0){} else { c[*x][*y]=0; *y-=1; c[*x][*y]=1;

一个C语言编写的推箱子游戏源代码 (1)

/* 一个C语言编写的推箱子游戏源代码*/ /* 本游戏是字符模式的,请不要在中文dos下运行。本游戏在TURBO C下调试通过*/ 程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。#include #include #include #include #include #include /* 定义二维数组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用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地坐标对应的状态都为“i”,即箱子在目的地,则表示已经过关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。 /* 箱子位置的数据结构*/ typedef struct boxs { int x,y; struct boxs *next; }boxs; /* 在特定的坐标上画墙壁并用数组记录状态的函数*/ void printwall(int x,int y) printwall()用于画墙传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。 { /*以黑色为背景画绿色墙,用小方块表示*/ putchxy(y-1,x-1,219,GREEN,BLACK);

java推箱子游戏源代码

第一个Java文件: import java.awt.Color; import java.awt.HeadlessException; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; 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; //设置图片大小 int imgSize = 48; public void setImgSize(int imgSize){ this.imgSize = imgSize; } public GameFrame(String title) throws HeadlessException { super(title); //构造方法中调用本类的其它方法 this.initContentPane(); } /** * 设置内容面板 */ void initContentPane() { zhuobu.setBackground(Color.red); zhuobu.setLayout(null); //调用父类的属性和方法 super.setContentPane(zhuobu);

java小游戏源代码

Java小游戏 第一个Java文件: import public class GameA_B { public static void main(String[] args) { Scanner reader=new Scanner; int area; "Game Start…………Please enter the area:(1-9)" + '\n'+"1,2,3 means easy"+'\n'+"4,5,6 means middle"+'\n'+ "7,8,9 means hard"+'\n'+"Please choose:"); a rea=(); s witch((area-1)/3) { c ase 0:"You choose easy! ");break; c ase 1:"You choose middle! ");break; c ase 2:"You choose hard! ");break; } "Good Luck!"); G ameProcess game1=new GameProcess(area); (); } } 第二个Java文件: import import public class GameProcess { int area,i,arrcount,right,midright,t; int base[]=new int[arrcount],userNum[]=new int[area],sysNum[]=new int[area]; Random random=new Random(); Scanner reader=new Scanner; GameProcess(int a) { area=a; arrcount=10; right=0; midright=0; t=0; base=new int[arrcount]; userNum=new int[area]; sysNum=new int[area]; for(int i=0;i

相关文档
最新文档