C语言之三子棋游戏

test.c

#define _CRT_SECURE_NO_WARNINGS 1

//测试三子棋

#include"game.h"

void menu()

{

printf("**********************************\n");

printf("***** 1.play 0.exit ****\n");

printf("**********************************\n");

}

void game()//游戏算法实现

{

char ret = 0;

//数组-存放走出的棋盘信息

char boardROWCOL = { 0 };//全部是空格

//初始化棋盘

InitBoard(board, ROW, COL);

//打印棋盘

DisplayBoard(board, ROW, COL);

//下棋

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");

}

}

void test()

{

int input = 0;

srand((unsigned int)time(NULL));

do

{

menu();

printf("请选择:>");

scanf("%d", &input);

switch (input)

{

case 1:

game();

break;

case 0:

printf("退出游戏\n");

break;

default:

printf("选择错误,请重新选择!\n");

break;

}

} while (input);

}

int main()

{

test();

return 0;

}


game.h

#define ROW 3

#define COL 3

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

//声明

void InitBoard(char boardROWCOL,int row,int col);

void DisplayBoard(char boardROWCOL,int row,int col);

void Playermove(char boardROWCOL,int row,int col);

void ComputerMove(char boardROWCOL,int row,int col);

//告诉我们四种游戏的状态

//玩家赢 - '*'

//电脑赢 - '#'

//平局 - 'Q'

//继续下 - 'C'

char Iswin(char boardROWCOL, int row, int col);


game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void InitBoard(char boardROWCOL, int row, int col)

{

int i = 0;

int j = 0;

for (i = 0; i < row; i++)

{

for (j = 0; j < col; j++)

{

boardij = ' ';

}

}

}

void DisplayBoard(char boardROWCOL, int row, int col)

{

int i = 0;

for (i = 0; i < row; i++)

{

//1.打印一行的数据

//printf(" %c | %c | %c \n");

//printf(" %c | %c | %c \n", boardi0, boardi1, boardi2);

int j = 0;

for (j = 0; j < col; j++)

{

printf(" %c ", boardij);

if (j < col - 1)

printf("|");

}

printf("\n");

//2.打印分割行

//if (i < row - 1)

//{

// printf("---|---|---\n");

//}

if (i < row - 1)

{

for (j = 0; j < col; j++)

{

printf("---");

if(j<col-1)

printf("|");

}

}

printf("\n");

}

}

//玩家走

void Playermove(char boardROWCOL, int row, int col)

{

int x = 0;

int y = 0;

printf("玩家走:>\n");

//判断x,y坐标的合法性

while (1)

{

printf("请输入要下的坐标:>\n");

scanf("%d%d", &x, &y);

if (x >= 1 && x <= row && y >= 1 && y <= col)

{

if (boardx - 1y - 1 == ' ')

{

boardx - 1y - 1 = '*';

break;

}

else

{

printf("该坐标被占用\n");

}

}

else

{

printf("坐标非法,请重新输入!\n");

}

}

}

//电脑走

void ComputerMove(char boardROWCOL, int row, int col)

{

int x = 0;

int y = 0;

printf("电脑走:>\n");

while (1)

{

x = rand() % ROW;//产生了0到2之间的值

y = rand() % COL;

if (boardxy == ' ')

{

boardxy = '#';

break;

}

}

}

//返回1表示棋盘满了

//返回0表示棋盘没满

int IsFull(char boardROWCOL,int row,int col)

{

int i = 0;

int j = 0;

for (i = 0; i < row; i++)

{

for (j = 0; j < col; j++)

{

if (boardij == ' ')

{

return 0;//没满

}

}

}

return 1;//满了

}

char Iswin(char boardROWCOL, int row, int col)

{

int i = 0;

//判断横三行

for (i = 0; i < row; i++)

{

if (boardi0 == boardi1 && boardi1== boardi2&&boardi0 != ' ')

{

return boardi0;

}

}

//判断竖三列

for (i = 0; i < col; i++)

{

if (board0i == board1i && board1i == board2i && board1i != ' ')

{

return board0i;

}

}

//两个对角线

if (board00 == board11 && board11 == board22 && board11 != ' ')

return board00;

if (board20 == board11 && board11 == board02 && board11 != ' ')

return board00;

//判断是否平局

if(IsFull(board, ROW, COL))

{

return 'Q';

}

return 'C';

}

相关推荐
大树8815 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠15 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质16 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz16 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工17 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智17 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_17 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈17 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
施努卡机器视觉18 小时前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
程序猿阿伟18 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome