这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点

 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
char chess_board[ROW][COL];
int PlayGame(int choice){
printf("************************\n");
printf("* 欢迎来到三子棋游戏 *\n");
printf("* 请您选择 *\n");
printf("* 1.开始游戏 *\n");
printf("* 2.离开游戏 *\n");
printf("************************\n");
while (){
scanf("%d", &choice);
if (choice == )
{
return ;
break;
}
else if (choice == )
{
return ;
break;
}
else
{
printf("输入非法,请重新输入!");
continue;
}
}
}
int Init(char a[ROW][COL]){
for (int row = ; row <ROW; row++){
for (int col = ; col < COL; col++)
{
a[row][col] = ' ';
}
}
return ;
}
void Print(char a[ROW][COL]){
printf(" \n");
for (int i = ; i < ROW; i++){
printf(" %c | %c | %c \n", a[i][], a[i][], a[i][]);
if (i != ){
printf("----|----|----\n");
}
}
}
void PlayerMove(char a[ROW][COL]){
int row = -;
int col = -;
while (){
printf("请您选择落子点坐标:");
scanf("%d %d", &row, &col);
if (row< || row> || col< || col>){
printf("输入非法,请重新输入!");
continue;
}
else if (a[row][col] == 'x' || a[row][col] == 'o')
{
printf("已有棋子,请重新选择坐标!");
continue;
}
else
{
a[row][col] = 'o';
break;
} }
}
int IsFull(char a[ROW][COL]){
int sum = ;
for (int row = ; row < ROW; row++)
{
for (int col = ; col < COL; col++)
{
if (a[row][col] != ' ')
{ sum++;
}
}
}
if (sum == ){
return ;
}
}
char Checkwinner(char a[ROW][COL]){
//1.判断三子 横 竖 斜
for (int row = ; row < ROW; row++){
if (a[row][] == a[row][] && a[row][] == a[row][] && a[row][] != ' ')
{
return 'p';
}
}
for (int col = ; col < COL; col++){
if (a[][col] == a[][col] && a[][col] == a[][col] && a[][col] != ' ')
{
return 'p';
}
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' ')
{
return 'p';
}
if (a[][] == a[][] && a[][] == a[][] && a[][] != ' '){
return 'p';
}
} void ComputeMove(char a[ROW][COL]){
printf("请电脑落子!\n");
while (){
int col = rand() % ;
int row = rand() % ;
if (a[row][col] == ' ')
{
a[row][col] = 'x';
break;
}
else continue;
}
}
void Game(){
Init(chess_board);//2.棋盘初始化
Print(chess_board);//3.打印棋盘
while (){ PlayerMove(chess_board);//4.用户落子
Print(chess_board);
if (Checkwinner(chess_board) == 'p')
{
printf("玩家获胜!\n");
break;
}
if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!");
break;
}
ComputeMove(chess_board);//6.电脑随机落子
Print(chess_board);//3.打印棋盘
if (Checkwinner(chess_board) == 'p')
{
printf("电脑获胜!\n");
break;
} if (IsFull(chess_board) == )//2.判断是否和棋
{
printf("平局!\n");
break;
}
}
} int main(){
int choice = ;
if (PlayGame(choice) == ) { //1.选择是否开始游戏 a)开始 b)离开
Game(); }
system("pause");
}

最新文章

  1. jQuery stop()用法
  2. 利用js轻松实现页面简繁体转换
  3. flash player 版本对照
  4. JNI的一些使用
  5. sql linq lambda 对比
  6. 转: Nodejs 发送HTTP POST请求实例
  7. 【转载】SQL Server 2008 中新建用户登录并指定该用户的数据库
  8. 常见ActiveX控件下载大全
  9. Cassandra 学习笔记 - 1 - 关于Cassandra
  10. 深谈auto变量
  11. 常用Oracle进程资源查询语句(运维必看)
  12. SQL Server(MySql)中的联合主键(联合索引) 索引分析
  13. devops基本流程
  14. Android系统中是否开启定位及定位模式的判断
  15. JVM、垃圾收集器
  16. java设计模式之——工厂模式
  17. Kibana查询
  18. scrapy 安装
  19. 线上分享-- 基于DDD的.NET开发框架-ABP介绍
  20. python os.path.basename()方法

热门文章

  1. 利用 Xunsearch 搭建搜索引擎、内容搜索实战
  2. TCP/IP 协议图--传输层中的 TCP 和 UDP
  3. Discuz的一处越权操作,强制回复无权限帖子
  4. MySQL面试宝典
  5. PhoneGap 白名单安全机制 navigator.app 加载外部页面返回以及退出介绍
  6. Mysql 创建普通用户、数据库、表、插入记录,用户赋权
  7. 枚举enum和enumerate
  8. PAT——1044. 火星数字
  9. Jmeter--thrift接口压测,调用jar包失败报错:java.lang.NoSuchMethodError:
  10. HDU 3339 In Action(迪杰斯特拉+01背包)