一天下午,覺得學了這么久編程自己也得做點什么玩
一開始,我想做這個小游戲,但是考慮了很久的邏輯,終于想出來了哈
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define W 'O'
#define E ' '
#define T 'N'
char Tran(char DATA) {
char New_DATA=DATA;
if (DATA < 97) {
New_DATA = New_DATA + 32;
}
return New_DATA;
}
int main() {
char map[13][12] =
{
E,W,E,W,W,W,W,W,E,W,E,W,//1
E,W,E,W,E,E,W,E,E,W,E,W,//2
E,W,E,E,E,W,W,E,W,E,E,W,//3
E,W,W,E,E,E,W,E,E,E,W,W,//4
E,W,E,E,W,E,E,E,W,W,W,W,//5
E,W,E,E,W,E,W,E,W,W,E,W,//6
E,W,E,W,E,E,W,W,W,E,E,W,//7
E,W,E,E,W,E,W,E,W,W,W,W,//8
E,W,E,W,W,E,W,E,W,W,W,W,//9
E,W,E,W,E,W,E,W,E,W,E,W,//10
E,W,E,E,W,E,E,E,W,W,E,W,//11
E,W,E,E,W,E,W,W,E,W,E,W,//12
E,W,T,W,W,W,W,W,W,W,W,W//13
};
int _X = 12;
int _Y = 2;
char c;
int Step=0;
while (1) {
printf("\n");
for (int i = 0; i < sizeof(map)/12; i++) {
for (int j = 0; j < 12; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
if (map[0][2] == T || map[0][8]==T || map[0][10]==T) {
MessageBox(NULL, L"你贏了", L"標題", MB_OK | MB_ICONINFORMATION);
printf(" 步數:%d", Step);
Sleep(2000);
system("cls");
Step = 0;
main();
}
else {
c = _getch();
if (Tran(c) == 'w' && map[_X - 1][_Y] != W) {
map[_X - 1][_Y] = T;
map[_X][_Y] = E;
_X = _X - 1;
}
else if (Tran(c) == 'a' && map[_X][_Y - 1] != W) {
map[_X][_Y - 1] = T;
map[_X][_Y] = E;
_Y = _Y - 1;
}
else if (Tran(c) == 's' && map[_X + 1][_Y] == E) {
map[_X + 1][_Y] = T;
map[_X][_Y] = E;
_X = _X + 1;
}
else if (Tran(c) == 'd' && map[_X][_Y + 1] != W) {
map[_X][_Y + 1] = T;
map[_X][_Y] = E;
_Y = _Y + 1;
}
}
Step += 1;
system("cls");
}
}
我們看到代碼
我一個個做解釋
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
#define W 'O'
#define E ' '
#define T 'N'
三個頭檔案的匯入,因為這個程式有一個函式是getch(),但是在Visual Studio只能寫_getch()
宏定義:
W 是墻,你可以嘗試自己更改字符
E 是迷宮的空格
T 是角色
但是這個地圖做的簡單
char map[13][12] =
{
E,W,E,W,W,W,W,W,E,W,E,W,//1
E,W,E,W,E,E,W,E,E,W,E,W,//2
E,W,E,E,E,W,W,E,W,E,E,W,//3
E,W,W,E,E,E,W,E,E,E,W,W,//4
E,W,E,E,W,E,E,E,W,W,W,W,//5
E,W,E,E,W,E,W,E,W,W,E,W,//6
E,W,E,W,E,E,W,W,W,E,E,W,//7
E,W,E,E,W,E,W,E,W,W,W,W,//8
E,W,E,W,W,E,W,E,W,W,W,W,//9
E,W,E,W,E,W,E,W,E,W,E,W,//10
E,W,E,E,W,E,E,E,W,W,E,W,//11
E,W,E,E,W,E,W,W,E,W,E,W,//12
E,W,T,W,W,W,W,W,W,W,W,W//13
};
迷宮的定義
最外邊給的是視覺效果
int _X = 12;
int _Y = 2;
char c;
int Step=0;
變數定義:
_X,_Y,相當于二位陣列的兩個常量運算式
c,用戶輸入的
Step,步數
while(1){}//回圈為真:無限回圈
函式定義:將大寫字母轉化為小寫
char Tran(char DATA) {
char New_DATA=DATA;
if (DATA < 97) {
New_DATA = New_DATA + 32;
}
return New_DATA;
}
繪制地圖
printf("\n");
for (int i = 0; i < sizeof(map)/12; i++) {
for (int j = 0; j < 12; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
邏輯
c = _getch();
if (Tran(c) == 'w' && map[_X - 1][_Y] != W) {
map[_X - 1][_Y] = T;
map[_X][_Y] = E;
_X = _X - 1;
}
else if (Tran(c) == 'a' && map[_X][_Y - 1] != W) {
map[_X][_Y - 1] = T;
map[_X][_Y] = E;
_Y = _Y - 1;
}
else if (Tran(c) == 's' && map[_X + 1][_Y] == E) {
map[_X + 1][_Y] = T;
map[_X][_Y] = E;
_X = _X + 1;
}
else if (Tran(c) == 'd' && map[_X][_Y + 1] != W) {
map[_X][_Y + 1] = T;
map[_X][_Y] = E;
_Y = _Y + 1;
}
}
勝利條件:
if (map[0][2] == T || map[0][8]==T || map[0][10]==T) {
MessageBox(NULL, L"你贏了", L"標題", MB_OK | MB_ICONINFORMATION);
printf(" 步數:%d", Step);
Sleep(2000);
system("cls");
Step = 0;
main();
}
當這幾個坐標為T時,彈出提示框
Sleep(2000),2000毫秒(2秒)后清屏,步數清理,然后呼叫遞回函式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263358.html
標籤:其他
