C語言基礎 二維陣列應用 一 井字棋

2021-10-10 09:05:28 字數 3278 閱讀 8156

陣列是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 可以將所有元素解除安裝乙個...