谁有java推箱子游戏源代码代码

网站已改版,请使用新地址访问:
tuixiangzi 这是一个我们都玩过的 小游戏,推箱子的源代码,有兴趣的朋友可以 Other Riddle games 其他智力
238万源代码下载-
&文件名称: tuixiangzi
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 644 KB
&&上传时间:
&&下载次数: 13
&&提 供 者:
&详细说明:这是一个我们都玩过的一个小游戏,推箱子的源代码,有兴趣的朋友可以-this is a little game for tuixiangzi,if you be interested it ,you can see the code
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&第4章 推箱子\skyblue_BoxMan\BoxMan.cpp&&............\..............\BoxMan.h&&............\..............\BoxManWnd.cpp&&............\..............\BoxManWnd.h&&............\..............\help.bmp&&............\..............\help1.bmp&&............\..............\HelpDlg.cpp&&............\..............\HelpDlg.h&&............\..............\MainFrm.cpp&&............\..............\MainFrm.h&&............\..............\&&............\..............\.bak&&............\..............\MissionLevelDlg.cpp&&............\..............\MissionLevelDlg.h&&............\..............\move.wav&&............\..............\push.wav&&............\..............\ReadMe.txt&&............\..............\resource.h&&............\..............\skyblue_BoxMan.aps&&............\..............\skyblue_BoxMan.clw&&............\..............\skyblue_BoxMan.cpp&&............\..............\skyblue_BoxMan.dsp&&............\..............\skyblue_BoxMan.dsw&&............\..............\skyblue_BoxMan.h&&............\..............\skyblue_BoxMan.ncb&&............\..............\skyblue_BoxMan.opt&&............\..............\skyblue_BoxMan.plg&&............\..............\skyblue_BoxMan.rc&&............\..............\skyblue_BoxManDoc.cpp&&............\..............\skyblue_BoxManDoc.h&&............\..............\skyblue_BoxManView.cpp&&............\..............\skyblue_BoxManView.h&&............\..............\StdAfx.cpp&&............\..............\StdAfx.h&&............\..............\victory.wav&&............\..............\res\skyblue_BoxMan.ico&&............\..............\...\skyblue_BoxMan.rc2&&............\..............\...\skyblue_BoxManDoc.ico&&............\..............\...\Toolbar.bmp&&............\..............\&&............\..............\.....\skyblue_BoxMan.exe&&............\..............\BoxMan_Editer\BoxMan_Edit.cpp&&............\..............\.............\BoxMan_Edit.h&&............\..............\.............\BoxMan_Editer.aps&&............\..............\.............\BoxMan_Editer.clw&&............\..............\.............\BoxMan_Editer.cpp&&............\..............\.............\BoxMan_Editer.dsp&&............\..............\.............\BoxMan_Editer.dsw&&............\..............\.............\BoxMan_Editer.h&&............\..............\.............\BoxMan_Editer.ncb&&............\..............\.............\BoxMan_Editer.opt&&............\..............\.............\BoxMan_Editer.plg&&............\..............\.............\BoxMan_Editer.rc&&............\..............\.............\BoxMan_EditerDoc.cpp&&............\..............\.............\BoxMan_EditerDoc.h&&............\..............\.............\BoxMan_EditerView.cpp&&............\..............\.............\BoxMan_EditerView.h&&............\..............\.............\Boxman_EditerWnd.cpp&&............\..............\.............\Boxman_EditerWnd.h&&............\..............\.............\LoadMapDlg.cpp&&............\..............\.............\LoadMapDlg.h&&............\..............\.............\MainFrm.cpp&&............\..............\.............\MainFrm.h&&............\..............\.............\&&............\..............\.............\.bak&&............\..............\.............\ReadMe.txt&&............\..............\.............\resource.h&&............\..............\.............\StdAfx.cpp&&............\..............\.............\StdAfx.h&&............\..............\.............\res\BoxMan_Editer.ico&&............\..............\.............\...\BoxMan_Editer.rc2&&............\..............\.............\...\BoxMan_EditerDoc.ico&&............\..............\.............\...\ico00001.ico&&............\..............\.............\...\ico00002.ico&&............\..............\.............\...\ico00003.ico&&............\..............\.............\...\ico00004.ico&&............\..............\.............\...\ico00005.ico&&............\..............\.............\...\idr_icon.ico&&............\..............\.............\Debug\BoxMan_Editer.exe&&............\..............\.............\.....\&&............\..............\.............\res&&............\..............\.............\Debug&&............\..............\res&&............\..............\Debug&&............\..............\BoxMan_Editer&&............\skyblue_BoxMan&&第4章 推箱子
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 这是一个brew开发的游戏。是推箱子游戏。用到了底层的菜单,并非使用控件。有多个事件响应的实例。
基于vc6.0的c语言推箱子设计代码源码23:09 提问
c语言实现推箱子游戏,求详细思路,谢谢
游戏说明:玩家通过键盘录入 w,s,a,d控制小人向不同方向移动,
其中w代表向上移动,s代表向下移动,a代表向左移动,d 代表向右移动,
当小人在箱子后面的时候可以推着箱子向前移动,当箱子移动到出口的位置,玩家胜利
地图如下:
##########
##########
说明: # 代表墙, O代表小人 ,' ' 代表路, X代表箱子
按赞数排序
推箱子游戏代码
二维数组描述游戏网格, 每个网格对应四种状态.
= 2 , O = 1
= 0 , X = 3 , 出口 = 4
w,s,a,d 当前小人位置为a[i][j],
以w键为例:
判断a[i+1][j]的值
如果是0or4, [i][j] = 0, a[++i][j] = 1, 刷新显示;
如果是3, a[i][j] = 0, 判断a[i+2][j]的值,
如果是4, a[++i][j] = 1, a[i+1][j] = 3, 胜利
如果是0, a[++i][j] = 1, a[i+1][j] = 3 , 刷新显示
推箱子其实关键就是碰撞判断,楼上的代码啊都不错
Word文档,非常牛逼详细的教程
其他相关推荐推箱子c++实现代码 - CSDN博客
推箱子c++实现代码
&p&c++  实验课的作业,话说这次算是我花的时间最长的实验课作业了,不过的确感觉自己对搜索的理解和编码能力提高了,作为一名初学者,我要学的东西还很多。。。&/p&&p&这次的实验是推箱子,自己YY了一个自动生成推箱子地图的算法,两重BFS,这大概也是我第一次把ACM的算法放到了实际应用中吧。下面上代码。。。。&/p&
void RandomMaze(int n);
class game
int WaitKey( double sec );
void SetPos( int x, int y );
typedef int S
typedef int ElemT
Status RandomMaze(int n,int m);
Status PrintMaze(int n) ;
int mazemap[20][20];
class Vehicle
Vehicle();
void show();
void LoadMap(const char *a);
#include &Windows.h&
#include &game.h&
#include &ctime&
#include &conio.h&
int game::WaitKey( double sec )
clock_t tickStart = clock();
clock_t tickEnd = tickStart + (clock_t)(sec * CLOCKS_PER_SEC);
while(!kbhit())
// time out
if( clock() &= tickEnd)
Sleep(sec / 100.0); // wait
return getch();
void game::SetPos( int x, int y )
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
COORD cursorPos = {x, y};
SetConsoleCursorPosition(hConsole, cursorPos);
#include &box.h&
#include &iostream&
#include &map.h&
#include &vehicle.h&
#include &ctime&
#include &Windows.h&
typedef int S
typedef int ElemT
#define OK
#define ERROR
#define TRUE
#define FALSE
#define OVERFLOW -2
Status map::RandomMaze(int n,int m)
int i,j,k;
srand(time(NULL));
for(i=0;i&n;i++)
mazemap[0][i]=mazemap[n-1][i]=1;
for(j=0;j&n;j++)
mazemap[j][0]=mazemap[j][n-1]=1;
for(i=1;i&n-1;i++)
for(j=1;j&n-1;j++)
k=rand()%6;
//随机生成整张的地图
mazemap[i][j]=1;
mazemap[i][j]=0;
for(i=1;i&=m;i++)
int rand_x=rand()%19;
int rand_y=rand()%19;
if(rand_x&=1&&rand_y&=1)
mazemap[rand_x][rand_y]=-1;
//随机生成箱子的位置
for(i=1;i&=m;i++)
int rand_x=rand()%19;
int rand_y=rand()%19;
if(rand_x&=1&&rand_y&=1)
mazemap[rand_x][rand_y]=-3;
//随机生成箱子的目标位置
mazemap[1][0]=mazemap[1][1]=0;//标记入口出口
return OK;
Status map::PrintMaze(int n)
//打印最后的足迹
//printf(&路径如下:\n&);
for(int i=0;i&n;i++)
for(int j=0;j&n;j++)
if(mazemap[i][j]==0)
//代表可以走的位置
if(mazemap[i][j]==1)
printf(&■&);
// 代表墙壁
if(mazemap[i][j]==-1||mazemap[i][j]==-4)
printf(&□&);
// 代表箱子
if(mazemap[i][j]==-2)
printf(&○&);
//代表推箱子的人
if(mazemap[i][j]==-3)
printf(&◎&);
//代表箱子的目标位置
if(mazemap[i][j]==5)
printf(&☆&);
printf(&\n&);
printf(&\n&);
return OK;
#include &box.h&
#include &map.h&
#include &vehicle.h&
#include &cstring&
#include &iostream&
Vehicle :: Vehicle ():x(0),y(0){};
Vehicle :: LoadMap(const char *a)
if(strcmp(a,&left&)==0)
if(strcmp(a,&right&)==0)
if(strcmp(a,&up&)==0)
if(strcmp(a,&down&)==0)
void Vehicle::show()
cout&&&&&&&x&&&,&&&y&&&&&&&
#pragma once
#include &cstdio&
#include &cstring&
#include &algorithm&
#include &conio.h&
#include &ctime&
#include &windows.h&
#include &iostream&
#include &stdlib.h&
#include &queue&
#include &vector&
#include &map.h&
#include &vehicle.h&
#include &box.h&
#include &game.h&
//#include &Clannad.h&
#define INF 1&&27
#define OK
#define ERROR
#define TRUE
#define FALSE
#define OVERFLOW -2
#define INIT_STACK_SIZE 100
#define INCREASESIZE
const int MAX_X = INF;
const int MAX_Y = INF;
const int MAX_N = 1000;
typedef int S
typedef int ElemT
typedef pair &int,int&P;
//bool used[MAX_X][MAX_Y];
Vehicle V;
int dir[4][3]={{0,1},{0,-1},{1,0},{-1,0}};
bool dfs_judge(int final_x,int final_y)
//上次用的dfs时间复杂度太高了。。。。所以换成了bfs
if(final_x==1&&final_y==0)
for(int i=0;i&=3;i++)
int xx=final_x+dir[i][0],yy=final_y+dir[i][1];
if(A.mazemap[xx][yy]!=1&&!used[xx][yy])
used[xx][yy]=1;
if(dfs_judge(xx,yy))
used[xx][yy]=0;
bool bfs_judge_bypeople(int final_x,int final_y)
//第一重bfs
memset (used,0,sizeof(used));
used[final_x][final_y]=
que.push(P(final_x,final_y));
//int cnt=0;
while(!que.empty())
P p=que.front();
que.pop();
if(p.first==1&&p.second==0)
for(int i=0;i&=3;i++)
int nx=p.first+dir[i][0],ny=p.second+dir[i][1];
if(A.mazemap[nx][ny]!=1&&!used[nx][ny])
que.push(P(nx,ny));
used[nx][ny]=
struct node
int first,second,
//用于储存坐标值和上一次的方向
node(int a,int b,int c) { first=a;second=b;direction=c;}
bool bfs_judge_bycase(int m)
//第二重bfs
for(int i=1;i&=m;i++)
int rand_x=rand()%19,rand_y=rand()%19,rand_c=rand()%19,rand_d=rand()%19;
if(rand_x==rand_c&&rand_y==rand_d)
if(rand_x&1&&rand_y&1&&bfs_judge_bypeople(rand_x,rand_y)&&rand_c&1&&rand_d&1&&A.mazemap[rand_c][rand_d]==0)
A.mazemap[rand_x][rand_y]=-1;
//随机生成箱子的位置
A.mazemap[rand_c][rand_d]=-3;
//随机生成箱子的目标位置
//构建一个箱子和目标位置的组合
memset(used,0,sizeof(used));
used[rand_c][rand_d]=
queue&node&
que.push(node(rand_c,rand_d,0));
//逆推。。。。。
bool judge=
while(!que.empty())
node p = que.front();
que.pop();
if(A.mazemap[p.first][p.second]==-1)
//A.PrintMaze(20);
if(!bfs_judge_bypeople(p.first+dir[p.direction][0],p.second+dir[p.direction][1]))
A.mazemap[p.first][p.second]=-4;
for(int j=0;j&=3;j++)
int nx=p.first+dir[j][0],ny=p.second+dir[j][1];
if((A.mazemap[nx][ny]==-1||A.mazemap[nx][ny]==0)&&!used[nx][ny]&&A.mazemap[nx+dir[j][0]][ny+dir[j][1]]==0)
que.push(node(nx,ny,j));
//同时考虑推箱子时候人的位置
used[nx][ny]=
if(judge==false)
A.mazemap[rand_x][rand_y]=0;
A.mazemap[rand_c][rand_d]=0;
void delete_by_position(int n)
for(int i=0;i&n;i++)
for(int j=0;j&n;j++)
if(A.mazemap[i][j]==-1||A.mazemap[i][j]==-4||A.mazemap[i][j]==-2)
C.SetPos((j)*2,i);
void create_by_position(int n)
for(int i=0;i&n;i++)
for(int j=0;j&n;j++)
if(A.mazemap[i][j]==-1||A.mazemap[i][j]==-4)
C.SetPos((j)*2,i);
printf(&□&);
// 代表箱子
if(A.mazemap[i][j]==-2)
C.SetPos((j)*2,i);
printf(&○&);
// 代表人的位置
//代表推箱子的人
if(A.mazemap[i][j]==5)
C.SetPos((j)*2,i);
printf(&☆&);
//代表箱子的目标位置已经成功
int main(void)
printf(&====请问要从上一关开始吗?==\n=需要输入1...不需要输入0======\n&);
int judge_
scanf(&%d&,&judge_bynumber);
int cnt=0;
if(judge_bynumber==1)
freopen(&hehe.in&,&r&,stdin);
C.SetPos(0,0);
for(int i=0;i&n;i++)
for(int j=0;j&n;j++)
scanf(&%d&,&A.mazemap[i][j]);
scanf(&%d&,&m);
scanf(&%d%d%d&,&V.x,&V.y,&cnt);
fclose(stdin);
printf(&=========请输入要的箱子数====\n&);
scanf(&%d&,&m);
printf(&=============地图规模为20*20======\n&);
//scanf(&%d&,&n);
printf(&=======请耐心等待地图生成======\n&);
printf(&=======地图生成如果太久请重试======\n&);
//memset(used,0,sizeof(used));
A.RandomMaze(n,m);
//生成迷宫地图
//B.RandomMaze(n);
//A.PrintMaze(n);
}while(!bfs_judge_bypeople(n-2,n-1));
//广度优先搜素以保证迷宫不被堵住 (上次的深搜太费时了。。。)
//A.PrintMaze(n);
//A.PrintMaze(n);
bfs_judge_bycase(m);
//采用了两重bfs。。。。保证迷宫一定可解。。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ。。QWQ
//A.PrintMaze(n);
A.mazemap[1][0]=-2;
C.SetPos(0,0);
A.PrintMaze(n);
//打印迷宫地图
printf(&\n==================迷宫.......==================&);
printf(&\n说明:■不能走的区域\t◇走不通的区域&);
printf(&\n
“空格”代表未到过的区域&);
printf(&\n
○代表您的所在位置&);
printf(&\n
□代表箱子的位置
printf(&\n
◎代表箱子的目标位置&);
printf(&\n
☆代表已经成功的目标位置&);
printf(&\n
按s键存档。。。。&);
printf(&把所有的箱子推到位就算您的胜利n(*≧▽≦*)n&);
printf(&\n============================================\n&);
if(cnt==m)
C.SetPos(0,n+1);
printf(&========您太厉害了n(*≧▽≦*)n=======\n&);
int k=C.WaitKey(10.0);
if(k==224||k==0)
if(k==115)
freopen(&hehe.in&,&w&,stdout);
for(int i=0;i&n;i++)
for(int j=0;j&n;j++)
printf(&%d &,A.mazemap[i][j]);
printf(&\n&);
printf(&%d %d %d %d&,m,V.x,V.y,cnt);
fclose(stdout);
C.SetPos(0,n+1);
//printf(&========存档成功!(*≧▽≦*)=======\n&);
if(k!=75&&k!=77&k!=72&&k!=80)
//printf(&%d&,k);
delete_by_position(n);
if(k==75&&A.mazemap[V.x][V.y-1]!=1)
if(A.mazemap[V.x][V.y-1]==-1||A.mazemap[V.x][V.y-1]==-4)
if(A.mazemap[V.x][V.y-2]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y-1]=-2;
A.mazemap[V.x][V.y-2]=-4;
V.LoadMap(&left&);
create_by_position(n);
C.SetPos(0,n+1);
//默默的重置了坐标。。。。只是为了输出。。。。
if(A.mazemap[V.x][V.y-2]==-3)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y-1]=-2;
A.mazemap[V.x][V.y-2]=5;
V.LoadMap(&left&);
create_by_position(n);
C.SetPos(0,n+1);
create_by_position(n);
C.SetPos(0,n+1);
else if(A.mazemap[V.x][V.y-1]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y-1]=-2;
V.LoadMap(&left&);
create_by_position(n);
C.SetPos(0,n+1);
//其实还有一种人踩到目标位置的情况。。。。懒了。。。。直接简化了。。。。
else if(k==77&&A.mazemap[V.x][V.y+1]!=1)
if(A.mazemap[V.x][V.y+1]==-1||A.mazemap[V.x][V.y+1]==-4)
if(A.mazemap[V.x][V.y+2]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y+1]=-2;
A.mazemap[V.x][V.y+2]=-4;
V.LoadMap(&right&);
create_by_position(n);
C.SetPos(0,n+1);
if(A.mazemap[V.x][V.y+2]==-3)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y+1]=-2;
A.mazemap[V.x][V.y+2]=5;
V.LoadMap(&right&);
create_by_position(n);
C.SetPos(0,n+1);
create_by_position(n);
C.SetPos(0,n+1);
else if(A.mazemap[V.x][V.y+1]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x][V.y+1]=-2;
V.LoadMap(&right&);
create_by_position(n);
C.SetPos(0,n+1);
else if(k==72&&A.mazemap[V.x-1][V.y]!=1)
if(A.mazemap[V.x-1][V.y]==-1||A.mazemap[V.x-1][V.y]==-4)
if(A.mazemap[V.x-2][V.y]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x-1][V.y]=-2;
A.mazemap[V.x-2][V.y]=-4;
V.LoadMap(&up&);
create_by_position(n);
C.SetPos(0,n+1);
//默默的重置了坐标。。。。只是为了输出。。。。
if(A.mazemap[V.x-2][V.y]==-3)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x-1][V.y]=-2;
A.mazemap[V.x-2][V.y]=5;
V.LoadMap(&up&);
create_by_position(n);
C.SetPos(0,n+1);
create_by_position(n);
C.SetPos(0,n+1);
else if(A.mazemap[V.x-1][V.y]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x-1][V.y]=-2;
V.LoadMap(&up&);
create_by_position(n);
C.SetPos(0,n+1);
else if(k==80&&A.mazemap[V.x+1][V.y]!=1)
if(A.mazemap[V.x+1][V.y]==-1||A.mazemap[V.x+1][V.y]==-4)
if(A.mazemap[V.x+2][V.y]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x+1][V.y]=-2;
A.mazemap[V.x+2][V.y]=-4;
V.LoadMap(&down&);
create_by_position(n);
C.SetPos(0,n+1);
if(A.mazemap[V.x+2][V.y]==-3)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x+1][V.y]=-2;
A.mazemap[V.x+2][V.y]=5;
V.LoadMap(&down&);
create_by_position(n);
C.SetPos(0,n+1);
create_by_position(n);
C.SetPos(0,n+1);
else if(A.mazemap[V.x+1][V.y]==0)
A.mazemap[V.x][V.y]=0;
A.mazemap[V.x+1][V.y]=-2;
V.LoadMap(&down&);
create_by_position(n);
C.SetPos(0,n+1);
create_by_position(n);
C.SetPos(0,n+1);
//SetPos((V.y)*2,V.x);
//printf(&○&);
//A.PrintMaze(n);
/*if(V.x==n-2&&V.y==n-1)
printf(&\n&);
//system(&pause&);
getchar();
getchar();
其实代码还是很丑的说。。。。
本文已收录于以下专栏:
相关文章推荐
linux 可运行推箱子游戏,只有一个箱子,地图固定,人可以到达目标地点并且离开后,目标地点不会被刷掉。...
用C++写的推箱子游戏2.2
推箱子游戏支持回滚,步数显示,回撤,穿墙,闯关,输入等操作。
含控制台上运行的代码。...
/question/next?pid=4111169&qid=76262&tid=7218208
大家一定玩过“推箱子”这个经典的游戏...
大家一定玩过“推箱子”这个经典的游戏。具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。...
大家一定玩过“推箱子”这个经典的游戏。具体规则就是在一个N*M的地图上,有1个玩家、1个箱子、1个目的地以及若干障碍,其余是空地。玩家可以往上下左右4个方向移动,但是不能移动出地图或者移动到障碍里去。...
Sokoban 推箱子 C++
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2017年6月 VC/MFC大版内专家分月排行榜第二2017年5月 VC/MFC大版内专家分月排行榜第二2017年1月 VC/MFC大版内专家分月排行榜第二2016年11月 VC/MFC大版内专家分月排行榜第二2016年4月 VC/MFC大版内专家分月排行榜第二2014年11月 VC/MFC大版内专家分月排行榜第二2014年1月 VC/MFC大版内专家分月排行榜第二2013年10月 VC/MFC大版内专家分月排行榜第二2013年9月 VC/MFC大版内专家分月排行榜第二2013年6月 VC/MFC大版内专家分月排行榜第二2013年4月 VC/MFC大版内专家分月排行榜第二2012年6月 VC/MFC大版内专家分月排行榜第二
2017年9月 VC/MFC大版内专家分月排行榜第三2017年8月 VC/MFC大版内专家分月排行榜第三2017年4月 VC/MFC大版内专家分月排行榜第三2016年12月 VC/MFC大版内专家分月排行榜第三2016年10月 VC/MFC大版内专家分月排行榜第三2016年2月 VC/MFC大版内专家分月排行榜第三2015年10月 VC/MFC大版内专家分月排行榜第三2015年7月 VC/MFC大版内专家分月排行榜第三2012年10月 VC/MFC大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 c语言推箱子源代码 的文章

 

随机推荐