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...