基于C語言實現(xiàn)簡單的五子棋游戲
更新時間:2022年05月07日 12:07:51 作者:Monster_ii
這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡單的五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這是一個用C語言實現(xiàn)的控制臺小游戲—-五子棋,棋盤大小和獲勝棋子數(shù)目是用宏定義的,可以自定義,所以可以輕松改為三子棋、六子棋等等。此游戲設定為人機對戰(zhàn)(PVE),電腦走棋是隨機的。
編譯環(huán)境:VS2015
此程序采用多文件編譯,共有三個文件,一個game.h頭文件,一個game.c文件和一個main.c文件,代碼分別如下:
game.h
這里是一些數(shù)據(jù)和函數(shù)的聲明
#ifndef ?_GAME_H_ ? ? ? ? ?? #define _GAME_H_ #define _BOARD_ 10 ? ? ?//棋盤大小 #define _PIECE_ 5 ? ? ?//獲勝所需要連起來的棋子個數(shù) typedef struct Board{ ? ? char show[_BOARD_][_BOARD_]; ? ?//棋盤字符數(shù)組 ? ? char Pc; ? ? ?//電腦使用的棋子 ? ? char Player; ? ?//棋手使用的棋子 }Brd ,*pBrd; ? ? //Brd:五子棋 ? pBrd:五子棋指針 void init(pBrd B); void PrintBrd(const pBrd B); void Pcrand(pBrd B); int Player(pBrd B); int judge(pBrd B, int n); void menu(pBrd B); #endif // ! _GAME_H_
game.c
這里是函數(shù)的具體實現(xiàn)
#include<stdio.h> #include<stdlib.h> #include<time.h> #include "game.h" void init(pBrd B) { ? ? int i, j; ? ? for (i = 0; i < _BOARD_; i++) ? ? { ? ? ? ? for (j = 0; j < _BOARD_; j++) ? ? ? ? { ? ? ? ? ? ? B->show[i][j] = ' '; ? ? ? ? } ? ? } ? ? B->Pc = '@'; ? ? B->Player = '*'; } void PrintBrd(const pBrd B) { ? ? int i, j; ? ? printf(" "); ? ? for (i = 0; i < _BOARD_; i++) ? ? { ? ? ? ? printf(" ? %d", i + 1); ? ? } ? ? printf("\n"); ? ? for (i = 0; i < _BOARD_; i++) ? ? { ? ? ? ? for (j = 0; j < _BOARD_; j++) ? ? ? ? { ? ? ? ? ? ? if (j == 0)printf(" %d|", i + 1); ? ? ? ? ? ? printf(" %c |", B->show[i][j]); ? ? ? ? } ? ? ? ? if (i == 0)printf(" ? ? Player: *"); ? ? ? ? if (i == 1)printf(" ? ? ? ? AI: @"); ? ? ? ? printf("\n\n"); ? ? } } void Pcrand(pBrd B) { ? ? int i, j; ? ? srand((unsigned int)time((NULL))); ? ? int n = rand()%(_BOARD_*_BOARD_); ? ? for (i = 0; i < _BOARD_; i++) ? ? { ? ? ? ? for (j = 0; j < _BOARD_; j++) ? ? ? ? { ? ? ? ? ? ? if (n > 0)n--; ? ? ? ? ? ? else if (n == 0 && B->show[i][j] == ' ') ? ? ? ? ? ? { ? ? ? ? ? ? ? ? B->show[i][j] = B->Pc; ? ? ? ? ? ? ? ? return; ? ? ? ? ? ? } ? ? ? ? } ? ? } } int Player(pBrd B) { ? ? int i, j; ? ? printf("請輸入落子位置:\n"); ? ? printf("行:>"); ? ? scanf("%d", &i); ? ? printf("列:>"); ? ? scanf("%d", &j); ? ? i--; ? ? j--; ? ? if (B->show[i][j] != ' ' || i >= _BOARD_ || j >= _BOARD_ || i < 0 || j < 0) ? ? { ? ? ? ? printf("請輸入正確的位置!\n"); ? ? ? ? system("pause"); ? ? ? ? return 0; ? ? } ? ? B->show[i][j] = B->Player; ? ? return 1; } int judge(pBrd B, int n) { ? ? char s; ? ? int c = 0; ? ? int i, j, sum = 0; ? ? if (n == 1)s = B->Player; ? ? else if (n = 2) s = B->Pc; ? ? for (i = 0; i < _BOARD_; i++) ? ? { ? ? ? ? sum = 0; ? ? ? ? for (j = 0; j < _BOARD_; j++) ? ? ? ? { ? ? ? ? ? ? if (B->show[i][j] == s)sum++; ? ? ? ? ? ? else sum = 0; ? ? ? ? ? ? if (sum == _PIECE_)return 1; ? ? ? ? } ? ? } ? ? for (j = 0; j < _BOARD_; j++) ? ? { ? ? ? ? sum = 0; ? ? ? ? for (i = 0; i < _BOARD_; i++) ? ? ? ? { ? ? ? ? ? ? if (B->show[i][j] == s)sum++; ? ? ? ? ? ? else sum = 0; ? ? ? ? ? ? if (sum == _PIECE_)return 1; ? ? ? ? } ? ? } ? ? sum = 0; ? ? for (i = 0, j = 0; i < _BOARD_; i++, j++) ? ? { ? ? ? ? if (B->show[i][j] == s)sum++; ? ? ? ? else sum = 0; ? ? ? ? if (sum == _PIECE_)return 1; ? ? } ? ? sum = 0; ? ? for (i = 0, j = _BOARD_ - 1; i < _BOARD_; i++, j--) ? ? { ? ? ? ? if (B->show[i][j] == s)sum++; ? ? ? ? else sum = 0; ? ? ? ? if (sum == _PIECE_)return 1; ? ? } ? ? return 0; } void menu(pBrd B) { ? ? int c,n = 1; ? ? printf("****************************************\n"); ? ? printf("********* ?1.play ?** ?0.exit ?*********\n"); ? ? printf("****************************************\n"); ? ? printf("請輸入選項:>"); ? ? scanf("%d", &c); ? ? while (c) ? ? { ? ? ? ? system("cls"); ? ? ? ? if (n == 1) ? ? ? ? { ? ? ? ? ? ? PrintBrd(B); ? ? ? ? ? ? if(Player(B))n=2; ? ? ? ? ? ? else continue; ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? Pcrand(B); ? ? ? ? ? ? n = 1; ? ? ? ? } ? ? ? ? if (judge(B, n)) ? ? ? ? { ? ? ? ? ? ? PrintBrd(B); ? ? ? ? ? ? if (n == 1)printf("Old Fe 666!\n"); ? ? ? ? ? ? else printf("請大俠重新來過\n"); ? ? ? ? ? ? break; ? ? ? ? } ? ? } }
main.c
程序入口
#include"game.h" int main() { ? ? Brd B; ? ? init(&B); ? ? menu(&B); ? ? printf("Thanks for playing my game.\n"); ? ? return 0; }
運行截圖
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
如何在c++中實現(xiàn)字符串分割函數(shù)split詳解
這篇文章主要給大家介紹了關于如何在c++中實現(xiàn)字符串分割函數(shù)split的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用c++具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-11-11