亲爱的读者们,你们好鸭!(* ̄3 ̄)╭,我!又回来啦!和上次不同,这次我给你们带来了一个大宝贝儿(把手伸进口袋),瞧,是新出炉的三子棋教程呦( •̀ ω •́ )✧。那么话不多说,我们开始吧!
(前半部分为讲解分析,后半为源码)
1.创建菜单(毕竟比较简单,我就不多讲啦) 2.初始化棋盘 (1)头文件中宏定义ROW与COL
申明initboard函数
(2)源文件中(主)创建二维数组board
(3)源文件(函数实现)解释:将二维数组初始为空格
3.打印棋盘 (1)头文件申明函数 (2)源文件(主) (3)打印函数实现具体步骤为
第一行:空格 | 空格 | 空格
第二行: --- | --- | ---
第三行:空格 | 空格 | 空格
第四行: --- | --- | ---
第五行:空格 | 空格 | 空格
4.玩家下棋实现 (1)头文件申明 (2)源文件(主)玩家下棋后,并打印棋盘
(3)源文件(函数实现)对应玩家输入的坐标,将二维数组board中的空格替换为星号
5.电脑下棋实现(伪随机) (1)头文件 (2)源文件(主)其中srand((unsigned int)time(NULL));是为了生成随机数
与rand()一起使用
具体见 rand - C++ Reference (cplusplus.com)
(3)源文件(函数实现)与前面的“玩家下棋”同一原理
6.判断输赢实现那么,现在就到了最难的一步啦!加油啊(自我想象)
(1)头文件 (2)源文件(主)如果ret = ‘*’,则玩家赢
如果ret = ‘#’,则电脑赢
如果ret = ‘c', 则为’继续‘
如果ret = ‘p',则为平局
(3)源文件(函数实现)主要分为三部分
a.同一行相同
b.同一列相同
c.对角线交叉相同
其中有一个函数isfull判断是否平局(下满棋盘)
就这样,讲解完毕(终于)!!!!
那么下面就放码出来吧!!!
///game.c/ #pragma once #define _CRT_SECURE_NO_WARNINGS #include#include #include #define ROW 3 #define COL 3 //初始化棋盘 void initboard(char board[ROW][COL],int row,int col); //打印棋盘 void displayboard(char board[ROW][COL],int row,int col); //玩家下棋 void playermove(char board[ROW][COL], int row, int col); //电脑下棋 void computermove(char board[ROW][COL], int row, int col); //输赢判断 char iswin(char board[ROW][COL], int row, int col) /test.c/ #include "game.h" void menu() { printf("********************n"); printf("***** 三子棋 *****n"); printf("***** 1.play *****n"); printf("***** 0.exit *****n"); printf("********************n"); } int game() { char board[ROW][COL]; //初始化棋盘 initboard(board, ROW, COL); //打印棋盘 displayboard(board, ROW, COL); char ret = 0; while (1) { //玩家下棋 playermove(board, ROW, COL); displayboard(board, ROW, COL); //判断玩家是否赢 ret = iswin(board, ROW, COL); if (ret != 'c') { break; } //电脑下棋 computermove(board, ROW, COL); displayboard(board, ROW, COL); //判断电脑是否赢 ret = iswin(board, ROW, COL); if (ret != 'c') { break; } } if (ret == '*') { printf("小伙子,原来你赢得了啊。n"); } else if (ret == '#') { printf("这个玩家就是逊呀,还让电脑赢了n"); } else { printf("恭喜你,你的智商和我设计的程序一样高!(平局)n"); } } int main() { int input = 0; srand((unsigned int)time(NULL)); while (1) { menu(); scanf("%d", &input); if (input == 1) { game(); } else { printf("游戏结束n"); break; } } return 0; } /game.c/ #include "game.h" //初始化棋盘 void initboard(char board[ROW][COL], int row, int col) { for (row = 0; row < 3; row++) { for (col = 0; col < 3; col++) { board[row][col] = ' '; } } } //打印棋盘 void displayboard(char board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j != col-1) { printf("|"); } } printf("n"); if (i != row-1) { for (j = 0; j < col; j++) { printf("---"); if (j != col - 1) { printf("|"); } } printf("n"); } } } //玩家下棋 void playermove(char board[ROW][COL], int row, int col) { printf("玩家下棋:>"); int i = 0; int j = 0; while (1) { scanf("%d %d", &i, &j); if (board[i - 1][j - 1] == ' ') { board[i - 1][j - 1] = '*'; break; } else { printf("坐标错误或被占用,请重新输入:>"); } } } //电脑下棋 void computermove(char board[ROW][COL], int row, int col) { printf("电脑下棋:n"); while (1) { int i = rand() % row; int j = rand() % col; if (board[i][j] == ' ') { board[i][j] = '#'; break; } } } //判断是否下满 int isfull(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; } } } return 1; } //判断输赢 char iswin(char board[ROW][COL],int row,int col) { int i = 0; int j = 0; //水平 for (i = 0; i < row; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') { return board[i][0]; } } //竖直 for (j = 0; j < col; j++) { if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ') { return board[0][j]; } } //对角线 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') { return board[0][0]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ') { return board[0][2]; } int a = isfull(board,row,col); if (a == 1) { return 'p'; } return 'c'; } /over/
靓仔,你发现了彩蛋撒☆*: .。. o(≧▽≦)o .。.:*☆
sai ko ni hai tei si da !!!! jo jo !!!!



