亲爱的读者们,你们好鸭!(* ̄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 <stdio.h>
#include <stdlib.h>
#include <time.h>
#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 !!!!