#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char sr;//存储用户输入的指令
//绘制地图
char a[11][20]={
"###################",
"###################",
"### $ $ ###",
"### ##### ###",
"### ###",
"#### #### ### ####",
"### # @ # ###",
"### # @ # ###",
"### ^ ###",
"###################",
"###################"};
// 定义箱子,小人和目的的坐标
int i=1,e=8,f=9,m=7,n=9,x=6,y=9;
while(i)
{
//清屏,给人一种真实游戏的感觉,这是在MAC环境上的,WIN的清屏语句是system("cls")
//这个程序所用到的类型和语法除了清屏这句还有清除缓存区都是可以在WIN系统下,VC++6.0里完美运行的
system("clear");
printf("欢迎使用推箱子\n^就代表你,而你的工作就是把@推到$的位置,好好努力吧!\n");
printf("对了w代表上,s代表下,a代表左,d代表右,q表示退出,开始吧!\n");
//判断是否推到目的地
if(m== 2 && n==8)
{
if(x==2 && y==10)
{
printf("恭喜你挑战成功!\n");
break;
}
}
if(m==2 && n==10)
{
if(x==2 && y==8)
{
printf("恭喜你挑战成功!\n");
break;
}
}
//打印地图
for(int b=0;b<11;b++)
{
for(int c=0;c<20;c++)
{
printf("%c",a[b][c]);
}
printf("\n");
}
//清除缓存区
fpurge(stdin);
scanf("%c",&sr);
//判断方向
switch(sr)
{
case 'w':
case 'W':
if(a[e-1][f]==' ')
{
a[e-1][f]='^';
a[e][f]=' ';
e-=1;
}
else if(a[e-1][f]=='@' && a[e-2][f]!='#' && a[e-2][f]!='@')
{
if(e-m==1 && f==n)
{
m-=1;
a[m][n]='@';
a[e-1][f]='^';
a[e][f]=' ';
e-=1;
}
else if(e-x==1 && f==y)
{
x-=1;
a[x][y]='@';
a[e-1][f]='^';
a[e][f]=' ';
e-=1;
}
}
break;
case 's':
case 'S':
if(a[e+1][f]==' ')
{
a[e+1][f]='^';
a[e][f]=' ';
e+=1;
}
else if(a[e+1][f]=='@' && a[e+2][f]!='#' && a[e+2][f]!='@')
{
if(m-e==1 && f==n)
{
m+=1;
a[m][n]='@';
a[e+1][f]='^';
a[e][f]=' ';
e+=1;
}
else if(x-e==1 && y==f)
{
x+=1;
a[x][y]='@';
a[e+1][f]='^';
a[e][f]=' ';
e+=1;
} }
break; case 'a':
case 'A':
if(a[e][f-1]==' ')
{
a[e][f-1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f-=1;
}
else if(a[e][f-1]=='$')
{
a[e][f-1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f-=1;
}
else if(a[e][f-1]=='@' && a[e][f-2]!='#' && a[e][f-2]!='@')
{
if(e==m && f-n==1)
{
n-=1;
a[m][n]='@';
a[e][f-1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f-=1;
}
else if(e==x && f-y==1)
{
y-=1;
a[x][y]='@';
a[e][f-1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f-=1;
}
}
break;
case 'd':
case 'D':
if(a[e][f+1]==' ')
{
a[e][f+1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f+=1;
}
else if(a[e][f+1]=='$')
{
a[e][f+1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f+=1;
}
else if(a[e][f+1]=='@' && a[e][f+2]!='#' && a[e][f+2]!='@')
{
if(e==m && n-f==1)
{
n+=1;
a[m][n]='@';
a[e][f+1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f+=1;
}
else if(e==x && y-f==1)
{
y+=1;
a[x][y]='@';
a[e][f+1]='^';
if((e==2 && f==8)||(e==2 && f==10))
a[e][f]='$';
else
a[e][f]=' ';
f+=1;
}
}
break;
case 'q':
case 'Q':i=0;break;
}
}
return 0;
}

  

OC推箱子的更多相关文章

  1. c语言游戏推箱子

    前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...

  2. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  3. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  4. hdu.1254.推箱子(bfs + 优先队列)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  5. [游戏模版17] Win32 推箱子 迷宫

    >_<:Here introduce a simple game: >_<:resource >_<:only can push a box and finally ...

  6. [转]Flash ActionScript2.0面向对象游戏开发-推箱子

    本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...

  7. c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;

    网吧充值系统namespace ConsoleApplication1 { class Program { struct huiyuan { public string name; public st ...

  8. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  9. [HDU 1254] 推箱子

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

随机推荐

  1. C语言变量类型和具体的范围

    什么是变量?变量自然和常量是相对的.常量就是 1.2.3.4.5.10.6......等固定的数字,而变量则根我们小学学的 x 是一个概念,我们可以让它是 1,也可以让它是 2,我们想让它是几是我们的 ...

  2. Find Out What Your Entity Framework Query Is Really Doing

    Assuming that you're using Entity Framework 6, you already have a logging tool that can give you som ...

  3. linux大文件分割 split命令

    inux split 命令 功能说明:切割文件. 语 法:split [--help][--version][-][-b ][-C ][-l ][要切割的文件][输出文件名] 补充说明:split可将 ...

  4. mysql中distinct的用法

    本事例实验用表task,结构如下 MySQL> desc task; +-------------+------------+------+-----+-------------------+- ...

  5. 让VS2010支持Windows2000

      2015-10-20 14:21 375人阅读 评论(0) 收藏 举报  分类: 学习笔记(33)  技术心得(1)  用Visual Studio 2010编译的程序无法在Windows 200 ...

  6. Qt &QSS

    Today task:解决了qt中的一些控件无法使用qss的问题(如QProgressDialog 调节chunk的颜色,QMessageBox按钮的颜色问题)1,对于QMessageBox,可以单独 ...

  7. C++ 与OpenCV 学习笔记

    联合体:当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union) 1. 联合体是一种结构: 2. 他的所有成员相对于基地址的偏移量均为0: 3. 此结构空间要大到足够容纳最&qu ...

  8. json格式化工具

    1.JsonViewer 可对json数据进行查看.格式化.编辑...... 2.在线工具 http://json.parser.online.fr/

  9. AM335x tscadc platform driver 相关代码跟踪

    TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...

  10. matlab更改打开时候默认路径

    每次打开matlab都会的修改默认路径,是一件有些烦恼的事情.所以,就想尝试更改默认路径 方法如下: 1.在matlab安装目录,找到toolbox文件夹,打开local文件件,打开matlabrc. ...