C語言三子棋小遊戲的實現

2022-09-25 05:06:09 字數 3217 閱讀 4105

前言

三子棋又叫九宮棋、圈圈叉叉、一條龍、井字棋等。

三子棋遊戲規則:三子連成一片即為贏,如果雙方都沒有連成線,即為平局。

一、如何實現?

1.棋盤大小如何確定?

我們要實現乙個33的棋盤,就需要定義乙個3行3列的陣列,但是陣列的下標從0開始,玩家選擇落子座標很不方便,所以要定義乙個44的陣列,第0行第0列不使用,如下圖紅框內的行和列不使用。這樣就方便玩家選擇落子座標。

2.如何判定輸贏?

三子棋的規則很簡單,只要判斷每一行、每一列、對角線中是否有連成線的,即為贏。

**思路:

1、判斷是否有相同的行並且不能為空格(陣列初始化為空格)。

2、判斷是否有相同的列並且不能為空格。

3、判斷主次對角線是否相同並且不能為空格。

4、棋盤下滿後是否為平局。

**如下:

//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char iswin(char map[rows][cols], int row, int col)

} //判斷列

for (j = 1; j < col; j++) }

//判斷主對角線

if (map[1][1] == map[2][2] && map[2][2] == map[3][3] && map[1][1] != ' ')

//判斷次對角線

if (map[1][3] == map[2][2] && map[2][2] == map[3][1] && map[1][3] != ' ')

//判斷是否為平局

if (ret == 0)

else

}注意:

1、三個值比較時不可以使用連等,==是關係操作符,==是從左到右進行運算的,計算表示式 a == b == c 時,首先會進行邏輯運算 a == b得出邏輯值1或0,得到的結果作為返回值,然後進行邏輯運算 「返回值」 == c 得出邏輯值1或0,作為整個表示式的返回值。所以不能這樣用。

2、判斷完是否平局後,要加乙個else,返回乙個字元,不然編譯器會報錯:

因為編譯器認為還有一種情況:當所有的if都不滿足時,沒有返回值,所以要加乙個else返回乙個對結果沒有影響的字元。

二、具體**實現

1.標頭檔案game.h

#include

#include

#include

#include

#define row 3

#define col 3

#define rows row+1

#define cols col+1

//初始化棋盤

void initmap(char map[cols], int row, int col);

//列印棋盤

void displaymap(char map[cols], int row, int col);

//玩家落子

void playermove(char map[cols], int row, int col);

//電腦落子

void computermove(char map[cols], int row, int 程式設計客棧col);

//判斷棋盤是否滿,0表示滿,1表示未滿

int isfull(char map[cols], int row, int col);

//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char iswin(char map[cols], int row, int col);

2.主函式main.c

#define _crt_secure_no_warnings 1

#include"game.h"

void menu()

void game()

else if (ret == 'p')

computermove(map, rows, cols);//電腦落子

ret = iswin(map, rows, cols);

if (ret == '0')

}while (isfull(map,rows,cols));//棋盤已滿,結束迴圈

}void test()

} while (input);

}int main()

3.函式game.c

#define _crt_secure_no_warnings 1

#include"game.h"

void initmap(char map[cols], int row, int col) }}

void displaymap(char map[cols], int row, int col)

} printf("\n");

if (i < row - 1)

} printf("\n"); }}

void playermove(char map[cols], int row, int col)

else }

else }

displaymap(map, rows, cols);

}void computermove(char map[cols], int row, int col)

} displaymap(map, rows, cols);

}//判斷棋盤是否滿,0表示滿,1表示未滿

int isfull(char map[cols], int row, int col)

} }if (count == row * col)

else }

//判斷誰贏,'x'表示玩家贏,'0'表示電腦贏,'p'表示平局

char iswin(char map[rows][cols], int row, int col)

} //判斷列

for (j = 1; j < col; j++) }

//判斷主對角線

if (map[1][1] == map[2][2] && map[2][2] == map[3][3] && map[1][1] != ' ')

//判斷次對角線

if (map[1][3] == map[2][2] && map[2][2] == map[3][1] && map[1][3] != ' ')

//判斷是否為平局

if (ret == 0)

else

}4、執行結果示例

本文標題: c語言三子棋小遊戲的實現

本文位址: /ruanjian/c/370093.html

C語言小遊戲 三子棋

三子棋小遊戲 三子棋的實現是當玩家或者電腦自身所下的位置在同一條線時,判斷輸贏。在編寫該遊戲 時應注意到以下幾個方面的問題 1 首先應該列印棋盤以及初始化棋盤 2 在玩家和電腦落子之後均要列印一次棋盤 3 每次落子之前列印棋盤後,均要判斷是否已產生贏家 4 判斷輸贏之後,應當判斷此時棋盤是否已滿 5...

C語言小遊戲 三子棋

c語言三子棋小遊戲,通過二維陣列構建棋盤.利用七個個函式 void init 構建棋盤 void meau 遊戲選單 void display 構建棋盤 void player 玩家進行 void computer 電腦進行 char iswin 判斷輸贏 int isfull 判斷棋盤是否下滿 來...

C語言小遊戲 三子棋

將整個 分裝在三個檔案中,分別為原始檔 test.c game.c game.h 如下 game.h ifndef game h define game h define row 3 define col 3 定義棋盤行數和列數 include include include include voi...