您的位置:首页资讯编程开发 → 怎样设计推箱子游戏

怎样设计推箱子游戏

时间:2011/5/17 15:04:05来源:飓风整理作者:彭搏我要评论(0)

 
igfxDI.dll
授权:免费软件 大小:268KB 语言: 简体

#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();
}

相关视频

    没有数据

相关阅读 C语言学习之12个小问答全境封锁2肯卓图纸怎么获得 全境封锁2肯卓设计图获得方法凯瑟琳Full Body怎么推箱子 凯瑟琳Full Body推箱子技巧突变元年伊甸之路武器箱子一览 突变元年伊甸之路全武器箱子位置第五人格怎样获得体验卡贪婪洞窟2时光之门掉率怎样 时光之门掉率调整介绍王者荣耀冰雪聚王者礼包怎样获得 冰雪聚王者礼包获得方法3g手机怎样升级

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 编程语言排行榜2020年android studio怎么删 eclipse怎么设置编码格式 eclipse设置编码格andriod studio如何使用真机测试 andriod sandroid studio怎么生成apk android studioandroid studio如何导入jar包 android stud

人气排行 安卓模拟器BlueStacks安装使用教程编程语言排行榜2020年9月 TIOBE编程语言排行eclipse字体大小怎么设置 eclipse字体大小plsql developer怎么连接数据库 plsql deveTomcat9.0安装教程 Tomcat9.0环境变量配置方plsql developer怎么使用 plsql developerVisual Studio 2015环境搭建教程Eclipse优化设置教程 Eclipse优化设置技巧