代碼實現
1 #include<stdio.h> 2 #include<windows.h> 3 #include<conio.h> 4 char* playerPosition, *boxPosition[2]; 5 /*初始化地圖 6 map:地圖數組 7 n: 地圖的行數 8 m: 地圖的列數*/ 9 void csh(char map[15][15], int n, int m) 10 { 11 12 for (int i = 0;i < n;i++) 13 for (int j = 0;j < m;j++) 14 map[i][j] = ' '; 15 16 } 17 /*控制角色向上移動 18 map:地圖數組*/ 19 void move(int moveX, int moveY) 20 { 21 int i = 0; 22 23 moveY = moveY * 15; 24 if (*(playerPosition + (moveX + moveY)) != '@') 25 { 26 if (*(playerPosition + (moveX + moveY)) == '*' ) 27 { 28 if (*(playerPosition + 2* (moveX + moveY)) != '@') 29 { 30 if (playerPosition + (moveX + moveY) == boxPosition[0]) 31 i = 0; 32 else 33 i = 1; 34 *boxPosition[i] = ' '; 35 boxPosition[i] += (moveX + moveY); 36 *boxPosition[i] = '*'; 37 *playerPosition = ' '; 38 playerPosition += (moveX + moveY); 39 *playerPosition = '8'; 40 } 41 } 42 else 43 { 44 *playerPosition = ' '; 45 playerPosition += (moveX+moveY); 46 *playerPosition = '8'; 47 } 48 } 49 50 } 51 /*輸出結果 52 map:地圖數組 53 n: 地圖的行數 54 m: 地圖的列數*/ 55 void sc(char map[15][15],int n,int m) 56 { 57 for (int i = 0;i < n;i++) 58 { 59 for (int j = 0;j < m;j++) 60 printf("%c ", map[i][j]); 61 printf("\n"); 62 } 63 } 64 /*進行重開、跳關、移動的判斷,進入相應的函數,並傳參給相應函數 65 map:地圖數組*/ 66 char pd(char map[15][15]) 67 { 68 char pd; 69 70 pd = _getch(); 71 switch (pd) 72 { 73 case 'w':move(0,-1);break; 74 case 's':move(0, 1);break; 75 case 'a':move(-1, 0);break; 76 case 'd':move(1, 0);break; 77 case 13:return 1;break; 78 case 32:return 2; 79 } 80 return 0; 81 } 82 83 /*第一關*/ 84 void diyiguan() 85 { 86 int cnt = 0; 87 char map[15][15],cz; 88 boolean isEnd = false, isAgain = false, isNext = false; 89 90 csh(map, 8, 6); 91 //生成地圖 92 map[0][1] = map[0][2] = map[0][0] = map[1][0] = map[2][0] = map[3][0] = map[4][0] = map[5][0] = map[6][0] = map[7][0] = map[7][1] = map[7][2] = map[7][3] = map[6][3] = map[5][3] = map[4][3] = map[4][4] = map[4][5] = map[2][3] = map[2][4] = map[2][5] = map[3][5] = map[1][2] = map[2][2] = '@'; 93 map[6][2] = 'O'; 94 playerPosition = &map[3][1]; 95 *playerPosition = '8'; 96 boxPosition[0] = &map[4][2]; 97 *boxPosition[0] = '*'; 98 99 100 //開始游戲 101 sc(map, 8, 6); 102 printf("第一關"); 103 while (!isEnd && !isAgain && !isNext) 104 { 105 cz = pd(map); 106 cnt++; 107 if (map[6][2] == ' ') 108 map[6][2] = 'O'; 109 if (cz == 1) isAgain = true; 110 if (cz == 2) isNext = true; 111 system("cls"); 112 sc(map, 8, 6); 113 printf("已走 % d步\n第二關, 點擊回車重開本關,點擊空格跳過本關",cnt); 114 if (map[6][2] == '*') 115 isEnd = true; 116 } 117 system("cls"); 118 if (cz == 1) 119 diyiguan(); 120 121 122 123 } 124 /*第二關*/ 125 void dierguan() 126 { 127 int cnt = 0; 128 char map[15][15], cz; 129 boolean isEnd = false, isAgain = false, isNext = false; 130 131 csh(map, 8, 6); 132 //生成地圖 133 for (int i = 0;i <= 5; i++) 134 map[0][i] = map[7][i]='@'; 135 for (int i = 0;i <= 7; i++) 136 map[i][0] = map[i][5] = '@'; 137 map[4][4]='@'; 138 map[6][2] = 'O'; 139 map[6][4] = 'O'; 140 playerPosition = &map[3][1]; 141 *playerPosition = '8'; 142 boxPosition[0] = &map[4][2]; 143 *boxPosition[0] = '*'; 144 boxPosition[1] = &map[3][3]; 145 *boxPosition[1] = '*'; 146 147 148 //開始游戲 149 sc(map, 8, 6); 150 printf("第二關"); 151 while (!isEnd && !isAgain && !isNext) 152 { 153 cz = pd(map); 154 cnt++; 155 if (map[6][2] == ' ')map[6][2] = 'O'; 156 if (map[6][4] == ' ')map[6][4] = 'O'; 157 if (cz == 1) isAgain = true; 158 if (cz == 2) isNext = true; 159 system("cls"); 160 sc(map, 8, 6); 161 printf("已走%d步\n第二關,點擊回車重開本關,點擊空格跳過本關",cnt); 162 if (map[6][2] == '*'&&map[6][4]=='*') 163 isEnd = true; 164 } 165 system("cls"); 166 if (cz == 1) 167 dierguan(); 168 } 169 170 void main() 171 { 172 diyiguan(); 173 dierguan(); 174 printf("\n恭喜你成功通關(這么簡單的關卡真的有什么好恭喜的嗎?)\n"); 175 }
運行截圖