概述
实现三子棋游戏主要是运用二维数组知识,我们分文件编写代码。三子棋和五子棋的实现是类似的。下边主要介绍三子棋
一个头文件
两个源文件
- game.h //包括函数声明,宏定义
- game.c //三子棋游戏所需函数的具体实现
- test.c //负责测试代码
实现步骤:
1 将棋盘初始化为空格
2 打印棋盘(包括分割线)
3 玩家输入坐标选择落棋位置
4 产生随即坐标作为电脑输入
1 将棋盘初始化为空格
void Initboard(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++)
{
board[i][j] = ' ';
}
}
}
2 打印棋盘(包括分割线)
在每次落棋之后都需要打印棋盘,通过函数displayboard来实现
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");
}
}
3 玩家输入坐标选择落棋位置
在选择落棋位置时需要先判断该位置是否为合法坐标,如果是且该位置为空格,用**’*’**标记玩家落棋位置。如果是合法坐标但不空格,就重新输入坐标。如果为非法坐标,提示玩家重新输入。
void PlayerMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("玩家走->n");
while (1)
{
printf("请输入坐标->");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (board[x-1][y-1] == ' ')
{
board[x-1][y-1] = '*';
break;
}
else
printf("该位置已占用,请重新输入n");
}
else
{
printf("输入坐标非法,请重新输入n");
}
}
}
4 产生随即坐标作为电脑输入
srand((unsigned int)time(NULL))
计算机并不能产生真正的随机数,而是已经编写好的一些无规则排列的数字存储在电脑里,把这些数字划分为若干相等的N份,并为每份加上一个编号用srand()函数获取这个编号,然后rand()就按顺序获取这些数字,当srand()的参数值固定的时候,rand()获得的数也是固定的,所以一般srand的参数用time(NULL),因为系统的时间一直在变,所以rand()获得的数,也就一直在变,相当于是随机数了。
记得包含头文件<stdlib.h>和<time.h>
void ComputerMove(char board[ROW][COL], int row, int col)
{
printf("电脑走->n");
while (1)
{
int x = rand()% row;
int y = rand() % col;
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] ='#';
break;
}
}
}
测试代码部分
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void meau()
{
printf("*********************************n");
printf("******* 1.play *******n");
printf("******* 0.exit *******n");
printf("*********************************n");
}
void game()
{
char board[ROW][COL] = { 0 }; //数组初始化应该为空格
Initboard(board, ROW, COL); //初始化棋盘为空格
displayboard(board, ROW, COL); //打印棋盘
while (1)
{
PlayerMove(board, ROW, COL); //玩家走
displayboard(board, ROW, COL);
ComputerMove(board, ROW, COL); //电脑走
displayboard(board, ROW, COL);
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
meau();
printf("请选择->");
scanf("%d", &input);
switch (input)
{
case 1:
game(); //开始游戏
break;
case 0:
printf("退出游戏n"); //退出游戏
break;
default:
printf("请重新选择:n");
break;
}
} while (input);
return 0;
}
判断电脑和玩家输赢部分还没完善,后边更新。
最后
以上就是优秀灰狼为你收集整理的#8-30(C语言实现--三子棋)的全部内容,希望文章能够帮你解决#8-30(C语言实现--三子棋)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复