C语言实现三子棋
时间:2022-07-24
本文章向大家介绍C语言实现三子棋,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
头文件
1. 头文件
#pragma once
#ifndef _SANZIQI_H_
#define _SANZIQI_H_
#define ROW 3
#define COL 3
void init_board(char arr[ROW][COL], int row, int col);//初始化
void show_board(char arr[ROW][COL], int row, int col);//打印棋盘
void computer_play(char arr[ROW][COL], int row, int col);//电脑走
void Player(char arr[ROW][COL], int row, int col);//玩家走
int Checkfull(char arr[ROW][COL], int row, int col);//判断棋盘是否有空格
char Win(char arr[ROW][COL], int row, int col);//判断输赢
#endif
2.游戏核心
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"三子棋.h"
void init_board(char board[ROW][COL], int row, int col)
{
int x = 0,y = 0;
for(x=0;x<row;x++)
{for(y=0;y<col;y++)
{
board[x][y] = ' ';
}
}
}
void show_board(char board[ROW][COL], int row, int col)
{
int i;
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");
}
}
void computer_play(char board[ROW][COL],int row,int col)
{
srand((unsigned int)time(NULL));
while(1)
{
int x = rand() % 3;
int y = rand() % 3;
if(board[x][y]==' ')
{
board[x][y] = '#';break;
}
}
}
void Player(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
scanf("%d,%d", &x, &y);
x--;
y--;
if((0 <= x && x <= row - 1) && (0 <= y && y <= col - 1))
{
if (board[x][y] == ' ')
{
board[x][y] = '*';
break;
}
else {
printf("请不要把棋放到人家的棋上n");
}
}
else {
printf("请在棋盘里面下棋n");
}
}
}
int Checkfull(char board[ROW][COL], int row, int col)
{
int x = 0,y = 0;
for(x=0;x<row;x++)
for(y=0;y<col;y++)
{
if(board[x][y]==' ')
return 1;
}
return 0;
}
char Win(char board[ROW][COL],int row,int col)
{
int i = 0;
{if(Checkfull(board,ROW,COL) == 0)
{
return 'p';
}
}
for (i = 0; i < row; i++)
{
if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && (board[i][2] != ' '))
{
return board[i][0];
}
}
for (i = 0; i < col; i++)
{
if ((board[0][i] == board[1][i]) && (board[1][i] == board[2][i]) && (board[2][i] != ' '))
{
return board[0][i];
}
}
if ((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[2][2] != ' '))
{
return board[0][0];
}
if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[2][0] != ' '))
{
return board[0][2];
}
return ' ';
}
3.游戏
#include<stdio.h>
#include<time.h>
#include"三子棋.h"
void nume()
{
printf("************************n");
printf("*********1、play********n");
printf("*********0、exit********n");
printf("************************n");
}
void game()
{
char board[ROW][COL];
init_board(board,ROW,COL);
while(1)
{
printf("电脑走:n");
computer_play(board,ROW,COL);
show_board(board,ROW,COL);
if (Win(board, ROW, COL) != ' ')
{
break;
}
printf("玩家走n");
Player(board, ROW, COL);
show_board(board, ROW, COL);
if (Win(board, ROW, COL) != ' ')
{
break;
}
}
if (Win(board,ROW,COL) == '*')
{
printf("玩家赢n");
}
else if (Win(board,ROW,COL) == '#')
{
printf("电脑赢n");
}
else if (Win(board,ROW,COL) == 'P')
{
printf("平局n");
}
}
int main()
{
int ch = 0;
do{
nume();
printf("请选择:");
scanf("%d",&ch);
switch(ch)
{
case 1:game();break;
case 0:printf("退出游戏");break;
default:printf("输入错误,请重新输入");break;
}
}while(ch);
return 0;
}
- Code2Cloud:比ALM中断更大
- .NET Core的日志[4]:将日志写入EventLog
- 微信小程序不行了?看小马哥带你忆童年
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor和ActionDescriptor的创建
- .NET Core的日志[5]:利用TraceSource写日志
- 物联网芯片正在积极开发 明年将得到爆发
- 韩国全球首测5G网络下自动驾驶 为汽车安全保驾护航的竟是路灯
- 通过与Quickbuild和Mist.io的持续集成实现云管理和使用监控
- .NET Core的文件系统[1]:读取并监控文件的变化
- ASP.NET MVC以ValueProvider为核心的值提供系统: ValueProviderFactory
- 云本机应用程序成熟度的模型
- 如何利用ETW(Event Tracing for Windows)记录日志
- 如何利用ETW(Event Tracing for Windows)记录日志
- 如何利用ETW(Event Tracing for Windows)记录日志
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pycharm 入门基础配置
- CS学习笔记 | 16、用户枚举三个关键步骤
- Python数据分析实战(1)数据分析概述
- JVM面试常问知识点
- Python 为什么没有 void 关键字?
- FPGA设计心得(10)关于行为仿真的一点观点
- 一、Axios基础
- 二、fetch中的基础语法
- Laradock 运行 Nuxt 的一些问题
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut
- 微信小程序设置请求超时
- SAP CRM One Order函数CREATE_OW的设计原理
- 决策树(decision tree)
- 寻找质数—埃式筛法
- 语义分割之Dice Loss深度分析