一、总结
一句话总结:
显示:根据map数组输出图像
走动:修改map数组的值,每走一步重新刷新一下图像就好
1、如果走函数用z(),出现输入s会向下走多步的情况,原因是什么?
向下走两层循环ij增加,而向下走i也是增加的,所以break跳出j后,照样找到i不误,所以会一直走到不能走为止
//走动函数 void z(){ char c=getch(); //下 if(c=='s') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { //找到人物所在的位置 if(map[i][j]==3&&map[i+1][j]!=1) { map[i+1][j]=3;//下面的位置变成人物所在的位置 map[i][j]=0;//走过的地方变成0 break; } } } } //上 if(c=='w') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i-1][j]!=1) { map[i-1][j]=3; map[i][j]=0; break; } } } } //左 if(c=='a') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i][j-1]!=1) { map[i][j-1]=3; map[i][j]=0; break; } } } } //右 if(c=='d') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i][j+1]!=1) { map[i][j+1]=3; map[i][j]=0; break; } } } } }
二、内容在总结中
截图:
wsad分别对应上下左右
代码:
#include<cstdio> #include<windows.h> #include<conio.h> int map[10][10]={{1,1,1,1,3,1,1,1,1,1}, {1,0,0,0,0,0,0,1,1,1}, {1,0,0,1,0,1,0,0,1,1}, {1,1,0,1,1,0,0,1,1,1}, {1,0,0,0,1,0,0,0,0,1}, {1,1,0,0,1,1,0,1,0,1}, {1,1,0,1,0,1,1,0,0,1}, {1,0,0,0,1,1,1,1,0,1}, {1,1,1,1,1,1,1,1,2,1}}; int pos_y=0;//人物的y坐标 int pos_x=4;//人物的x坐标 //打印地图 void jzmap() { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==0) printf(" ");//可走的地方 if(map[i][j]==1) printf("■");//障碍 if(map[i][j]==2) printf("!!");//出口 if(map[i][j]==3) printf("* ");//人物所在的位置 } printf("\n"); } } //走动函数2 void z2(){ char c=getch(); //下 if(c=='s') { //找到人物所在的位置 if(map[pos_y][pos_x]==3&&map[pos_y+1][pos_x]!=1) { map[pos_y+1][pos_x]=3;//下面的位置变成人物所在的位置 map[pos_y][pos_x]=0;//走过的地方变成0 pos_y++; } } //上 if(c=='w') { if(map[pos_y][pos_x]==3&&map[pos_y-1][pos_x]!=1) { map[pos_y-1][pos_x]=3; map[pos_y][pos_x]=0; pos_y--; } } //左 if(c=='a') { if(map[pos_y][pos_x]==3&&map[pos_y][pos_x-1]!=1) { map[pos_y][pos_x-1]=3; map[pos_y][pos_x]=0; pos_x--; } } //右 if(c=='d') { if(map[pos_y][pos_x]==3&&map[pos_y][pos_x+1]!=1) { map[pos_y][pos_x+1]=3; map[pos_y][pos_x]=0; pos_x++; } } } //走动函数 void z(){ char c=getch(); int has_zou=0; //下 if(c=='s') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { //找到人物所在的位置 if(map[i][j]==3&&map[i+1][j]!=1&&!has_zou) { has_zou=1; map[i+1][j]=3;//下面的位置变成人物所在的位置 map[i][j]=0;//走过的地方变成0 break; } } } } //上 if(c=='w') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i-1][j]!=1&&!has_zou) { has_zou=1; map[i-1][j]=3; map[i][j]=0; break; } } } } //左 if(c=='a') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i][j-1]!=1&&!has_zou) { has_zou=1; map[i][j-1]=3; map[i][j]=0; break; } } } } //右 if(c=='d') { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==3&&map[i][j+1]!=1&&!has_zou) { has_zou=1; map[i][j+1]=3; map[i][j]=0; break; } } } } } void yx() { jzmap();//重绘地图 //z(); z2();//走操作 } //结束 bool js() { for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { if(map[i][j]==map[9][8]) { return 1; } else{ return 0; } } } } int main() { for(int i=0;i<100;i++) { system("cls"); yx(); if(js()) { system("cls"); printf("game over!"); return 0; } } return 0; }