运用C语言编写的推箱子小游戏(含代码和运行截图)

设计思路

用一个二维数组来表示整个地图,我们先网上找一张地图来分析下。
运用C语言编写的推箱子小游戏(含代码和运行截图)_第1张图片
分析:地图上有 墙、目的地、箱子、人。可以用数字来在二维数组中对应的标记这些东西,二维数组的大小就是地图的大小。
  并加入了计时功能,通过游戏前后获取系统时间,计算二者时间差,差值及为游戏用时,还添加了游戏主界面模块。

#include // 获取系统时间及计算差值函数
#include
int main()
{
time_t timep;
struct tm *p1,*p2;
time(&timep);
p1= gmtime(&timep);
int t,t1,t2;
t1=(p1->tm_hour)6060+(p1->tm_min)*60+(p1->tm_sec);
time(&timep);
//游戏执行函数
p2= gmtime(&timep);
t2=(p2->tm_hour)6060+(p2->tm_min)*60+(p2->tm_sec);
t=t2-t1; // t的值为TIME值
printf(“SCORE:%02d\n”,count);
printf(“TIME:%02d:%02d\n”,t/60,t%60);
return;
}

-----------------------------------------------------------------------------------------------------------------------
while (1) // 主界面模块
{
if(flag)
{
break;
}
printf(" \n");
printf(“请输入选项按回车进入:”);
scanf("%d",&choice);
switch(choice) // 主界面选项判定函数
{
case :
{
system(“cls”);
printf(" \n");
break;
}
 
-----------------------------------------------------------------------------------------------------------------------
 

#include  
#include 
#include
#include
#include 

time_t timep;
struct tm *p1,*p2;

int map[10][11] = {            //定义地图大小10*11 
     {0,0,0,0,0,0,0,0,0,0,0},  
     {1,1,1,1,1,1,1,1,1,1,1},  //0代表空地   
     {1,1,1,0,0,1,0,0,1,1,1},  //1代表墙   
     {1,1,0,4,0,1,0,0,0,1,1},  //3代表目的地   
     {1,1,0,0,0,4,0,0,0,1,1},  //4代表箱子   
     {1,1,0,4,0,0,1,0,0,0,1},  //5代表人    
     {1,1,0,1,1,1,1,0,4,0,1},   
     {1,0,0,8,3,0,0,1,0,0,1},    
     {1,0,0,3,3,0,0,0,0,1,1},   
     {1,1,1,1,1,1,1,1,1,1,1} };
void DrawMap()   //绘制地图  //二维数组+switch()
{
    //遍历二维数组  //0 打印空格  //1 墙   //3 目的地
    for (int i = 0;i < 10; i++)
    {
        for (int j= 0; j < 11; j++)
        {  //if  else  switch
            switch(map[i][j])
            {
            case 0:               
                printf("  ");               
            break;
            case 1:               
                printf("■");               
            break;
            case 3:               
                printf("☆");               
            break;
            case 4:               
                printf("□");               
            break;
            case 5:  //5 人               
                printf("●");  
            break;
            case 7:  //4 + 3  箱子在目的地中               
                printf("★");              
            break;
            case 8:  // 5 + 3  人在目的地当中             
                printf("●");               
                break;
            }
        }       
        printf("\n");
    }
}
void PlayGame()
{
    int r, c;  //人的下标  
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 11;j++)
        {
            if (map[i][j] ==5||map[i][j]==8)   //地图上对应人的下标
            {
                r = i;
                c = j;
            }

        }      

    } 

    char ch;  //字符变量
    ch = getch();  //getch()键盘的输入保存到字符中
    //getchar()接收键盘字符 
    // getch()直接接收 不显示回文  getchar()显示回文可以修改 enter键结束
    //根据不同的按键  改变不同的值、分支.

    switch (ch)
    {
    case 'W':  //W A S D方向   72  80  75  77 虚拟键值 ascii windowVK_UP VK_TAB VK_RETUNE
    case 'w':
    case 72:
        if (map[r - 1][c] == 0||map[r - 1][c] == 3) 
        {
            map[r - 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r - 1][c] == 4|| map[r - 1][c] == 7)
        {
            if (map[r - 2][c] == 0|| map[r - 2][c] == 3)
            {
                map[r - 2][c] += 4;
                map[r - 1][c] += 1;
                map[r][c] -= 5;
            }
        } 
        break;
        
    case 'S':  
    case 's':
    case 80:
        if (map[r + 1][c] == 0 ||map[r + 1][c] == 3)
        {
            map[r + 1][c] += 5;
            map[r][c] -= 5;
        }
        else if (map[r + 1][c] == 4|| map[r+ 1][c] == 7)
        {
            if (map[r + 2][c] == 0|| map[r + 2][c] == 3)
            {
                map[r + 2][c] += 4;
                map[r + 1][c] += 1;
                map[r][c] -= 5;
            }
        }
        break; 

    case 'A':
    case 'a':
    case 75:
        if (map[r ][c - 1] == 0 ||map[r ][c - 1] == 3)
        {
            map[r ][c - 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c - 1] == 4|| map[r][c - 1] == 7)
        {
            if (map[r ][c - 2] == 0|| map[r ][c - 2] == 3)
            {
                map[r ][c - 2] += 4;
                map[r ][c - 1] += 1;
                map[r][c] -= 5;
            }
        }
        break; 

    case 'D':
    case 'd':
    case 77:
        if (map[r][c + 1] == 0 ||map[r][c + 1] == 3)
        {
            map[r][c + 1] += 5;
            map[r][c] -= 5;
        }
        else if (map[r][c + 1] == 4|| map[r][c + 1] == 7)
        {
            if (map[r][c + 2] == 0|| map[r][c + 2] == 3)
            {
                map[r][c + 2] += 4;
                map[r][c + 1] += 1;
                map[r][c] -= 5;
            }
        }
        break;
    }

}
int main()  //主函数
{ 
   int a;
   time(&timep); //获取系统时间
   p1= gmtime(&timep); //获取游戏开始前系统时间
   int choice,num,flag=0;
   
while (1)
   { 
       if(flag)
   {
   break;
   }
      printf(" \n"); //打印主界面
      printf(" 欢迎来到推箱子!!!\n\n");
      printf("  1. 游戏说明\n\n");
      printf("  2. 开始游戏\n\n");
      printf("  3. 退出游戏\n\n");
      printf("请输入选项按回车进入:");
      scanf("%d",&choice);
 switch(choice)  //主界面选项选择语句
{   
    case 1: //1. 游戏说明
    { 
    system("cls");
    printf(" \n");
    printf("    地图中有四个箱子和四个目的地,玩家\n");
    printf("通过控制地图上人物的移动来推动箱子,每\n");
    printf("个箱子没有指定的目的地,只要箱子进入目\n");
    printf("的地就可以得两分,玩家需将四个箱子全部\n");
    printf("推进目的地才算通关,中途没有悔棋,每个\n");
    printf("关卡只有一次机会!!!\n");
    printf("\n");
    printf("  ■----------墙\n");
    printf("  ☆----------目的地\n");
    printf("  □----------箱子\n");
    printf("  ●----------人物\n");
    printf("  ★----------箱子推进目的地\n");
    printf("\n");
    printf("输入1按回车返回主菜单:");
       scanf("%d",&a); 
          { 
          if(a==1)
             system("cls");
             main(); //调用主函数实现主菜单界面的返回 
          }
     break;
    }
    case 2: //2. 开始游戏
    {   
 while (1)
    { 
       int a;
       int t,t1,t2;
       int count = 0;
       system("cls");
       t1=(p1->tm_hour)*60*60+(p1->tm_min)*60+(p1->tm_sec); //获取的系统时间化成秒,方便后面计算时间差值
       DrawMap(); //调用地图生成函数
       printf(" \n");       
       printf("SCORE:%02d\r",count); //得分打印      
     if(map[7][3]==7||map[8][3]==7||map[7][4]==7||map[8][4]==7) //只有一个箱子推进目的地
        {
          count=count+2; //得分加2
          printf("SCORE:%02d\r",count);
        }
     if((map[7][3]==7&&map[8][3]==7)||(map[7][3]==7&&map[7][4]==7)||(map[7][3]==7&&map[8][4]==7)||(map[8][3]==7&&map[7][4]==7)||(map[8][3]==7&&map[8][4]==7)||(map[7][4]==7&&map[8][4]==7)) //两个箱子推进目的地
        {
          count=count+2;
          printf("SCORE:%02d\r",count);
        }
     if((map[7][3]==7&&map[8][3]==7&&map[7][4]==7)||(map[7][3]==7&&map[8][3]==7&&map[8][4]==7)||(map[7][3]==7&&map[7][4]==7&&map[8][4]==7)||(map[7][4]==7&&map[8][4]==7&&map[8][3]==7)) //三个箱子推进目的地
        {
          count=count+2;
          printf("SCORE:%02d\r",count);
        }    
     if(map[7][3]==7&&map[8][3]==7&&map[7][4]==7&&map[8][4]==7) //所有箱子推进目的地
        {
          count=count+2;
          printf(" ====GAME OVER!!====\n");
          printf(" \n");
          time(&timep);
          p2= gmtime(&timep); //获取游戏结束后系统时间    
          t2=(p2->tm_hour)*60*60+(p2->tm_min)*60+(p2->tm_sec);
          t=t2-t1; //计算通关游戏所需时间
          printf("SCORE:%02d\n",count);       
          printf("TIME:%02d:%02d\n",t/60,t%60);
          printf(" \n");
          printf("输入1按回车返回主菜单:");
             scanf("%d",&a); 
          {   
             if(a==1)
             system("cls");
             main();
             break;
          }
       }    
          PlayGame();  //调用函数    
        }      
     break; 
   }
    case 3:
   {
     system("cls");
     flag=1;
     break;
   }  
  }    
 } 
    return 0;       
}

 
-----------------------------------------------------------------------------------------------------------------------
 
游戏菜单主界面截图
运用C语言编写的推箱子小游戏(含代码和运行截图)_第2张图片 
-----------------------------------------------------------------------------------------------------------------------
 
“1. 游戏说明” 选项页面截图

运用C语言编写的推箱子小游戏(含代码和运行截图)_第3张图片 
-----------------------------------------------------------------------------------------------------------------------
 
“2. 开始游戏” 选项页面截图

运用C语言编写的推箱子小游戏(含代码和运行截图)_第4张图片
 
推进一个箱子以及得分
运用C语言编写的推箱子小游戏(含代码和运行截图)_第5张图片
 
推进两个箱子以及得分
运用C语言编写的推箱子小游戏(含代码和运行截图)_第6张图片
 
推进三个箱子以及得分
运用C语言编写的推箱子小游戏(含代码和运行截图)_第7张图片
 
推进全部箱子以总得分及用时
运用C语言编写的推箱子小游戏(含代码和运行截图)_第8张图片 
-----------------------------------------------------------------------------------------------------------------------

你可能感兴趣的:(C语言,C语言,推箱子游戏,C语言写小游戏,推箱子代码)