推箱子之游戏介绍及游戏地图设计,角色移动,人推箱子,过关升级

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>  //getch的头文件

//用二维数组做一个地图
/*
   用数字描述
   0:空地
   1:墙壁
   3:箱子目的地
   4:箱子
   6:人
   7:箱子和目的地重合
   9:人站在目的地
   在这里弄成一个开始地图为:
   1 1 1 1 1 0 0 0 0 0 0 0
   1 0 0 0 1 0 1 1 1 0 0 0
   1 0 4 0 1 0 1 1 1 1 1 1
   1 0 4 6 1 0 1 0 0 0 3 1
   1 1 1 4 1 1 1 0 0 0 3 1
   1 1 1 0 0 0 0 0 0 0 3 1
   0 1 0 0 0 1 0 0 0 0 0 1
   0 1 0 0 0 1 0 0 0 0 0 1
   0 1 0 0 0 1 1 1 1 1 1 1
   0 1 1 1 1 1 0 0 0 0 0 0    
*/
int   g_map[2][10][12] = 
{
   
     //想要过关升级,那么一个二维数组就是一个地图,那么弄一个三维数组,不就可以弄出多个地图了吗
     //正如上面的数字排序
  {
   
     {
   111110000000}{
   }{
   }{
   }{
   }{
   }{
   }{
   }{
   }{
   }}{
   
      //自己弄一个地图,这里就不设计了
      {
   },
      {
   },
      {
   }{
   }{
   },
      {
   },
      {
   },
      {
   },
      {
   },
      {
   },
   }            
};

int  g_ncurrentLevel = 0;     //当前关卡,数组下标一般从0开始

void   DrapMap();  			  //打印地图
POINT    GetGamerPosition()   //获取玩家坐标
/*在VS2013版本存在,其实是个结构体
   typedef  struct   tagPOINT
   {
       LONG   x;
       LONG   y; 
   }POINT,*POINT,NEAR*NPPOINT,FAR*LPPOINT;
*/
void   Up();                 //往上走
void   Down();               //往下走
void   Left();               //往左走
void   Right();              //往右走
int    GetSpareBox();        //计算空余箱子个数

int  main()
{
   
      //设置标题
      SetConsoleTitle(L"推箱子");     //弹出框架最上方,白色边最左边写着“推箱子”
      //设置窗口大小
      system("mode   con   cols=26   lines=12");      //mode  是修改的意思,con   是控制的意思,cols  是列的意思,lines  是行的意思 
      
      //让程序不停的执行
      while(1)
      {
    
            //获取剩余箱子的个数
            if(GetSpareBox() == 0)
            {
   
                g_nCurrentLevel++ 
            }
            
            //每循环一次,都要进行清屏处理,否则打印多个界面
            system("cls");
            
            //打印地图
            DrapMap();
            
            //获得一个字符
            char  ch = getch();
            //getchar和scanf,getch都可以暂时停止while循环
            //但getch只需要按需要的键,而不需要回车键即可,进行下一行程序,字面表达不清楚,可以自己尝试
            
            switch(ch)
            {
   
                    case'w':case  72:   //往上
                    UP();
                    break;
                    case's':case  80:   //往下
                    Down();
                    break;
                    case'a':case 75:    //往右
                    Left();
                    break;
                    case'd':case 77:    //往右
                    Right();
                    break;
            }
      }
	 
}

//打印地图,遍历
void   DrapMap()
{
   
	   for(int  i = 0; i < 10;i++)
	   {
   
	       for(int  j=0;j < 12;j++)
	       {
   
	            switch(gap_map[g_ncurrentLevel][i][j])
	            {
   
	            case 0://空地
	               printf("  ");//两个空格
	               breakcase 1://墙壁
	               printf("墙壁");  //用搜狗输入法的功能可以打印出一个箱子,由于我没有搜狗,所以这里就不这么做了
	               breakcase 3://箱子目的地
	               printf("五角星");  //同上
	               breakcase 4://箱子
	               printf("箱子");
	               break;
	            case 6://printf("人");
	               break;
	            case 7://箱子在目的地
	               printf("箱子在目的地");
	               break;
	            case 9://人站在箱子目的地
	               printf("人站在箱子目的地");
	               break;
	            } 
	        } 
	        printf("\n");
	    } 
}

//获取玩家坐标
POINT  GetGamerPosition()
{
   
     POINT   pos = {
   -1,-1};  //默认值为-1,表示没有找到
     //遍历
     for(int  i=0;i<10;i++)
     {
   
          for(int  j=0;j<12;j++)
          {
   
              if(g_map[g_ncurrentLevel][i][j] == 6|| g_map[g_ncurrentLevel][i][j] == 9)
              {
   
                   pos.x = i;
                   pos.y = j; 
                   return   pos;
              } 
          } 
     }
     return   pos;
}

//往上
void   Up()
{
   
     POINT pos = GetGamerPosition();
      //在这里,前面和上面的意思一样,前面和上面的意思一样,前面和上面的意思一样
     //1.人的上面是空地
     if(g_map[g_ncurrentLevel][pos
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值