首先我們先來看一個稍微簡單些的實現方式:
#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 主站蜘蛛池模板: 欧美一区二区在线 | 久久久久中精品中文字幕19 | 婷婷国产 | 日本黄网站在线观看 | 久久成人免费视频 | 国产精品久久久久久久久久久久 | 视频在线一区 | 看欧美黄色录像 | 欧美乱轮 | 精品久久亚洲 | 成人欧美在线 | 亚洲精品欧美视频 | 日韩成人精品视频 | 国产精品久久久久婷婷二区次 | 日韩精品在线播放 | 欧美日韩免费看 | 日韩欧美国产一区二区 | 亚洲最大av网站 | 亚洲男人天堂网 | 99国产视频 | 一区二区三区日韩在线 | 久久久综合网 | 国产精品一区二区三区久久 | 欧美午夜理伦三级在线观看偷窥 | 一级a毛片 | 色综合久久久久综合99 | 亚洲精品久久久久久久久久久久久 | 日韩成人黄色 | 国产精品视频在线观看 | 一区二区三区在线观看视频 | 国产视频精品视频 | sese综合| 欧洲国产伦久久久久久久 | 超级乱淫片国语对白免费视频 | 精品久久久一区 | 欧美大片在线看免费观看 | 久久99热精品免费观看牛牛 | 欧美激情欧美激情在线五月 | 99色在线视频 | 国产精品成人一区二区网站软件 | 国产中文字幕一区二区 |