c语言实现三子棋

news2025/1/23 17:50:21

目录

一、三子棋玩法

二、需要实现的游戏功能

三、拆分代码

3.1游戏菜单

3.2初始化棋盘

3.2.1函数调用

3.2.2函数体实现

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

3.4玩家下棋

3.4.1函数调用

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

3.6.2函数体实现

3.6.3效果展示

3.7游戏逻辑(主函数)

 四、代码

4.1game.h(函数声明)

4.2game.c(函数体实现)

4.3main.c(函数逻辑)

END.


一、三子棋玩法

三子棋相信大家都不陌生,是一款非常好玩的益智游戏。

游戏规则是:谁先将三颗棋子连成一条线,谁就获胜

二、需要实现的游戏功能

1.需要有一个棋盘下棋

2.玩家能下棋,电脑能自动下棋

3.能判断输赢

三、拆分代码

这次的代码使用game.h(函数声明)game.c(函数体实现)main.c(游戏逻辑实现)

三子棋其实,用的是一个3*3的格子,我们可以用二维数组来实现 

其中的行(row)和列(col)使用宏定义,这样我们修改棋盘大小时会很方便,只需要改这两个值即可。

 

3.1游戏菜单

用printf实现

3.2初始化棋盘

3.2.1函数调用

将数组,行和列传过去

3.2.2函数体实现

 

3.3打印棋盘

3.3.1函数调用

3.3.2函数体实现

使用for循环实现

 

3.4玩家下棋

3.4.1函数调用

 

3.4.2函数体实现

3.4.3效果展示

3.5电脑下棋

3.5.1函数调用

3.5.2函数体实现

 猜数字游戏icon-default.png?t=M85Bhttp://t.csdn.cn/NtRT7

 3.5.3效果展示

3.6判断输赢

3.6.1函数调用

游戏无非就是这4种情况

3.6.2函数体实现

 

 

 判断是否为平局的函数

 

3.6.3效果展示

 

3.7游戏逻辑(主函数)

 主函数逻辑

游戏逻辑 

 

 四、代码

4.1game.h(函数声明)

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
//初始化棋盘
void Initboard(char board[ROW][COL],int row, int col);
//打印棋盘
void Display(char board[ROW][COL],int  row, int col);
//玩家下棋
void Player_move(char board[ROW][COL],int row,int col);
//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col);
//判断输赢
char is_win(char board[ROW][COL], int row, int col);

4.2game.c(函数体实现)

#include"game.h"

//初始化
void Initboard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

//打印棋盘
void Display(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		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 (j < col - 1)
			  {
				  printf("|");

			  }
		   }
		  printf("\n");
		}
		
	}
}

//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入坐标:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
				printf("已经输入,重新选位置\n");
			}
		}
		else
		{
			printf("输入非法,重新输入\n");
		}
	}
}


//电脑下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("电脑下棋\n");
	while (1)
	{
		int x = rand() % row;
		int y = rand() % col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
	}
}

//判断是否为平局
static int If_full(char 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++)
		{
			if (board[i][j] == ' ')
			{
				return 0;
			}
		}
	}
		return 1;
}

//判断输赢,平局还是继续的状态
char is_win(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];
		}

	}
	//判断列
	int j = 0;
	for (j = 0; j < col; j++)
	{
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[1][i] != ' ')
		{
			return board[1][j];
		}
	}
	//对角线
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2]  && board[1][1] != ' ')
	{
		return board[1][1];
	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0]  && board[1][1] != ' ')
	{
		return board[1][1];
	}

	if (If_full(board, ROW, COL) == 1)
	{
		return 'Q';
	}
	return 'C';
}

4.3main.c(函数逻辑)

#include "game.h"

menu()
{
	printf("***************************\n");
	printf("***********1.play**********\n");
	printf("***********0.exit**********\n");
	printf("***************************\n");
}
void game()
{
	char ret = 0;
	char board[ROW][COL] = {0};
	//初始化棋盘
	Initboard( board, ROW, COL);
	//打印棋盘
	Display(board, ROW, COL);
	while (1)
	{
		//玩家下棋
		Player_move(board, ROW, COL);
		Display(board, ROW, COL);
		ret = is_win(board,ROW,COL);
		if (ret != 'C')
		{
			break;
		}
		//电脑下棋
		Computer_move(board, ROW, COL);
		Display(board, ROW, COL);
		ret = is_win(board,ROW,COL);
		if (ret != 'C')
		{
			break;
		}
	}
	/*	
	ret返回
	'C'继续
	'*'玩家赢
	'#'电脑赢
	'Q'平局
	*/
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if ( ret=='#')
	{
		printf("电脑赢\n");
	}
	else
	{
		printf("平局\n");
	}

	
}

int main()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入模式\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
	} while (input);
	return 0;
}

 


END.

希望我的内容能给你带来帮助。

A huge tree that fills one’s arms grows from a tiny seedling; a nine-storied tower rises from a heap of earth; a thousand li journey starts with the first step.

合抱之木,生于毫末,九层之台,起于累土,千里之行,始于足下。——老子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强大博客搭建全过程(1)-hexo博客搭建保姆级教程

1、 前言 本人本来使用国内的开源项目solo搭建了博客&#xff0c;但感觉1核CPU2G内存的服务器&#xff0c;还是稍微有点重&#xff0c;包括服务器内还搭建了数据库。如果自己开发然后搭建&#xff0c;耗费时间又比较多&#xff0c;于是乎开始寻找轻量型的博客系统。 此时hexo…

苹果系统(macos)code with me 控制端下载不下来,下载缓慢,解决办法

jetbrains的插件,依赖包,或者是工具之类的下载通常都比较慢,尤其是大文件等很久后可能还断开了.又要重头下.比如 code with me,以下简称cwm curl: (56) Recv failure: Connection reset by peer 如果你曾用sh安装时提示这个,多数就是网络连接不行了. 简单说就是用下载工具下…

redis集群搭建教程及遇到的问题处理

这里&#xff0c;在一个Linux虚拟机上搭建6个节点的redis伪集群&#xff0c;思路很简单&#xff0c;一台虚拟机上开启6个redis实例&#xff0c;每个redis实例有自己的端口。这样的话&#xff0c;相当于模拟出了6台机器了&#xff0c;然后在以这6个实例组建redis集群就可以了。 …

jsp旅行社管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 旅行社管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5 开发&#xff0c;数据库为Mysql&#xff0c;使用…

JAVA之Spring MVC 请求与响应 REST风格 SSM整合(注解版)

SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 使用简单&#xff0c;开发便捷&#xff08;相比于Servlet&#xff09; 灵活性强 入门案例 导入依赖SpringMVC坐标 <dependency><groupId>org.springframework</groupId><artifactId>spring-web…

[附源码]计算机毕业设计JAVA实践教学管理系统

[附源码]计算机毕业设计JAVA实践教学管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

01 使用docker搭建wordpress博客网站

文章目录1. 前言1.1 容器技术思维导图1.2 wordpress 网络架构图2. 拉取镜像3. 搭建博客网站3.1 启动MariaDB3.2 运行应用服务器 WordPress3.3 使用nginx 做反向代理3.4 检查容器状态4. 登录博客配置5 查看数据库1. 前言 基于之前学习kubernetes 比较乱&#xff0c;打算重新学习…

机器学习笔记 十九:由浅入深的随机森林模型之分类

随机森林学习内容1. 集成学习2.sklearn中的集成算法2.1 sklearn中的集成算法模块ensemble2.2 RandomForestClassifier2.2.1 参数2.2.2 n_estimators2.2.3 random_state2.2.4 bootstrap & oob_score2.3 随机森林的重要接口2.4 Bonus&#xff08;装袋法的必要条件&#xff09…

【指针详解】(上)看一遍就会❗❗❗家人们冲❗

前言 ❤️ 铁汁们大家好&#xff0c;欢迎大家来到出小月的博客里&#xff0c; &#x1f917;&#x1f917;&#x1f917;之前呢&#xff0c;我分享了C语言的小游戏“扫雷”。。。。今天呢&#xff0c;给大家分享指针篇&#xff0c;&#xff0c;希望大家看完我这篇文章都能够“涨…

Java Tomcat内存马——Servlet内存马

目录 前言&#xff1a; &#xff08;一&#xff09;Servlet的创建 1、实现javax.servlet.Servlet接口的方式 2、继承GenericServlet类创建Servlet 3、继承了HttpServlet进行创建 &#xff08;二&#xff09;分析注入方式 代码分析 (三&#xff09;payload 1、StandardC…

阿里云OSS、用户认证与就诊人

oss 模块搭建与实现 这里采用的方式是通过后端传 oss&#xff0c;可以对比下 谷粒商城里面的&#xff0c;从后端拿上传凭证&#xff0c;然后前端直传的方式 <dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId> <…

数字化管理门店| 甜品店管理系统

对不少女生来说&#xff0c;甜品店绝对算是经常去的地方&#xff0c;尤其出新品的时候&#xff0c;就如奶茶店一样在排队&#xff0c;在武汉一家足球场的旁边&#xff0c;有一家“甜如箭丘”品牌门店&#xff0c;整体环境装修的非常附有文艺感&#xff0c;明亮的店堂&#xff0…

第7章 网络优化与正则化

系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式 第11章 概率图模型 第12章 深度信念网络 第13章 深…

[Flask]Pycharm+Flask零基础项目搭建入门

Flask在Python web开发中虽然热度低于Django但是也存在不小的市场空间&#xff0c;能作为一个主流web开发框架之一也不是浪得虚名&#xff0c;还是有不少干货在里面的&#xff0c;Flask也具备了不少的自身优势&#xff0c;在后面的认识中我们再逐步深入了解 今天我们就来带大家…

池式结构:对象池(Object Pool)

本文是对 http://gameprogrammingpatterns.com/object-pool.html 的原创翻译。部分地方使用意译&#xff0c;不准确的地方请各位指证。 一、对象池的意义 通过重新使用固定的池式结构中的对象&#xff0c;来代替单独分配和释放对象&#xff0c;可以提高程序的性能和内存使用。…

裸 VSCode 必备插件

VSCode 轻量、开源&#xff0c;新鲜下载的 VSCode 可谓是身无长物、一穷二白&#xff0c;连个项目管理的功能都没有。 身轻如燕的 VSCode 对于后端开发说可能有点幼稚&#xff0c;但对于前端来说刚刚好&#xff0c;毕竟不需要搞什么 Docker、数据库等等&#xff0c;装俩 VSCod…

02 本机搭建kubernetes学习环境kubemini

文章目录1. 什么是容器编排&#xff1f;2. 什么是 Kubernetes&#xff1f;2.1 Kubernetes 到底能够为我们做什么呢&#xff1f;3. 什么是 minikube4. 如何搭建 minikube 环境4.1 minikube 安装4.2 kubectl 安装5. 验证实验节点5.1 kubectl 使用5.2 在kubernetes 运行第一个应用…

第148篇 笔记-DeFi

定义&#xff1a;去中心化金融(Decentralized finance)&#xff0c;简称“DeFi”&#xff0c;是指基于区块链的无许可和透明金融服务生态系统。 DeFi是区块链、智能合约和预言机带来的最重大进步之一。DeFi一开始是在去中心化基础设施上重新创建通用金融工具的运动&#xff0c…

循环玩具游戏

一 问题描述 有个名为 Looploop 的玩具&#xff0c;这个玩具有 N 个元素&#xff0c;以循环方式排列。有一个箭头指向其中一个元素&#xff0c;还有两个预设参数 k1 和 k 2。 上图显示了一个由 6 个元素组成的循环。假设预设参数 k13&#xff0c;k2 4&#xff0c;对这个玩具做…

【谷粒商城 - k8s、devOps专栏】

一、K8s快速入门 其他项目的K8S笔记&#xff1a;https://blog.csdn.net/hancoder/category_11140481.html 1&#xff09;简介 kubernetes简称k8s。是用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。 部署方式的进化&#xff1a; [外链图片转存失败,源站可能…