陣列是c語言中一種重要的資料型別,接下來我和大家分享用二維陣列完成乙個井字棋遊戲。
井字棋,是一種在3*3格仔上進行的連珠遊戲,和五子棋類似。遊戲需要的工具僅為紙和筆,然後由分別代表o和x的兩個遊戲者輪流在格仔裡留下標記(一般來說先手者為x),任意三個標記形成一條直線,則為獲勝。井字棋的規則想必大家都已非常清楚,下面來簡單梳理一下完成這個遊戲的主要思路
一、變數的定義
1、首先要定義棋盤變數為乙個3*3的二維陣列
char board[3][3]。
2、用乙個int型的變數來表示棋盤上棋子的個數,初始值為0
int numberofpieces 。
3、用乙個char型的變數來表示遊戲的贏家是誰(這是遊戲是否能夠繼續進行下去的關鍵),當該變數為' '時表示勝負未分,遊戲繼續;為' o '時表示電腦獲勝;為' x '時表示玩家獲勝;為' * '時表示玩家與電腦平手;初始值為' '
char winer
二、遊戲步驟
1、初始化棋盤,將棋盤上的每乙個元素賦為' ';
2、列印棋盤;
3、玩家落子,棋盤上的棋子數加一;
需注意 (1)、判斷該位置是否已經有子;
(2)、判斷玩家落子位置是否出界;
4、列印棋盤;
5、判斷勝負,遊戲是否繼續;
需注意(1)、判斷所有行
(2)、判斷所有列
(3)、判斷所有對角線
6、判斷結果為勝負未分則繼續,否則告知玩家遊戲結果並結束遊戲;
7、電腦隨機落子(用隨機數生成落子的座標)
需注意(1)、用隨機數生成座標時棋子位置不能超界;
(2)、判斷該位置是否已經有子;
8、列印棋盤;
9、判斷勝負,同5;
10、判斷結果為勝負未分則回到步驟3,否則告知玩家遊戲結果並結束遊戲;
三、**實現
#define max_row 3
#define max_column 3
#define _crt_secure_no_warnings
#include #include #include int menu()
//棋盤初始化,無落子
void initboard(char newboard[max_row][max_column]) }}
void printboard(char chessboard[max_row][max_column])
// printf("\n");
//}// 上面的**雖然能夠列印出棋盤, 但是都是空格, 看不清.
// 最好讓元素能有邊框
printf("+---+---+---+\n");
for (int row = 0; row < max_row; row++)
}//玩家落子
void playerdo(char board[max_row][max_column], int* numberofpieces)//判斷玩家落子位置是否已經有子
else if (board[row][col] != ' ')
else
} board[row][col] = 'x';
*numberofpieces = *numberofpieces + 1;
printf("現在落子%d顆\n", *numberofpieces);
}//電腦落子
void computerdo(char board[max_row][max_column], int* numberofpieces)
} board[row][col] = 'o';
*numberofpieces = *numberofpieces + 1;
}//判斷棋盤是否下滿,1表示下滿,0表示未下滿
int isfull(int numberofpieces)
//判斷勝負,返回值為'x'玩家贏,返回值為'o'電腦贏,返回值為'*'平手,返回值為' '繼續
char whoiswiner(char board[max_row][max_column],int numberofpieces)
} //判斷所有列
for (int col = 0; col < max_column; col++)
} //判斷所有對角線
if (board[1][1] != ' '&&
board[1][1] == board[0][0] &&
board[2][2] == board[0][0])
if (board[1][1] != ' '&&
board[0][2] == board[1][1] &&
board[1][1] == board[2][0])
//判斷棋盤是否下滿
if (isfull(numberofpieces) == 0)
return '*';
}void game()
// if (whoiswiner(board) == 'x')
// if (whoiswiner(board) == '*')
//}winer = whoiswiner(board, numberofpieces);
if (winer != ' ')
//6.電腦隨機落子,電腦的子用o表示
computerdo(board, &numberofpieces);
//7.列印棋盤
printboard(board);
//8.判斷勝負
winer = whoiswiner(board, numberofpieces);
if (winer != ' ')
//if (isfull(numberofpieces) == 1)
// if (whoiswiner(board) == 'x')
// if (whoiswiner(board) == '*')
//}} if (winer == 'x')
if (winer == 'o')
if (winer == '*')
}int main()
else if (chioce == 2)
else
} system("pause");
return 0;
}
大家可以自己在電腦上敲一下這個**,實現過程還是非常有意思的。 C語言,二維陣列模擬井字棋遊戲開發
includeint main void 以下為二維陣列的初始化 int b 5 得出結論。一,行數可以不寫,可以由編譯器來數,但是列數一定要標出來 二,如果有沒被定義值的陣列自動賦值為零 三,每行乙個 逗號分隔 小知識 陣列的名字加下標等於變數 以下是模擬井字棋的遊戲開發思路 讀入矩陣 const...
C語言二維陣列應用 三子棋
函式宣告寫在標頭檔案game.h中 ifndef game h define game h define row 3 include includevoid initboard char board row int row,int col,char set void showboard char b...
C語言基礎二維陣列
1 二位陣列的定義int array n m 行下標的取值範圍是0 n 1,列下標的取值範圍是0 m 1,二維陣列最大下標元素是array n 1 m 1 如定義乙個3行4列的陣列 int array 3 4 二位陣列在引用時也要注意數界限的問題。2 二維陣列的初始化 1 可以將所有元素解除安裝乙個...