#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. 懒加载(getter\setter理解)

    为什么要用懒加载 1.首先看一下程序启动过程:(如图) 会有一个mian的设置,程序一启动会加载main.storyboard main.storyboard又会加载箭头所指的控制器 控制器一旦加载, ...

  2. Ubuntu学习总结-12 linux 平台及 windows 平台 mysql 重启方法

    一 Linux下重启MySQL的正确方法 1.通过rpm包安装的MySQL   service mysqld restart2.从源码包安装的MySQL   // linux关闭MySQL的命令$my ...

  3. Linux下按程序查实时流量 network traffic

    实然看到下载速度多达几M/s,但实际上并没有什么占用带宽的进程. 相查看每个程序占用的网络流量, 但系统自带的 System Monitor 只能查看全局的流量, 不能具体看某个程序的...... k ...

  4. 差分进化算法 DE-Differential Evolution

    差分进化算法 (Differential Evolution)   Differential Evolution(DE)是由Storn等人于1995年提出的,和其它演化算法一样,DE是一种模拟生物进化 ...

  5. throttle和debounce简单实现

    function debounce(delay,fn){ var timer; return function(){ var ctx = this,args = arguments; clearTim ...

  6. nginx服务器命令

    nginx -s reload  :修改配置后重新加载生效 nginx -s reopen  :重新打开日志文件nginx -t -c /path/to/nginx.conf 测试nginx配置文件是 ...

  7. Block使用

    1.对block的理解 >  block是iOS4.0之后出现的,是仿照java中匿名函数所创造的,它是c级别的语法,效率比协议-代理高 >  block的是一个匿名函数(没有名字的函数) ...

  8. Easyui 设置datagrid 进入编辑状态,保存结束编辑

    在datagrid中如何实现让一行进入编辑状态,修改数据后,保存信息呢? //点击列表变成文本框,进入可编辑状态 $(function () { var doc = $(document), tabl ...

  9. php 全局变量

    参考链接:http://www.cnblogs.com/borage/p/3645285.html

  10. pyqt信号和槽应用举例

    第一篇手写随笔. 项目的部分代码: 在子线程中改变主窗体的标签. class MyForm(QDialog): def __init__(self, parent=None): self.config ...