C语言实现的推箱子游戏

/* 这是彭搏同学的推箱子游戏,大家试试玩,谁有更好的Idea?*/

#include"stdio.h"
#include"bios.h"
#define LEFT 75
#define RIGHT 77
#define UPPER 72
#define DOWN 80
#define ESC 27
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
{
int x,y;
};
union keyboard /*定义读取键盘码的共用体类型*/
{
unsigned int iKeyInfo;
char chKeyBit[2];
};
int fnGetKey(void)  /*定义读取键盘码的函数*/
{
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
while(bioskey(1)==0); /*检测用户是否按键*/
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]);  /*返回ASCII码或扩充码*/
}
void main()
{
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
struct Boxss Box[4]; /*定义箱子数量*/
int chMap[10][10]={   /*用二维数组定义地图*/
                  {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
                  {0,1,0,0,0,0,1,1,1,0},
                  {0,1,0,2,0,0,1,0,1,0},
                  {0,1,0,1,0,0,1,0,1,0},
                  {0,1,1,1,0,0,1,0,1,0},
                  {0,1,0,0,0,0,1,0,1,0},
                  {0,1,1,1,1,1,1,0,1,0},
                  {0,1,0,1,0,0,0,0,2,0},
                  {0,2,0,1,1,1,1,2,0,0},
                  {0,0,0,0,0,0,0,0,0,0},
                  };
int i,j;
Box[0].x=13; /*定义箱子的坐标属性*/
Box[1].x=11;
Box[2].x=14;
Box[3].x=18;
Box[0].y=8;
Box[1].y=7;
Box[2].y=13;
Box[3].y=7;
  while(1) /*反复进行求移动的坐标运算*/
  {
  for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
    {
    gotoxy(10,5+i);
    for(j=0;j<10;j++)
      {
      if(chMap[i][j]==0)
        printf("#");
      if(chMap[i][j]==1)
        printf(" ");
      if(chMap[i][j]==2)
        printf("X");
      }
    }
  j=0; /*判断是否所有箱子都在目标坐标上*/
  for(i=0;i<4;i++)
    if(chMap[Box[i].y-5][Box[i].x-10]==2)
    j++;
  if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
      {
      clrscr();
      printf("You Win!");
      break;
      }
  for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
    {
    gotoxy(Box[i].x,Box[i].y);
    printf("0");
    }
  gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
  printf("*\b");
  tx=x; /*记录本次移动前的坐标*/
  ty=y;
  iKey=fnGetKey();
  if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
    x--;
  if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
    x++;
  if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
    y--;
  if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
    y++; /*输入ESC退出并输出"YOU LOST"*/
  if(iKey==ESC)
  {
  clrscr();
  printf("You Lost");
  break;
  }
  for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
    if(Box[i].x==x&&Box[i].y==y)
      {
      Box[i].x+=(x-tx);
      Box[i].y+=(y-ty);
    if(chMap[Box[i].y-5][Box[i].x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
      {
      Box[i].x-=(x-tx);
      Box[i].y-=(y-ty);
      x=tx;
      y=ty;
      }
      break;
      }
  clrscr();
  }
getch();
}

时间: 2024-11-18 03:46:37

C语言实现的推箱子游戏的相关文章

vs5015-求大神vs2015 环境下纯c语言编程推箱子游戏,QQ或微信红包重谢

问题描述 求大神vs2015 环境下纯c语言编程推箱子游戏,QQ或微信红包重谢 本人c语言初学者,求推向资源代码.我已写了部分,但不会将其联系起来,将其显示出来,刷屏出来...就是将地图呈现出.希望看到大神的源代码有所感悟 #ifndef _DITEM #define _DITEM #define X 8 #define Y 8 enum Kind{nul=0,wall,human,box,well,finish,empty,qiu}; typedef struct _item { enum K

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

推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用了zepto的touch模块, 通过手指滑动屏幕就可以控制乌龟走不同的方向: 因为推箱子这个游戏比较简单, 直接用了过程式的方式写代码, 模块也就是两个View 和 Model, 剩下就是用户的事件Controller, 用户每一次按下键盘的方向键都会改变数据模型的数据,然后重新生成游戏的静态htm

J2ME推箱子游戏

问题描述 我有一个想法想做一个推箱子游戏.游戏内容与现存的不一样,有没有人可以帮我做成这个游戏啊~~.我想做一个自动生成地图的游戏~~.我对游戏分析还可以--,就是对编程实在是不在行.希望高手们可以帮个忙--有意者请给我发邮件dingmingquan521@hotmail.com 解决方案 解决方案二: 解决方案三:这位大大的意识我不太懂!1:自动生成地图是随机的吗?2:还是写好很多地图后自动抽取一个地图来进行游戏?如果是1的话难度就高很多了因为自动生成地图来推箱子逻辑部分就...一个不小心生成

求助推箱子游戏用到的图片资源

问题描述 我想用java写一个推箱子游戏,但找不到需要用的图片资源,望各位大大求助 解决方案 解决方案二:去截图...然后使用...满足你的需求么........解决方案三:可以找网页版的推箱子,截图p下也可以

C#编推箱子游戏的一些问题

问题描述 1,如何用Keydown键控制小人的上下左右行走,坐标是如何计算的?2.怎么控制小人和箱子坐标重合后,箱子的移动. 解决方案 解决方案二:坐等来人.....坐标应该可以通过数组解决吧?人和箱子重合的时候判断哪一边...然后....不懂了--解决方案三:"坐标"有两个含义,一个是编程世界的坐标,一个是应用领域的坐标.应用领域的坐标其x.y可能就是从1到5,表示最多有5行.5列.而编程领域的坐标,则可能是像素坐标系的坐标(例如x.y都是从0到800或者从0到任意n数值之间映射).

JavaScript编写推箱子游戏_javascript技巧

推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用了zepto的touch模块, 通过手指滑动屏幕就可以控制乌龟走不同的方向: 因为推箱子这个游戏比较简单, 直接用了过程式的方式写代码, 模块也就是两个View 和 Model, 剩下就是用户的事件Controller, 用户每一次按下键盘的方向键都会改变数据模型的数据,然后重新生成游戏的静态html, 然后用innerHTML方式插

Berusky 2 0.7发布 逻辑类推箱子游戏

Berusky 是一个基于益智逻辑类的推箱子游戏.玩家可以在迷宫中移动箱子,挑战你的视觉/空间的思维和能力,找到一种方法来解决一个逻辑任务,只允许5次错误,你会经历一个充满冒险情节的各种难题,这也增加了整个游戏的可玩性. Berusky 2 0.7该版本更新了声音和音乐的播放. 软件信息:http://anakreon.cz/?q=node/2 下载地址:http://sourceforge.net/projects/berusky2/files/berusky2-0.7/

Berusky 1.4发布 逻辑类推箱子游戏

Berusky 是一个基于益智逻辑类的推箱子游戏.玩家可以在迷宫中移动箱子,挑战你的视觉/空间的思维和能力,找到一种方法来解决一个逻辑任务,只允许5次错误,你会经历一个充满冒险情节的各种难题,这也增加了整个游戏的可玩性. Berusky 1.4该版本增加了一个新功能. 软件信息:http://anakreon.cz/?q=node/1 下载地址: Windows executable: berusky-win-1.3.exe Fedora Linux rpm packages: binary d

c语言-C语言的推箱子在推箱子移动的时候存在一个错误,求大牛解答,并且修改程序绝对不麻烦,谢谢了。

问题描述 C语言的推箱子在推箱子移动的时候存在一个错误,求大牛解答,并且修改程序绝对不麻烦,谢谢了. #include #include #include //定义墙壁的高和宽 #define H 11 #define W 26 int scr[H][W] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1}, {1,0,0,0,0,0,0