文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

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

怎样设计推箱子游戏

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

 
C语言程序设计(Visual C++ 6.0环境)PPT
授权:共享软件 大小:2.3M 语言: 简体中文

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

更多 0

相关阅读 C语言学习之12个小问答Web设计中如何使用XML数据数据库设计范式怎样在ASP里面创建统计图表学校教学网站应用设计医院管理系统(HIS)应用设计商业网站应用设计股票网站方案设计

文章评论
发表评论

热门文章 TIOBE 2014年11月编程

最新文章 plsql developer怎么使plsql developer怎么连 visual studio最新版怎么安装eclipse字体大小怎么设置 eclipse字体大小Android Studio使用教程图文详解C#中正则表达式使用教程

人气排行 安卓模拟器BlueStacks安装使用教程php显示错误信息方法oracle查看实例名方法(带缩略图版)JS图片切换代码安装sql server 2000 序列号无法验证delphi odac安装方法讲解bat创建快捷方式技巧关于Delphi内存表的使用说明