首先我們先來看一個稍微簡單些的實現方式:
#include <stdio.h>#include <stdlib.h>#define N 15int chessboard[N + 1][N + 1] = { 0 };int whoseTurn = 0;void initGame(void);void printChessboard(void);void playChess(void);int judge(int, int);int main(void){ initGame(); while (1) { whoseTurn++; playChess(); } return 0;}void initGame(void){ char c; printf("Please input /'y/' to enter the game:"); c = getchar(); if ('y' != c && 'Y' != c) exit(0); system("cls"); printChessboard();}void printChessboard(void){ int i, j; for (i = 0; i <= N; i++) { for (j = 0; j <= N; j++) { if (0 == i) printf("%3d", j); else if (j == 0) printf("%3d", i); else if (1 == chessboard[i][j]) printf(" O"); else if (2 == chessboard[i][j]) printf(" X"); else printf(" *"); } printf("/n"); }}void playChess(void){ int i, j, winner; if (1 == whoseTurn % 2) { printf("Turn to player 1, please input the position:"); scanf("%d %d", &i, &j); while (chessboard[i][j] != 0) { printf("This position has been occupied, please input the position again:"); scanf("%d %d", &i, &j); } chessboard[i][j] = 1; } else { printf("Turn to player 1, please input the position:"); scanf("%d %d", &i, &j); while (chessboard[i][j] != 0) { printf("This position has been occupied, please input the position again:"); scanf("%d %d", &i, &j); } chessboard[i][j] = 2; } system("cls"); printChessboard(); if (judge(i, j)) { if (1 == whoseTurn % 2) { printf("Winner is player 1!/n"); exit(0); } else { printf("Winner is player 2!/n"); exit(0); } }}int judge(int x, int y){ int i, j; int t = 2 - whoseTurn % 2; for (i = x - 4, j = y; i <= x; i++) { if (i >= 1 && i <= N - 4 && t == chessboard[i][j] && t == chessboard[i + 1][j] && t == chessboard[i + 2][j] && t == chessboard[i + 3][j] && t == chessboard[i + 4][j]) return 1; } for (i = x, j = y - 4; j <= y; j++) { if (j >= 1 && j <= N - 4 && t == chessboard[i][j] && t == chessboard[i][j + 1] && t == chessboard[i][j + 1] && t == chessboard[i][j + 3] && t == chessboard[i][j + 4]) return 1; } for (i = x - 4, j = y - 4; i <= x, j <= y; i++, j++) { if (i >= 1 && i <= N - 4 && j >= 1 && j <= N - 4 && t == chessboard[i][j] && t == chessboard[i + 1][j + 1] && t == chessboard[i + 2][j + 2] && t == chessboard[i + 3][j + 3] && t == chessboard[i + 4][j + 4]) return 1; } for (i = x + 4, j = y - 4; i >= 1, j <= y; i--, j++) { if (i >= 1 && i <= N - 4 && j >= 1 && j <= N - 4 && t == chessboard[i][j] && t == chessboard[i - 1][j + 1] && t == chessboard[i - 2][j + 2] && t == chessboard[i - 3][j + 3] && t == chessboard[i - 4][j + 4]) return 1; } return 0;}演示截圖

我們再來看一個更復雜些的
C語言實現五子棋小游戲# include<stdio.h># include<stdio.h># include<stdio.h># include<stdio.h>//插入輸入輸出頭文件# include<string.h>//字符數組的函數定義的頭文件# include<stdlib.h>//stdlib 頭文件即standard library標準庫頭文件stdlib 頭文件里包含了C、C++語言的最常用的系統函數該 ,文件包含了C語言標準庫函數的定義.# define SPA 0//在C或C++語言源程序中允許用一個標識符來表示一個字符串,稱為“宏”。 “define”為宏定義命令。# define MAN 1# define COM 2 /* 空位置設為0 ,玩家下的位置設為1 ,電腦下的位置設為2 */#define ORDEX 15int qipan[ORDEX][ORDEX]; //自己定義的預處理函數,以二維數組形式構建棋盤 /* 15*15的棋盤 */typedef struct//typedef的作用是在C中定義一個結構體類型{ int iFlag; int iX, iY;}ScmPiece;int g_iPieceLen;ScmPiece g_ScmGame1, g_ScmGame2;void start(); /* 程序的主要控制函數 */void draw(); /* 畫棋盤 */int Victory( ScmPiece * pScmPiece ); /* 判斷勝利 p q為判斷點坐標 */void AI(int *p,int *q); /* 電腦下子 p q返回下子坐標 */int value(int p,int q); /* 計算空點p q的價值 */int qixing(int n,int p,int q); /* 返回空點p q在n方向上的棋型 n為1-8方向 從右順時針開始數 */void yiwei(int n,int *i,int *j); /* 在n方向上對坐標 i j 移位 n為1-8方向 從右順時針開始數 */void InitGame(){ int i; g_iPieceLen = ORDEX * ORDEX; g_ScmGame1.iX = 0; g_ScmGame1.iY = 0; g_ScmGame1.iFlag = COM; g_ScmGame2.iX = 7; g_ScmGame2.iY = 7; g_ScmGame2.iFlag = MAN; for( i=0; i < ORDEX*ORDEX; ++i ) *( (int*)qipan + i ) = SPA;}void main(){ char k; do{ InitGame(); start(); printf("還要再來一把嗎?輸入y或n:"); getchar(); scanf("%c",&k); while(k!='y'&&k!='n'){ printf("輸入錯誤,請重新輸入/n"); scanf("%c",&k); } system("cls"); }while(k=='y'); printf("謝謝使用!/n");}void MakePiece( ScmPiece * pScmPiece, int iGameFlag ){ if( iGameFlag ) { printf("請下子:"); while( scanf( "%d%d", &pScmPiece->iX, &pScmPiece->iY ) ) { if( ( pScmPiece->iX < 0 || pScmPiece->iX > ORDEX-1 ) || ( pScmPiece->iY < 0 || pScmPiece->iY > ORDEX-1 ) ) printf( "坐標錯誤!請重新輸入:"); else if( qipan[pScmPiece->iX][pScmPiece->iY] ) printf( "該位置已有子!請重新輸入:"); else break; } } qipan[pScmPiece->iX][pScmPiece->iY] = pScmPiece->iFlag; --g_iPieceLen; system("cls"); draw(); if( iGameFlag == 0 ) printf("電腦下在%d %d/n", pScmPiece->iX, pScmPiece->iY );}void start(){ int choice; //ScmPiece ScmGameTemp1, ScmGameTemp2;/* a1 b1儲存玩家上手坐標 c1 d1儲存電腦上手坐標 */ printf("/t
主站蜘蛛池模板:
昌乐县|
恩平市|
大渡口区|
沙田区|
陆河县|
西吉县|
宣化县|
岢岚县|
修武县|
宣化县|
鄂州市|
灵川县|
井陉县|
达孜县|
安平县|
湖南省|
武义县|
磴口县|
收藏|
彭水|
平安县|
玉屏|
札达县|
高州市|
和田市|
保康县|
芦溪县|
广宗县|
铜山县|
刚察县|
天祝|
馆陶县|
东方市|
高邑县|
剑河县|
白银市|
津南区|
兰州市|
建昌县|
合山市|
德令哈市|