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;
}
- 仿淘宝购买详情页购买缩小动画
- 高仿今日头条(1)
- android Native堆
- Spring Boot中Web应用的统一异常处理
- android bitmap的内存分配和优化
- Gitflow工作流程
- Android学习第一弹:Android通过用代码画虚线椭圆边框背景来学习一下shape的用法
- Spring Boot中使用Swagger2构建强大的RESTful API文档
- iOS iOS与html进行交互
- Android学习第三弹之Android图片颜色处理
- C#Winform使用扩展方法自定义富文本框(RichTextBox)字体颜色
- Android如何实现毛玻璃效果之Android高级模糊技术
- Android Loader详解
- Gridview的item含有checkbox,setOnItemClickListener方法失效的问题
- 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 数组属性和方法
- C++核心准则Con.1:默认情况下使对象不可修改
- 进化算法个体和指标的一致性
- matlab代码折叠与分节注释
- Flask从零到一 1 | 虚拟环境和第一个flask程序
- 按照元素指定条件筛选结构体数组
- 多目标优化按支配关系分层实现
- CentOS 7 解决丢失 nginx.pid
- $(function(){})和$(document).ready(function(){})
- javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
- matlab生成数字1-n的列向量
- JavaScript中的匿名函数及函数的闭包
- ios下Safari无法触发click事件的处理
- 禁止网页右键、复制、另存为、查看源文件等功能
- ajax知识点
- 前端特效常用代码