棋盤大小可改變的三子棋

2021-08-18 08:23:58 字數 3365 閱讀 1350

game.h

#define _crt_secure_no_warnings 1

#include

#include

#include

#include

#ifndef __game_h__

#define __game_h__

#define r 3//行

#define c 3//列

#define ex 0//增加量

void is_board(char arr[r+ex][c+ex], int r, int c); //初始化棋盤

void display_board(char arr[r + ex][c + ex], int r, int c); //列印棋盤

void play_person(char arr[r + ex][c + ex], int r, int c); //玩家走

void play_computer(char arr[r + ex][c + ex], int r, int c); //電腦走

char judge(char arr[r + ex][c + ex], int r, int c); //判斷輸贏函式

int is_all_equal_without_blank(char arr[r + ex]); //判斷成每一條直線上元素是否全都相等並且不為空

int full(char arr[r + ex][c + ex], int r, int c); //判斷棋盤是否滿了

#endif //__game_h__

這裡的ex表示的是增加量,我們先定義的是三子棋,如果我們想玩五子棋的話,只需要把ex後邊的0改為2我們就可以玩五子棋了。

game.c

#define _crt_secure_no_warnings 1

#include"game.h"

void is_board(char arr[r+ex][c+ex], int r, int c)

}}void display_board(char arr[r + ex][c + ex], int r, int c)

printf("\n");

}printf("\n");

}void play_person(char arr[r + ex][c + ex], int r, int c)

else

}else

}}void play_computer(char arr[r + ex][c + ex], int r, int c)

}}int full(char arr[r + ex][c + ex], int r, int c)}}

return1;}

int is_all_equal_without_blank(char arr[r + ex])

else

}return1;}

char judge(char arr[r + ex][c + ex], int r, int c)

if (is_all_equal_without_blank(tmp))

}//判斷列相等

for (j = 0; j < c + ex; j++)

if (is_all_equal_without_blank(tmp))

}//判斷正交

for (i = 0; i < r + ex; i++)

if (is_all_equal_without_blank(tmp))

//判斷反交

for (i = 0; i < r + ex; i++)

}//判斷平局

if (full(arr , r+ex, c+ex))

return

' ';

}

在char judge(char arr[r + ex][c + ex], int r, int c)函式中我們先定義乙個tmp空陣列,在判斷行/列/正交線/反交線上的陣列元素相等時,先把那一行/列/正交/反交的陣列元素全部存進tmp陣列中,然後把tmp陣列作為實參傳入int is_all_equal_without_blank(char arr[r + ex])函式中,進行判斷,看陣列中的每個元素相等且不為空,如果那一行/列/正交/反交線上的陣列元素相等且不為空,則反回tmp陣列中的第乙個元素就行。

在int is_all_equal_without_blank(char arr[r + ex])函式中,我們先把傳進來的陣列的第乙個元素賦給empty,然後進行for迴圈,先用陣列中的第乙個元素和第二個元素相比較,如果它們兩不等,或者都為空,則return 0,直接跳出,不用再進行後邊的比較了,如果第乙個元素和第二個元素相等,則把第二個元素的值賦給tmp,進入for迴圈,讓第二個元素和第三個元素相比較,依次往後推,直到tmp陣列中所以元素都相等,則return 1。

在char judge(char arr[r + ex][c + ex], int r, int c)函式中我們還需要判斷是否會平局,平局是放在判斷行/列/正交/反交線上所以元素相等的後邊,如果沒有連成一條線,我們再判斷是否平局,在int full(char arr[r + ex][c + ex], int r, int c)函式中,我們只需要判斷棋盤是否滿了,若棋盤滿了,並且前邊的判斷並沒有返回任何值,則return 『q』,表示平局。

test.c

#define _crt_secure_no_warnings 1

#include"game.h"

void menu()

void game()

; char ret = 0;

is_board(arr, r+ex, c+ex);

display_board(arr, r + ex, c + ex);

while (1)

play_computer(arr, r + ex, c + ex);

display_board(arr, r + ex, c + ex);

ret = judge(arr, r + ex, c + ex);

if (ret != ' ')

}if (ret == 'x')

else

if(ret == 'o')

else

if (ret == 'q')

display_board(arr, r + ex, c + ex);

}int main()

}while (num);

return

0;}

在測試函式中呢,我們需要先把棋盤列印出來,然後用乙個while迴圈,先讓玩家走一步,列印出來,再進行判斷,若返回的是空,則讓電腦走,然後列印,再進行判斷,一直迴圈,直到判斷函式有乙個返回值,根據返回值判斷誰輸誰贏或是平局。

c語言 棋盤遊戲 三子棋

一 問題概述 大家都玩過棋盤遊戲吧,像五子棋一樣,玩家或者是電腦一人下一次,當玩家或者是電腦的某一方先將各自的五個棋子下成一條線時,誰就贏,棋盤遊戲就會結束。當然,我今天要介紹的是三子棋,和五子棋的原理是一樣的,當玩家或者是電腦的某一方先將各自的三個棋子下成一條線時,誰就贏,棋盤遊戲就會結束。下面我...

三子棋遊戲

首先介紹一下三子棋遊戲規則 這是乙個玩家和電腦對戰的三子棋遊戲 棋盤如上圖所示,三個棋子連在一起則勝利 下面就是用c語言實現的方法 建立棋盤 利用二維陣列來實現乙個棋盤,棋盤剛開始是沒有任何棋子的,將二維陣列所有元素初始化為空格即可 玩家下棋 玩家輸入棋盤中的對應座標來下棋,下棋時需要考慮輸入座標合...

三子棋遊戲

閒來無事,竟意外發現了三子棋遊戲,順便實現了這個過程,我們一起來看下。三子棋的實現需要的是五個函式,我用了initboard 初始化棋盤函式 display 列印棋盤函式 player 玩家 computer 電腦 check full 判斷棋盤是否已滿,從而判斷輸贏 game.h define c...