一、绘制地图并且打印出来!
这里应用二维数组【如果设置多关卡,可以用三维数组!】
1、用数字描绘出地图。
2、再引用对应的字符或者图片代替数字。
简单两步就可以实现地图绘制啦!
【代码示例】
int map[10][10] = { 1,1,1,1,1,1,1,1,1,1, 1,0,1,1,3,0,0,0,1,1, 1,0,1,1,1,1,0,0,1,1, 1,0,1,1,1,1,0,0,1,1, 1,4,0,0,0,0,0,0,1,1, 1,0,1,0,1,1,0,0,1,1, 1,0,1,0,0,2,0,0,0,3, 1,0,1,2,1,1,0,1,1,1, 1,0,0,0,0,0,0,1,1,1, 1,1,1,1,1,1,1,1,1,1 }; //0= ;1=墙;2=■;3=洞;4=人;5=人+洞;6=※==箱子+洞口; void showmap() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (map[i][j] == 1) { printf("墙"); } else if (map[i][j] == 0) { printf(" "); } else if (map[i][j] == 2) { printf("■"); } else if (map[i][j] == 3) { printf("洞"); } else if (map[i][j] == 4) { printf("人"); } else if (map[i][j] == 5) { printf("人"); } else if (map[i][j] == 6) { printf("※"); } } printf("\n"); } };
二、我们玩游戏首先肯定要先找到人的位置!
这里只需要遍历所有的数组内容,确定人的坐标即可!
1、使用 for 循环 + if 条件
2、在找到人的坐标时,使用其他字母(k,l)替换以达到确定人的坐标的目的!
【!!!为下一步人的行为做出铺垫!!!】
【代码示例】
//找到人的位置--4==[5][2] int k = 0, l = 0, i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (map[i][j] == 4 || map[i][j] == 5) { k = i; l = j; } } }
三、推动箱子函数创建!
1、定义 “ 推” :选择_getch()函数!!!——包含于头文件---<conio.h>!!!
使用 '' _getch() '' :用户按下按键后直接响应!!!
使用 “ getchar () ” :用户按下按键时,需要必须按一下 Enter 键,该代码才会继续运行!!!
2、用 “switch” 函数对按键分析
【代码示例】
//推动起来!!! int tui; tui = _getch(); switch (tui) { case'w': if (map[k - 1][l] == 0)//空地自由走 { if (map[k][l] == 5) { map[k - 1][l] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k - 1][l] += 4; map[k][l] -= 4; } } else if (map[k - 1][l] == 2)//箱子被推动 {//箱子前面是空地||洞口 if (map[k - 2][l] == 0) { map[k - 2][l] += 2; map[k - 1][l] += 2; map[k][l] -= 4; } else if (map[k - 2][l] == 3) { map[k - 2][l] += 3; map[k - 1][l] += 2; map[k][l] -= 4; } } else if (map[k - 1][l] == 3)//洞口+人==5 { map[k - 1][l] += 2; map[k][l] -= 4; } break; case'a': if (map[k][l - 1] == 0) { if (map[k][l] == 5) { map[k][l - 1] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k][l - 1] += 4; map[k][l] -= 4; } } else if (map[k][l - 1] == 2) { if (map[k][l - 2] == 0) { map[k][l - 2] += 2; map[k][l - 1] += 2; map[k][l] -= 4; } else if (map[k][l - 2] == 3) { map[k][l - 2] += 3; map[k][l - 1] += 2; map[k][l] -= 4; } } else if (map[k][l - 1] == 3)//洞口+人==5 { map[k][l - 1] += 2; map[k][l] -= 4; } break; case's': if (map[k + 1][l] == 0) { if (map[k][l] == 5) { map[k + 1][l] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k + 1][l] += 4; map[k][l] -= 4; } } else if (map[k + 1][l] == 2) { if (map[k + 2][l] == 0) { map[k + 2][l] += 2; map[k + 1][l] += 2; map[k][l] -= 4; } else if (map[k + 2][l] == 3) { map[k + 2][l] += 3; map[k + 1][l] += 2; map[k][l] -= 4; } } else if (map[k + 1][l] == 3)//洞口+人==5 { map[k + 1][l] += 2; map[k][l] -= 4; } break; case'd': if (map[k][l + 1] == 0) { if (map[k][l] == 5) { map[k][l + 1] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k][l + 1] += 4; map[k][l] -= 4; } } else if (map[k][l + 1] == 2) { if (map[k][l + 2] == 0) { map[k][l + 2] += 2; map[k][l + 1] += 2; map[k][l] -= 4; } else if (map[k][l + 2] == 3) { map[k][l + 2] += 3; map[k][l + 1] += 2; map[k][l] -= 4; } } else if (map[k][l + 1] == 3)//洞口+人==5 { map[k][l + 1] += 2; map[k][l] -= 4; } break; default: break; }
四、最后的胜利判定放置于主函数中:
1、主函数用系统清屏 “system("cls");”【一键清屏,世界安宁!】每次按键都是一次清屏
2、胜利判定:
a、遍历数组——寻找箱子,并记录箱子数目;
b、对箱子书进行判定——若 “ 箱子数==0 ” ,则表示已经胜利!!!
c、使用 break---跳出 while 死循环,并重新打印胜利界面!!!【可以引用图片或者音乐等等奖励】
【代码示例】
int main() { while (1) { system("cls"); system("color 5e"); showmap(); playgame(); int n = 0; for (int a = 0; a < 10; a++) { for (int b = 0; b < 10; b++) { if (map[a][b] == 2) { n++; } } } if (n == 0) { system("cls"); printf("!!!XXXX亲制!!!\n"); printf("恭喜您获得了胜利!!!\n"); system("pause\n"); break; } } return 0; };
最后——下面就是源码全文分析
加入头文件就可以开始跑起来啦!
希望可以帮助到你!!!
【源码全文分析】
#include <stdio.h> #include <stdlib.h> #include <conio.h> int map[10][10] = { 1,1,1,1,1,1,1,1,1,1, 1,0,1,1,3,0,0,0,1,1, 1,0,1,1,1,1,0,0,1,1, 1,0,1,1,1,1,0,0,1,1, 1,4,0,0,0,0,0,0,1,1, 1,0,1,0,1,1,0,0,1,1, 1,0,1,0,0,2,0,0,0,3, 1,0,1,2,1,1,0,1,1,1, 1,0,0,0,0,0,0,1,1,1, 1,1,1,1,1,1,1,1,1,1 }; //0= ;1=墙;2=■;3=洞;4=人;5=人+洞;6=※==箱子+洞口; void showmap() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (map[i][j] == 1) { printf("墙"); } else if (map[i][j] == 0) { printf(" "); } else if (map[i][j] == 2) { printf("■"); } else if (map[i][j] == 3) { printf("洞"); } else if (map[i][j] == 4) { printf("人"); } else if (map[i][j] == 5) { printf("人"); } else if (map[i][j] == 6) { printf("※"); } } printf("\n"); } }; void playgame() { //找到人的位置--4==[5][2] int k = 0, l = 0, i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { if (map[i][j] == 4 || map[i][j] == 5) { k = i; l = j; } } } //推动起来!!! int tui; tui = _getch(); switch (tui) { case'w': if (map[k - 1][l] == 0)//空地自由走 { if (map[k][l] == 5) { map[k - 1][l] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k - 1][l] += 4; map[k][l] -= 4; } } else if (map[k - 1][l] == 2)//箱子被推动 {//箱子前面是空地||洞口 if (map[k - 2][l] == 0) { map[k - 2][l] += 2; map[k - 1][l] += 2; map[k][l] -= 4; } else if (map[k - 2][l] == 3) { map[k - 2][l] += 3; map[k - 1][l] += 2; map[k][l] -= 4; } } else if (map[k - 1][l] == 3)//洞口+人==5 { map[k - 1][l] += 2; map[k][l] -= 4; } break; case'a': if (map[k][l - 1] == 0) { if (map[k][l] == 5) { map[k][l - 1] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k][l - 1] += 4; map[k][l] -= 4; } } else if (map[k][l - 1] == 2) { if (map[k][l - 2] == 0) { map[k][l - 2] += 2; map[k][l - 1] += 2; map[k][l] -= 4; } else if (map[k][l - 2] == 3) { map[k][l - 2] += 3; map[k][l - 1] += 2; map[k][l] -= 4; } } else if (map[k][l - 1] == 3)//洞口+人==5 { map[k][l - 1] += 2; map[k][l] -= 4; } break; case's': if (map[k + 1][l] == 0) { if (map[k][l] == 5) { map[k + 1][l] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k + 1][l] += 4; map[k][l] -= 4; } } else if (map[k + 1][l] == 2) { if (map[k + 2][l] == 0) { map[k + 2][l] += 2; map[k + 1][l] += 2; map[k][l] -= 4; } else if (map[k + 2][l] == 3) { map[k + 2][l] += 3; map[k + 1][l] += 2; map[k][l] -= 4; } } else if (map[k + 1][l] == 3)//洞口+人==5 { map[k + 1][l] += 2; map[k][l] -= 4; } break; case'd': if (map[k][l + 1] == 0) { if (map[k][l] == 5) { map[k][l + 1] += 4; map[k][l] -= 2; } else if (map[k][l] == 4) { map[k][l + 1] += 4; map[k][l] -= 4; } } else if (map[k][l + 1] == 2) { if (map[k][l + 2] == 0) { map[k][l + 2] += 2; map[k][l + 1] += 2; map[k][l] -= 4; } else if (map[k][l + 2] == 3) { map[k][l + 2] += 3; map[k][l + 1] += 2; map[k][l] -= 4; } } else if (map[k][l + 1] == 3)//洞口+人==5 { map[k][l + 1] += 2; map[k][l] -= 4; } break; default: break; } }; int main() { while (1) { system("cls"); system("color 5e"); showmap(); playgame(); int n = 0; for (int a = 0; a < 10; a++) { for (int b = 0; b < 10; b++) { if (map[a][b] == 2) { n++; } } } if (n == 0) { system("cls"); printf("!!!XXX亲制!!!\n"); printf("恭喜您获得了胜利!!!\n"); system("pause\n"); break; } } return 0; };