C语言期末项目要求自己设计一个项目,我选择了《推箱子》小游戏, 利用数字矩阵表示地图,不同的数字代表不同的图片。 主程序: } //初始化窗口,加载图片 } } void ManDown() } } //人向左移动 } //人向下移动 } //判断游戏是否结束 } //显示初始页面 } //显示帮助文档 } //重置当前关卡 //实现撤回功能 } / }
基于easyx图形库的推箱子小游戏
 因为这个程序当中涉及到的一些算法及语法,能够更好的帮助我复习有关C语言的基础知识。
 这是我的第一篇博客,希望大家多多指正。程序效果图

 图片是我自己在网上扣的,所以不怎么美观
图片是我自己在网上扣的,所以不怎么美观项目实现(主要算法)
 程序遍历数组,遇到不同的数字贴相应的图片程序代码
```c  ```c  ```c  ```c ```c #include"Thehead.h"//引用头文件 int map_temp_last[100][16][16];//用于保存上一步的地图 int map_temp[MapMany][16][16];//用于保存上一关的地图 int stepnum = 0;//统计步数 char input;//用户的键入操作 //设置窗口大小 int main() { ReadMapFile(); //PlaySound(TEXT("gamemusic.wav"), 0, SND_FILENAME | SND_ASYNC);   F: Welcome(); //保存本关的地图,在执行之前保存,便于执行重启操作 for (int i = 0; i < 16; i++) for (int j = 0; j < 16; j++)    map_temp[WhatMap][i][j] = map[WhatMap][i][j]; while (1) { //判断是否进入下一关   MOUSEMSG msg2; { while (MouseHit()) //监听鼠标信息;当有鼠标消息的时候执行,可检测连续的鼠标信息 {     msg2 = GetMouseMsg();//获取鼠标消息 if (WM_LBUTTONDOWN == msg2.uMsg)//判断鼠标信息;鼠标左键按下 { if (msg2.x > 860 && msg2.x < 940 && msg2.y > 50 && msg2.y < 110) {         ```c if(WhatMap<10)        WhatMap++; } else if (msg2.x > 790 && msg2.x < 850 && msg2.y > 50 && msg2.y < 110)//鼠标点击特定区域`在这里插入代码片` { if (WhatMap >= 1)        WhatMap--;     }      else if (msg2.x > 10 && msg2.x < 50 && msg2.y > 50 && msg2.y < 90)//鼠标点击特定区域     {      goto F;     }     drawGame();    }    }  }     if (kbhit())  {     PlaySound(TEXT("move.wav"), 0, SND_FILENAME | SND_ASYNC);   input = getch();   {     if (input == 'W' || input == 'w' || input == 72)    {     ManUp();     }    else if (input == 'S' || input == 's' || input == 80)    {     ManDown();     }    else if (input == 'A' || input == 'a' || input == 75)    {     ManLeft();     }    else if (input == 'D' || input == 'd' || input == 77)    {     ManRight();     }    else if (input == 'r' || input == 'R')    {     Reset();     }    else if (input == 'z' || input == 'Z')    {     if (stepnum > 0) {      stepnum--;      Backstep();     }    }        else     continue;    }    drawGame();//每次移动后都要从新贴图,因此没执行一步调用一次该函数    if (GameOver())   {    PlaySound(TEXT("success.wav"), 0, SND_FILENAME | SND_ASYNC);    WhatMap++;//如果一个关卡完成,则进入下一个关卡    stepnum = 0;    for (int i = 0; i < 16; i++)     for (int j = 0; j < 16; j++)      map_temp[WhatMap][i][j] = map[WhatMap][i][j];    Sleep(1000);   }   if (WhatMap == 11)break;  } }  Sleep(10000); return 0; //system("pause"); 
 void initscreen()
 {
 initgraph(16 * (SPACE+20), 16 * SPACE);//初始化画图窗口outtextxy(700, 50, "目标数:"); // 加载图片  //0表示空地//1表示墙//2代表目的地//3代表人站在空地上//4代表箱子 //5箱子与目的地重合// 6,人站在目的地上 loadimage(&png[0], _T("0.jpg"), SPACE, SPACE, true); loadimage(&png[1], _T("1.jpg"), SPACE, SPACE, true); loadimage(&png[2], _T("2.jpg"), SPACE, SPACE, true); loadimage(&png[3], _T("3.jpg"), SPACE, SPACE, true); loadimage(&png[4], _T("4.jpg"), SPACE, SPACE, true); loadimage(&png[5], _T("5.jpg"), SPACE, SPACE, true); loadimage(&png[6], _T("6.jpg"), SPACE, SPACE, true); loadimage(&button, _T("button.jpg"), 150, 60, true); loadimage(&next, _T("next.jpg"), 60, 60, true); loadimage(&previous, _T("previous.jpg"), 60, 60, true); loadimage(&backto, _T("backto.jpg"), 60, 60, true); drawGame(); 
 //画出游戏中的各个元素(贴图的方式)
 void drawGame() {
 for (int i = 0; i < 16; i++) {//显示一行
 for (int j = 0; j < 16; j++) {//显示一个格子
 putimage(j * SPACE, i * SPACE, &png[map[WhatMap][i][j]]);
 }
 }putimage(100, 50, &button); putimage(350, 50, &button); putimage(600, 50, &button); putimage(860, 50, &next); putimage(790, 50, &previous); putimage(10, 50, &backto); setbkmode(TRANSPARENT);//设置字体背景为透明 settextcolor(COLORREF(RGB(255, 0, 0)));//设置字体颜色为黑色 settextstyle(40, 0, _T("楷体"));//设置字体大小20,格式楷体  //将数字通过字符的形式输出 TCHAR t1[5]; TCHAR t2[5]; TCHAR t3[5]; _stprintf(t1, _T("%d"), WhatMap + 1); // 高版本 VC 推荐使用 _stprintf_s 函数 _stprintf(t2, _T("%d"), stepnum); _stprintf(t3, _T("%d"), Boxnum()); outtextxy(200, 50, t1); outtextxy(100, 50, "关卡:");  outtextxy(450, 50, t2); outtextxy(350, 50, "步数:");  outtextxy(730, 50, t3); outtextxy(600, 50, "目标数:");  outtextxy(1000, 50, "撤回:z键"); outtextxy(1000, 100, "重启本关:r键"); outtextxy(1000, 150, "操作:a、w、s、"); outtextxy(1000, 200, "d或者方向键"); outtextxy(1000, 400, "其余操作用鼠标"); 
 {//在每一步执行之前,将地图保存到临时数组里面 int p, q; for (int i = 0; i < 16; i++)  for (int j = 0; j < 16; j++)   map_temp_last[stepnum][i][j] = map[WhatMap][i][j];  //先找到人的位置 int i, j; for (i = 0; i < 16; i++) {  int flag = 0;  for (j = 0; j < 16; j++)   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)   {    flag = 1;    break;   }  if (flag)break; } //人的位置是map[WhatMap][i][j];   //人的位置是空地(而不是人和目的地在一起) if (map[WhatMap][i][j] == 3) {  //人的上面是空地  if (map[WhatMap][i + 1][j] == 0)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i + 1][j] = 3;  }  //人的上面是目的地  else if (map[WhatMap][i + 1][j] == 2)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i + 1][j] = 6;  }  //人的上面是箱子  else if (map[WhatMap][i + 1][j] == 4)  {   //1箱子上面是目的地   if (map[WhatMap][i + 2][j] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i + 1][j] = 3;    map[WhatMap][i + 2][j] = 5;   }   //2箱子上面是空地   else if (map[WhatMap][i + 2][j] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i + 1][j] = 3;    map[WhatMap][i + 2][j] = 4;   }   }  //人的上面是箱子和目的地在一起  else if (map[WhatMap][i + 1][j] == 5)  {   //箱子上面是目的地   if (map[WhatMap][i + 2][j] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i + 1][j] = 6;    map[WhatMap][i + 2][j] = 5;   }    //箱子上面是空地   else if (map[WhatMap][i + 2][j] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i + 1][j] = 6;    map[WhatMap][i + 2][j] = 4;   }  }  }  //人的位置是目的地(即人和目的地在一起) else if (map[WhatMap][i][j] == 6) {   //人的上面是空地   if (map[WhatMap][i + 1][j] == 0)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i + 1][j] = 3;  }  //人的上面是目的地  else if (map[WhatMap][i + 1][j] == 2)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i + 1][j] = 6;  }  //人的上面是箱子   else if (map[WhatMap][i + 1][j] == 4)  {   //1.箱子上面是目的地   if (map[WhatMap][i + 2][j] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i + 1][j] = 3;    map[WhatMap][i + 2][j] = 5;   }   //2.箱子上面是空地   else if (map[WhatMap][i + 2][j] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i + 1][j] = 3;    map[WhatMap][i + 2][j] = 4;   }   }    //人的上面是箱子和目的地在一起  else if (map[WhatMap][i + 1][j] == 5)  {   //箱子上面是目的地   if (map[WhatMap][i + 2][j] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i + 1][j] = 6;    map[WhatMap][i + 2][j] = 5;   }    //箱子上面是空地   else if (map[WhatMap][i + 2][j] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i + 1][j] = 6;    map[WhatMap][i + 2][j] = 4;   }  } }  //防止回到上一步也在增加步数 for (p = 0; p < 16; p++) {  int flag = 0;  for (q = 0; q < 16; q++)   if (map[WhatMap][p][q] == 3 || map[WhatMap][p][q] == 6)   {    flag = 1;    break;   }  if (flag)break; }  //将现在人的步数和刚开始人的步数进行比较,如果相同,则不进行步数的增加 if (i != p || j != q)  stepnum++; 
 //人向右移动
 void ManRight()
 {
 int p, q;for (int i = 0; i < 16; i++)  for (int j = 0; j < 16; j++)   map_temp_last[stepnum][i][j] = map[WhatMap][i][j]; //先找到人的位置 int i, j; for (i = 0; i < 16; i++) {  int flag = 0;  for (j = 0; j < 16; j++)   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)   {    flag = 1;    break;   }  if (flag)break; } //人的位置是map[WhatMap][i][j];    //人的位置是空地 if (map[WhatMap][i][j] == 3) {  //人的右面是空地  if (map[WhatMap][i][j + 1] == 0)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i][j + 1] = 3;  }  //人的右面是目的地  else if (map[WhatMap][i][j + 1] == 2)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i][j + 1] = 6;  }  //人的右面是箱子  else if (map[WhatMap][i][j + 1] == 4)  {   //1.箱子右面是目的地   if (map[WhatMap][i][j + 2] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j + 1] = 3;    map[WhatMap][i][j + 2] = 5;   }   //2.箱子右面是空地   else if (map[WhatMap][i][j + 2] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j + 1] = 3;    map[WhatMap][i][j + 2] = 4;   }   }    //人的右边是箱子和目的地在一起  else if (map[WhatMap][i][j + 1] == 5)  {   //箱子右边是目的地   if (map[WhatMap][i][j + 2] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j + 1] = 6;    map[WhatMap][i][j + 2] = 5;   }    //箱子右边是空地   else if (map[WhatMap][i][j + 2] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j + 1] = 6;    map[WhatMap][i][j + 2] = 4;   }  } }  //人的位置是目的地 else if (map[WhatMap][i][j] == 6) {  //人的右面是空地   if (map[WhatMap][i][j + 1] == 0)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j + 1] = 3;  }  //人的右面是目的地  else if (map[WhatMap][i][j + 1] == 2)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j + 1] = 6;  }  //人的右面是箱子   else if (map[WhatMap][i][j + 1] == 4)  {   //1.箱子右面是目的地   if (map[WhatMap][i][j + 2] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j + 1] = 3;    map[WhatMap][i][j + 2] = 5;   }   //2.箱子右面是空地   else if (map[WhatMap][i][j + 2] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j + 1] = 3;    map[WhatMap][i][j + 2] = 4;   }   }    //人的右边是箱子和目的地在一起  else if (map[WhatMap][i][j + 1] == 5)  {   //箱子右边是目的地   if (map[WhatMap][i][j + 2] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j + 1] = 6;    map[WhatMap][i][j + 2] = 5;   }    //箱子右边是空地   else if (map[WhatMap][i][j + 2] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j + 1] = 6;    map[WhatMap][i][j + 2] = 4;   }  } } for (p = 0; p < 16; p++) {  int flag = 0;  for (q = 0; q < 16; q++)   if (map[WhatMap][p][q] == 3 || map[WhatMap][p][q] == 6)   {    flag = 1;    break;   }  if (flag)break; }  if (i != p || j != q)  stepnum++; 
 void ManLeft()
 {
 int p, q;for (int i = 0; i < 16; i++)  for (int j = 0; j < 16; j++)   map_temp_last[stepnum][i][j] = map[WhatMap][i][j]; //先找到人的位置 int i, j; for (i = 0; i < 16; i++) {  int flag = 0;  for (j = 0; j < 16; j++)   if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)   {    flag = 1;    break;   }  if (flag)break; } //人的位置是map[WhatMap][i][j];  //改变人的方向  //人的位置是空地 if (map[WhatMap][i][j] == 3) {  //人的左面是空地  if (map[WhatMap][i][j - 1] == 0)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i][j - 1] = 3;  }  //人的左面是目的地  else if (map[WhatMap][i][j - 1] == 2)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i][j - 1] = 6;  }  //人的左面是箱子  else if (map[WhatMap][i][j - 1] == 4)  {   //1.箱子左面是目的地   if (map[WhatMap][i][j - 2] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j - 1] = 3;    map[WhatMap][i][j - 2] = 5;   }   //2.箱子左面是空地   else if (map[WhatMap][i][j - 2] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j - 1] = 3;    map[WhatMap][i][j - 2] = 4;   }   }   //人的左边是箱子和目的地在一起  else if (map[WhatMap][i][j - 1] == 5)  {   //箱子右边是目的地   if (map[WhatMap][i][j - 2] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j - 1] = 6;    map[WhatMap][i][j - 2] = 5;   }    //箱子右边是空地   else if (map[WhatMap][i][j - 2] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i][j - 1] = 6;    map[WhatMap][i][j - 2] = 4;   }  } }   //人的位置是目的地 else if (map[WhatMap][i][j] == 6) {  //人的上面是空地   if (map[WhatMap][i][j - 1] == 0)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j - 1] = 3;  }  //人的上面是目的地  else if (map[WhatMap][i][j - 1] == 2)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j - 1] = 6;  }  //人的上面是箱子   else if (map[WhatMap][i][j - 1] == 4)  {   //1.箱子上面是目的地   if (map[WhatMap][i][j - 2] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j - 1] = 3;    map[WhatMap][i][j - 2] = 5;   }   //2.箱子上面是空地   else if (map[WhatMap][i][j - 2] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i][j - 1] = 3;    map[WhatMap][i][j - 2] = 4;   }   } } //人的左边是箱子和目的地在一起 else if (map[WhatMap][i][j - 1] == 5) {  //箱子左边是目的地  if (map[WhatMap][i][j - 2] == 2)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j - 1] = 6;   map[WhatMap][i][j - 2] = 5;  }   //箱子左边是空地  else if (map[WhatMap][i][j + 2] == 0)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i][j - 1] = 6;   map[WhatMap][i][j - 2] = 4;  } } for (p = 0; p < 16; p++) {  int flag = 0;  for (q = 0; q < 16; q++)   if (map[WhatMap][p][q] == 3 || map[WhatMap][p][q] == 6)   {    flag = 1;    break;   }  if (flag)break; }  if (i != p || j != q)  stepnum++; 
 void ManUp()
 {
 int p, q;
 for (int i = 0; i < 16; i++)
 for (int j = 0; j < 16; j++)
 map_temp_last[stepnum][i][j] = map[WhatMap][i][j];
 //先找到人的位置
 int i, j;
 for (i = 0; i < 16; i++)
 {
 int flag = 0;
 for (j = 0; j < 16; j++)
 if (map[WhatMap][i][j] == 3 || map[WhatMap][i][j] == 6)//人站在空地上或者人站在目的地上
 {
 flag = 1;
 break;
 }
 if (flag)break;
 }//人的位置已被记录 //人的位置是map[WhatMap][i][j];  //1.人的位置是空地 if (map[WhatMap][i][j] == 3) {  //人的上面是空地  if (map[WhatMap][i - 1][j] == 0)  {   map[WhatMap][i][j] = 0;//人变空地   map[WhatMap][i - 1][j] = 3;//空地变人  }  //人的上面是目的地  else if (map[WhatMap][i - 1][j] == 2)  {   map[WhatMap][i][j] = 0;   map[WhatMap][i - 1][j] = 6;//人和目的地咱一起  }  //人的上面是箱子  else if (map[WhatMap][i - 1][j] == 4)  {   //1.箱子上面是目的地   if (map[WhatMap][i - 2][j] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i - 1][j] = 3;    map[WhatMap][i - 2][j] = 5;   }   //2.箱子上面是空地   else if (map[WhatMap][i - 2][j] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i - 1][j] = 3;    map[WhatMap][i - 2][j] = 4;   }   }  //人的上面是箱子和目的地在一起  else if (map[WhatMap][i - 1][j] == 5)  {   //箱子上面是目的地   if (map[WhatMap][i - 2][j] == 2)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i - 1][j] = 6;    map[WhatMap][i - 2][j] = 5;   }    //箱子上面是空地   else if (map[WhatMap][i - 2][j] == 0)   {    map[WhatMap][i][j] = 0;    map[WhatMap][i - 1][j] = 6;    map[WhatMap][i - 2][j] = 4;   }  } }  //人的位置是目的地 else if (map[WhatMap][i][j] == 6) {  //人的上面是空地   if (map[WhatMap][i - 1][j] == 0)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i - 1][j] = 3;  }  //人的上面是目的地  else if (map[WhatMap][i - 1][j] == 2)  {   map[WhatMap][i][j] = 2;   map[WhatMap][i - 1][j] = 6;  }   //人的上面是箱子(有两种情况)   else if (map[WhatMap][i - 1][j] == 4)  {   //1箱子上面是目的地   if (map[WhatMap][i - 2][j] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i - 1][j] = 3;    map[WhatMap][i - 2][j] = 5;   }   //2箱子上面是空地   else if (map[WhatMap][i - 2][j] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i - 1][j] = 3;    map[WhatMap][i - 2][j] = 4;   }   }  //人的上面是箱子和目的地在一起  else if (map[WhatMap][i - 1][j] == 5)  {   //箱子上面是目的地   if (map[WhatMap][i - 2][j] == 2)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i - 1][j] = 6;    map[WhatMap][i - 2][j] = 5;   }    //箱子上面是空地   else if (map[WhatMap][i - 2][j] == 0)   {    map[WhatMap][i][j] = 2;    map[WhatMap][i - 1][j] = 6;    map[WhatMap][i - 2][j] = 4;   }  } } for (p = 0; p < 16; p++) {  int flag = 0;  for (q = 0; q < 16; q++)   if (map[WhatMap][p][q] == 3 || map[WhatMap][p][q] == 6)   {    flag = 1;    break;   }  if (flag)break; }  if (i != p || j != q)  stepnum++; 
 int GameOver()
 {
 //统计目的地的个数
 //每个地图的目的地个数不同,因此每次都要遍历地图数组
 int flag = 0;
 for (int i = 0; i < 16; i++)
 {
 for (int j = 0; j < 16; j++)
 {
 if (map[WhatMap][i][j] == 2)flag++;
 }
 }//箱子到达目的地的个数 //当箱子和目的地在一起的个数和目的地总数相等,则该关卡已完成 int count = 0; for (int i = 0; i < 16; i++) {  for (int j = 0; j < 16; j++)  {   if (map[WhatMap][i][j] == 4)count++;  } } if (count == 0 && flag == 0)return 1; else return 0; 
 void Welcome()
 {
 initgraph(16 * SPACE, 16 * SPACE);//初始化画图窗口loadimage(&welcome, "welcome.jpg", 16 * SPACE, 16 * SPACE);//导入欢迎界面(特别注意:双引号里面不能有空格,要跟图片命名完全一致) loadimage(&Create, "Create.jpg", 300, 100); loadimage(&Create, "Create.jpg", 300, 100); loadimage(&Create, "Create.jpg", 300, 100); loadimage(&Create, "Create.jpg", 300, 100);  putimage(0, 0, &welcome);//显示欢迎界面 putimage(300, 100, &Create); putimage(300, 200, &Create); putimage(300, 300, &Create); putimage(300, 400, &Create);  setbkmode(TRANSPARENT);//设置字体背景为透明 settextcolor(COLORREF(RGB(128, 255, 0)));//设置字体颜色为黑色  settextstyle(50, 0, _T("宋体"));//设置字体大小20,格式楷体 char r1[] = "地图编辑"; char r2[] = "开始游戏"; char r3[] = "退出游戏"; char r4[] = "游戏说明"; outtextxy(350, 430, r1); outtextxy(350, 130, r2); outtextxy(350, 230, r3); outtextxy(350, 330, r4);  MOUSEMSG msg;//定义变量,保存鼠标消息 FlushMouseMsgBuffer();// 清空鼠标消息缓冲区,避免无效鼠标信息带入到正式判断中 while (true) // 主循环,循环监听鼠标信息 {  while (MouseHit()) //监听鼠标信息;当有鼠标消息的时候执行,可检测连续的鼠标信息  {   msg = GetMouseMsg();//获取鼠标消息   if (WM_LBUTTONDOWN == msg.uMsg)//判断鼠标信息;鼠标左键按下   {    if (msg.x > 300 && msg.x < 900 && msg.y > 100 && msg.y < 200)//鼠标点击特定区域    {     initscreen(); return;    }    else if (msg.x > 300 && msg.x < 900 && msg.y > 200 && msg.y < 300)    {     exit(0);    }    else if (msg.x > 300 && msg.x < 900 && msg.y > 300 && msg.y < 400)    {     ShowText();     getch();     Welcome();     return;     }    else if (msg.x > 300 && msg.x < 900 && msg.y > 400 && msg.y < 500)     CreatMap();    return;   }   }  } 
 void ShowText()
 {
 initgraph(16 * SPACE, 16 * SPACE);
 loadimage(&helptext, “helptext.jpg”, 16 * SPACE, 16 * SPACE);
 putimage(0, 0, &helptext);setbkmode(TRANSPARENT);//设置字体背景为透明 settextcolor(COLORREF(RGB(0, 0, 0)));//设置字体颜色为黑色 settextstyle(40, 0, _T("楷体"));//设置字体大小20,格式楷体 char s1[] = "这是一个经典的推箱子游戏"; char s2[] = "使用方向键↑←↓→或者“w、a、s、d"; char s3[] = "(不区分大小写)控制人物来推动箱子"; char s4[] = "游戏开发者:扎扎西(单身可撩)"; char s5[] = "开发时间:2020.5.18"; char s6[] = "所有箱子到达目的地即可通关"; char s7[] = "按R/r键重启关卡,按Z/z键撤回前一步操作"; char s8[] = "除游戏控制外的操作支持鼠标点击"; char s9[] = "按任意键返回!!"; outtextxy(150, 270, s6); outtextxy(150, 150, s1); outtextxy(150, 190, s2); outtextxy(150, 230, s3); outtextxy(400, 450, s4); outtextxy(400, 490, s5); outtextxy(150, 310, s7); outtextxy(150, 350, s8); outtextxy(150, 610, s9); 
 void Reset()
 {
 stepnum = 0;//因为重启,步数归零
 for (int i = 0; i < 16; i++) //显示一行
 for (int j = 0; j < 16; j++) //显示一个格子
 map[WhatMap][i][j] = map_temp[WhatMap][i][j];
 }
 void Backstep()
 {if (stepnum < 0)  return; for (int i = 0; i < 16; i++) //显示一行  for (int j = 0; j < 16; j++) //显示一个格子   map[WhatMap][i][j] = map_temp_last[stepnum][i][j]; /  ```c 统计当前关卡中剩余的目的地数 int Boxnum() { int boxnum = 0; for (int m = 0; m < 16; m++) for (int n = 0; n < 16; n++)   if (map[WhatMap][m][n] == 4)    boxnum++; return boxnum;       ## 创建地图部分  ```c //#include"Thehead.h"//引用头文件 #include <stdio.h> #include <windows.h> #include <conio.h> #define SPACE 60 #include<graphics.h> #include<stdbool.h> #include<string.h>; void ShowhelpTxt(); IMAGE png1[12];//5张图,定义5个变量,定义一个数组 IMAGE background; IMAGE conti; #define N 16    //地图宽高  #define FLMOP "NewMap.txt"  void gotoxy(int x, int y);  //光标定位 void TranMap();              //翻译输出地图 void Control();            //控制移动和设置元素函数  int cmap[N][N];      //地图数组 char ck;            //读方向键 int x, y;           //光标坐标(x*2)  int CreatMap()                 //主函数控制所有 {  initgraph(16 * SPACE, 16 * SPACE);//初始化画图窗口   //输出使用说明  ShowhelpTxt();  TranMap();              //输出地图   while (1)  {     Control(); //控制光标移动    }   Sleep(60);  return 0;   }  void dszcz()             //编辑结束后输出数组 {   char s[] = "是否确认保存地图,确认请按Y";  outtextxy(250, 50, s);  char tch = _getch();   if (tch != 'y') return;     //输入y确认继续   FILE* fp = NULL;            //将地图数组保存进所选文件路径中  fopen_s(&fp, FLMOP, "a+");  //追加方式打开文件   if (fp)  {   for (int i = 0; i < N; i++) //将地图信息写入文件   {    for (int j = 0; j < N; j++)     fprintf(fp, "%d ", cmap[i][j]);    fprintf(fp, "n");    }   fprintf(fp, "n");   fclose(fp);  }   char q[] = "恭喜!地图信息添加成功";  outtextxy(250, 50, q);   exit(0); }  void Control() {  loadimage(&png1[0], _T("0.jpg"), SPACE, SPACE, true);  loadimage(&png1[1], _T("1.jpg"), SPACE, SPACE, true);  loadimage(&png1[2], _T("2.jpg"), SPACE, SPACE, true);  loadimage(&png1[3], _T("3.jpg"), SPACE, SPACE, true);  loadimage(&png1[4], _T("4.jpg"), SPACE, SPACE, true);  loadimage(&png1[5], _T("5.jpg"), SPACE, SPACE, true);    ck = _getch();              //接收   switch (ck)  {  case 'w':     y--;          //光标移动   if (y < 0)          //对光标的移动位置加以限制   {    y = 0;    return;   }   break;   case 'a':     x--;   if (x < 0)   {    x = 0;    return;   }   break;   case 's':     y++;   if (y > 15)   {    y = 15;    return;   }   break;   case 'd':     x++;   if (x > 15)   {    x = 15;    return;   }   break;   case '1':   putimage(x * SPACE, y * SPACE, &png1[1]); break;  case '2':   putimage(x * SPACE, y * SPACE, &png1[2]); break;  case '3':   putimage(x * SPACE, y * SPACE, &png1[3]); break;  case '4':   putimage(x * SPACE, y * SPACE, &png1[4]); break;  default:   putimage(x * SPACE, y * SPACE, &png1[0]);   ck = '0';    //输入其他ch为0空格,就是打印空地   break;  case 'z':   dszcz();            //z结束编辑地图  }   if (ck != 'w' && ck != 'a' && ck != 's' && ck != 'd' && ck != 'z')  //不是移动和保存时,将ck值存储进数组中   cmap[y][x] = ck - '0'; }  void TranMap()       //输出初始地图 {  loadimage(&png1[0], _T("0.jpg"), SPACE, SPACE, true);  loadimage(&png1[1], _T("1.jpg"), SPACE, SPACE, true);  loadimage(&png1[2], _T("2.jpg"), SPACE, SPACE, true);  loadimage(&png1[3], _T("3.jpg"), SPACE, SPACE, true);  loadimage(&png1[4], _T("4.jpg"), SPACE, SPACE, true);  loadimage(&png1[5], _T("5.jpg"), SPACE, SPACE, true);  loadimage(&png1[6], _T("6.jpg"), SPACE, SPACE, true);  int i, j;           //循环用变量  //gotoxy(0, 0);  for (i = 0; i < N; i++)  {   for (j = 0; j < N; j++)   {    putimage(j * SPACE, i * SPACE, &png1[cmap[i][j]]);   }   }  }   void ShowhelpTxt() {  loadimage(&background, "background.jpg", 16 * SPACE, 16 * SPACE);  putimage(0, 0, &background);//显示界面  loadimage(&conti, "continue.jpg", 100, 50);  putimage(600, 600, &conti);  //显示文档文字  setbkmode(TRANSPARENT);//设置字体背景为透明  settextcolor(COLORREF(RGB(0, 0, 0)));//设置字体颜色为黑色  settextstyle(40, 0, _T("楷体"));//设置字体大小20,格式楷体  char c1[] = "显示16*16的地图方格";  char c2[] = "使用“w、a、s、d";  char c3[] = "移动光标(记得调成英文输入法)";  char c4[] = "左上角第一格为光标的坐标(0,0),以此类推";  char c5[] = "按下1将光标处设置为墙,2设置为目标";  char c6[] = "3设置为人,4设置为箱子,其余部分自动认为空地";  char c7[] = "按z保存地图。如果想要使用自己的地图";  char c8[] = "则需要更改路径为Newmap.txt!";  outtextxy(150, 270, c4);  outtextxy(150, 150, c1);  outtextxy(150, 190, c2);  outtextxy(150, 230, c3);  outtextxy(150, 390, c7);  outtextxy(150, 430, c8);  outtextxy(150, 310, c5);  outtextxy(150, 350, c6);   MOUSEMSG msg1;  while (true) // 主循环,循环监听鼠标信息  {   while (MouseHit()) //监听鼠标信息;当有鼠标消息的时候执行,可检测连续的鼠标信息   {    msg1 = GetMouseMsg();//获取鼠标消息    if (WM_LBUTTONDOWN == msg1.uMsg)//判断鼠标信息;鼠标左键按下    {     if (msg1.x > 600 && msg1.x < 700 && msg1.y > 600 && msg1.y < 650)//鼠标点击特定区域     {      return;     }     }    }   }  return; }  
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算
 官方软件产品操作指南 (170)
官方软件产品操作指南 (170)