c语言推箱子游戏代码

#include <stdio.h>

#include <conio.h>

#include<stdlib.h>

#include<windows.h>

int m =0; //m代表第几关

struct maps{short a[9][11]; };

struct maps map[5]={ 0,0,0,0,0,0,0,0,0,0,0, //共5关,每关9行11列

              0,1,1,1,1,1,1,1,0,0,0,

              0,1,0,0,0,0,0,1,1,1,0,

              1,1,4,1,1,1,0,0,0,1,0,  //0空地,1墙

              1,5,0,0,4,0,0,4,0,1,0,  //4是箱子,5是人

              1,0,3,3,1,0,4,0,1,1,0,  //3是目的地

              1,1,3,3,1,0,0,0,1,0,0,  //7是箱子在目的地(4+3)

              0,1,1,1,1,1,1,1,1,0,0,  //8是人在目的地(5+3)

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,1,1,1,1,0,0,0,0,0,

              0,0,1,5,0,1,1,1,0,0,0,

              0,0,1,0,4,0,0,1,0,0,0,

              0,1,1,1,0,1,0,1,1,0,0,

              0,1,3,1,0,1,0,0,1,0,0,

              0,1,3,4,0,0,1,0,1,0,0,

              0,1,3,0,0,0,4,0,1,0,0,

              0,1,1,1,1,1,1,1,1,0,0,

              0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,1,1,1,1,1,1,1,0,

              0,0,1,1,0,0,1,0,5,1,0,

              0,0,1,0,0,0,1,0,0,1,0,

              0,0,1,4,0,4,0,4,0,1,0,

              0,0,1,0,4,1,1,0,0,1,0,

              1,1,1,0,4,0,1,0,1,1,0,

              1,3,3,3,3,3,0,0,1,0,0,

              1,1,1,1,1,1,1,1,1,0,0,

              0,1,1,1,1,1,1,1,1,1,0,

              0,1,0,0,1,1,0,0,0,1,0,

              0,1,0,0,0,4,0,0,0,1,0,

              0,1,4,0,1,1,1,0,4,1,0,

              0,1,0,1,3,3,3,1,0,1,0,

              1,1,0,1,3,3,3,1,0,1,1,

              1,0,4,0,0,4,0,0,4,0,1,

              1,0,0,0,0,0,1,0,5,0,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,1,1,1,1,1,1,0,0,

              0,1,1,1,0,0,0,0,1,0,0,

              1,1,3,0,4,1,1,0,1,1,0,

              1,3,3,4,0,4,0,0,5,1,0,

              1,3,3,0,4,0,4,0,1,1,0,

              1,1,1,1,1,1,0,0,1,0,0,

              0,0,0,0,0,1,1,1,1,0,0,

             0,0,0,0,0,0,0,0,0,0,0 };

void DrMap( ) //绘制地图

{ CONSOLE_CURSOR_INFO cursor_info={1,0}; //隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);

printf("\n\n \t\t\b推箱子");

printf("\n \t");

for (int i = 0; i < 9; i++)

{for (int j = 0; j < 11; j++)

   {switch (map[m].a[i][j])

      {case 0:  printf("  "); break;

       case 1:  printf("■"); break;

       case 3:  printf("◎");break;

       case 4:  printf("□"); break;

       case 5:  printf("♀"); break;   //5是人

       case 7:  printf("□"); break;  //4 + 3箱子在目的地中

       case 8:  printf("♀");break;   // 5 + 3人在目的地中

      }

   }

  printf("\n\t");

}

}

void gtxy(int x, int y) //控制光标位置的函数

{ COORD coord;

coord.X = x;

coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void start( ) //开始游戏

{ int r, c; //人的下标

for (int i = 0; i < 9; i++)

{ for (int j = 0; j < 11; j++)

  {if (map[m].a[i][j] == 5||map[m].a[i][j]==8) { r = i;  c = j; } } //i j 人的下标

}

char key;

key = getch( );

switch (key)

{case ‘W’:

case 'w':

case 72:

  if (map[m]. a[r - 1][c] == 0|| map[m]. a [r - 1][c] == 3)

    { gtxy(2*c+8,r-1+3); printf("♀");  // gtxy(2*c+8,r-1+3)是到指定位置输出字符

     if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

     if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r - 1][c] += 5;  map[m]. a [r][c] -= 5; }

   else  if (map[m]. a [r - 1][c] == 4 || map[m]. a [r - 1][c] == 7)

    { if (map[m]. a [r - 2][c] == 0 || map[m]. a [r - 2][c] == 3)

       { gtxy(2*c+8,r-2+3); printf("□"); gtxy(2*c+8,r-1+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

        map[m]. a [r - 2][c] += 4;  map[m]. a [r - 1][c] += 1;

         map[m]. a [r][c] -= 5; }

    } break;

case 'S':

case 's':

case 80:

    if (map[m]. a [r + 1][c] == 0 || map[m]. a [r + 1][c] == 3)

     { gtxy(2*c+8,r+1+3); printf("♀");

       if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

      if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r + 1][c] += 5;  map[m]. a [r][c] -= 5; }

     else if (map[m]. a [r + 1][c] == 4 || map[m]. a [r+ 1][c] == 7)

      { if (map[m]. a [r + 2][c] == 0 || map[m]. a [r + 2][c] == 3)

        { gtxy(2*c+8,r+2+3); printf("□"); gtxy(2*c+8,r+1+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

         if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

         map[m]. a [r + 2][c] += 4; map[m]. a [r + 1][c] += 1;

         map[m]. a [r][c] -= 5; }

      }break;

case 'A':

case 'a':

case 75:

    if (map[m]. a [r ][c - 1] == 0 || map[m]. a [r ][c - 1] == 3)

     { gtxy(2*(c-1)+8,r+3); printf("♀");

      if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

       if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r ][c - 1] += 5; map[m]. a [r][c] -= 5; }

    else if (map[m]. a [r][c - 1] == 4 || map[m]. a [r][c - 1] == 7)

     {if (map[m]. a [r ][c - 2] == 0 || map[m]. a [r ][c - 2] == 3)

        { gtxy(2*(c-2)+8,r+3); printf("□"); gtxy(2*(c-1)+8,r+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

         if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

         map[m]. a [r ][c - 2] += 4; map[m]. a [r ][c - 1] += 1;

      map[m]. a [r][c] -= 5; }

     }break;

case 'D':

case 'd':

case 77:

    if (map[m]. a [r][c + 1] == 0 || map[m]. a [r][c + 1] == 3)

     { gtxy(2*(c+1)+8,r+3); printf("♀");

       if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

       if(map[m]. a[r ][c] == 8) {gtxy(2*c+8,r+3); printf("◎");}

      map[m]. a [r][c + 1] += 5;  map[m]. a [r][c] -= 5; }

    else if (map[m]. a [r][c + 1] == 4 || map[m]. a [r][c + 1] == 7)

     { if (map[m]. a [r][c + 2] == 0 || map[m]. a [r][c + 2] == 3)

        { gtxy(2*(c+2)+8,r+3); printf("□"); gtxy(2*(c+1)+8,r+3); printf("♀");

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3); printf("  "); }

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3); printf("◎");}

        map[m]. a [r][c + 2] += 4; map[m]. a [r][c + 1] += 1;

          map[m]. a [r][c] -= 5; }

     }break;

}

}

int ifwan( ) //是否完成(1是0否)

{ if(m==0){if(map[m].a[5][2]==7&& map[m].a[5][3]==7&&

map[m].a[6][2]==7&& map[m].a[6][3]==7) return 1;}

if(m==1){if(map[m].a[5][2]==7&& map[m].a[6][2]==7&&

map[m].a[7][2]==7) return 1;}

if(m==2){if(map[m].a[7][1]==7&& map[m].a[7][2]==7&& map[m].a[7][3]==7&&

map[m].a[7][4]==7&& map[m].a[7][5]==7) return 1;}

if(m==3){if(map[m].a[4][4]==7&& map[m].a[4][5]==7&& map[m].a[4][6]==7&&

map[m].a[5][4]==7&& map[m].a[5][5]==7&& map[m].a[5][6]==7) return 1;}

if(m==4){if(map[m].a[3][2]==7&& map[m].a[4][1]==7&& map[m].a[4][2]==7&&

map[m].a[5][1]==7&& map[m].a[5][2]==7) return 1;}

return 0;

}

int main( ) //主函数

{ while (1)

 { system("cls");

   DrMap( );

  while (1)

        { start( );

          if(ifwan()){printf("\007");break;} //完成后响铃

       }

   m+=1;

 }

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五民FTOP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值