#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. spring context上下文(应用上下文webApplicationContext)(转载)

    (此文转载:http://www.cnblogs.com/brolanda/p/4265597.html) 一.先说ServletContext javaee标准规定了,servlet容器需要在应用项 ...

  2. Spring Boot中的事务管理

    原文  http://blog.didispace.com/springboottransactional/ 什么是事务? 我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合 ...

  3. XTREE随笔

    1.XTREE简介: XTREE是一个基于AJAX实现的树形菜单.它的原理就是每次都只加载当前结点下的所有结点,而对开发人员来说,就是只需要按一定的格式,生成一段XML代码.XTREE可以自己定制每个 ...

  4. thinkphp3.22 多项目配置

    1.index.php if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试 ...

  5. linux常见命令总结

    日志文件说明 /var/log/message 系统启动后的信息和错误日志,是Red Hat最常用的日志之一 /var/log/secure 与系统安全相关的日志信息 /var/log/maillog ...

  6. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' heade

    XMLHttpRequest cannot load http://10.164.153.37:8050/WebService/WebService.asmx/wsGetStreetData. Res ...

  7. Java优先队列

    按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...

  8. Linux命令-自动挂载文件/etc/fstab功能详解[转]

    一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系统开机时会主动读取/etc/fstab这个文件中的内容 ...

  9. struts.xml

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC    " ...

  10. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...