三子棋游戏的代码实现
//头文件
//定义棋盘横列大小
#define ROW 3
#define COL 3
#include "game.h"
#include <stdlib.h>
#include <time.h>//在随机数的用到时间
//初始化棋盘函数声明
void InitBoard(char board[ROW][COL],int row,int col);
//打印棋盘函数声明
void displayd(char board[ROW][COL],int row,int col);
//玩家下棋函数声明
void Player(char board[ROW][COL],int row,int col);
//电脑下棋函数声明
void Computer(char board[ROW][COL],int row,int col);
//判断输赢,玩家赢,电脑赢,平局,继续
char Triumph(char board[ROW][COL],int row,int col);
//源文件
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
初始化棋盘函数实现
void InitBoard(int 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]=' ';//使都变成空格
}
}
}
打印棋盘函数实现
void Displayd(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)//控制行的内容
{
//暴力打印一行数据
//printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2])
//打印分割行
//if(i < row-1)
//printf("---|---|---\n")
//正常打印一行数据,行列可以随便改
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(i < col-1)
printf("|");
}
printf("\n");
{
}
}
玩家下棋函数实现
void Player(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("玩家先走");
printf("请输入要下坐标");
scanf("%d%d",&x,&y)
//判断函数的是否下在棋盘内
if(x>=1 && x<=row && y>=1 && y<=row)
{
if(board[row][col]==' ')//因为之前都初始化为空格,所以没输入的地方都为空格
{
board[row][col]='*';//玩家下得棋子 *
break;
}
else
{
printf("已有棋子");
}
}
else
{
printf("输入错误,请看清规则);
}
}
电脑下棋函数实现
void Computer(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("电脑走 \n");
while(1)//如果被占用,电脑自动重新生成随机数
{
x=rand()%row;//随机产生0~row的数
y=rand()%col;//随机产生0~col的数
if(board[row][col]==' ')
{
board[row][col]='#';//电脑下得棋子 #
break;
}
}
}
判断输赢函数实现
char Triumph(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
if(board[i][0]==board[i][1]&& board[i][1]==board[i][2]&&board[i][1]!=' ')//判断每行
{
return board[i][1];//返回*
}
}
for(i=0;i<row;i++)
{
if(board[0][i]==board[1][i]&& board[1][i]==board[2][i]&&board[1][i]!=' ')//判断每列
{
return board[i][1];//返回*
}
}
if(board[0][0]==board[1][1]&& board[1][1]==board[2][2]&&board[1][1]!=' ')//判断对角线
return board[i][1];//返回*
if(board[0][2]==board[1][1]&& board[1][1]==board[2][0]&&board[1][1]!=' ')//判断对角线
return board[i][1];//返回*
判断棋盘是否满来判断平局
//返回1表示满了
//返回0表示未满
int IsFull()
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
for(i=0;j<col;j++)
{
if(board[i][j]=' ')
{
return 0;//未满
}
}
}
return 1; //满了
}
if(1==IsFull(char board[ROW][COL],int row,int col))//平局
{
return 'PingJu';
}
}
//源文件2
#define _CRT_SECURE_NO_WARNINGS 1//使用scanf不安全时使用,或者把这句话放在VS安装路径下vc下vcprojectitems下newc++File.cpp
#include <studio.h>
#include "game.h"//引用头文件
void menu()//游戏选择菜单
{
printf("*************\n")
printf("***1.play 0.exit***\n")
printf("*************\n")
}
void games ()//游戏的实现过程
{
//定义数组存放行走步骤的棋盘信息
char board[ROW][COL]={0};//全部空格
//初始化棋盘
InitBoard(board,ROW,COL);
//打印棋盘
Displayd(board,ROW,COL);
//下棋
while(1)
{
//玩家下棋
Player(board,ROW,COL);
//打印已下棋子
Displayd(board,ROW,COL);
//判断输赢
ret=Triumph(board,ROW,COL);
if(ret !='PingJu')//表示继续走
{
break;
}
//电脑下棋
Computer(board,ROW,COL);
//打印已下棋子
Displayd(board,ROW,COL);
}
//判断输赢
if(ret='*')
{
printf("玩家赢");
}
else if(ret='#')
{
printf("电脑赢")
}
else
{
printf("平局")
}
}
void test()//游戏初始界面
{
int num =0
//设置好随机数种子
//time(NULL)返回当前时间
//srand(time(NULL))把时间当成种子,使程序每次运行产生不同的随机数数列
//(umsigned int)time(NULL),把随机数转换为int型
srand(((umsigned int)time(NULL));
do{
menu();
printf("请选择:")
scanf("%d",%num)
switch(sum)
{
case 1:
games();//printf("进入游戏");放在函数中
break;
case 0:
printf("退出游戏");
break;
default:
printf("重新选择游戏");
break;
}
}while(num)//num为跳出循环
}
int main()
{
test();
return 0;//再来一把
}
花神博客生涯三子棋代码详解结束了哦~
接下来会持续更新(⊙o⊙)!
版权声明:本文为weixin_44899940原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。