微模板网站建设/网页制作在线生成
一、游戏介绍
三子棋,英文名为 Tic - Tac - Toe,是一款简单而经典的棋类游戏。游戏在一个 3×3 的棋盘上进行,两名玩家轮流在棋盘的空位上放置自己的棋子(通常用 '*' 和 '#' 表示),率先在横、竖或斜方向上连成三个相同棋子的玩家获胜。如果棋盘被填满且没有玩家获胜,则游戏平局
二、程序设计思路
(一)棋盘的表示
使用一个二维字符数组 board[3][3]
来表示棋盘,数组的每个元素对应棋盘上的一个位置。初始时,棋盘上的每个位置都用空格字符 ' '
表示空位。
(二)游戏流程控制
- 初始化棋盘:将棋盘上的每个位置都设置为空位。
- 打印棋盘: 在每次玩家下棋后,将当前的棋盘状态打印出来,方便玩家查看。
- 玩家下棋: 轮流让两个玩家输入下棋的位置,检查位置是否合法(是否为空位),如果合法则在相应位置放置玩家的棋子。
- 判断胜负: 在每次玩家下棋后,检查是否有玩家获胜或者游戏是否平局。
- 游戏结束: 如果有玩家获胜或者游戏平局,打印相应的结果并结束游戏。
三、代码实现
游戏逻辑:
解析游戏逻辑:
先创建棋盘,对棋盘初始化为‘ ’(空格),接下来就进入游戏环节,玩家先下棋,下完棋判断输赢,如果返回值为“C”就继续,反之胜负已定,跳出循环,对返回值进行判断,如果是*玩家赢,#电脑赢,!平局,这个时候整个游戏的逻辑就完了,下面的菜单啥的都很普通,我就不讲解了
如何生成随机数:
在三子棋游戏中,若涉及电脑下棋,其坐标通常是随机生成的。在 C 语言里,rand
函数可用于生成随机数。然而,它生成的是一种 “伪随机数”,这是因为rand()
括号内的种子默认值为 1。若不手动给种子赋值,每次运行程序时,种子始终为 1,那么生成的随机数序列也会是一样的。这是由于随机数的生成会随着种子的变化而变化。
为解决这一问题,我们引入srand
函数,它是初始化随机数生成器。只要srand
函数的种子不断变化,rand
函数生成的随机数序列也会相应地不断变化。
在实际程序中,通常会使用程序运行的时间作为种子,因为时间是时刻在变化的。C 语言提供了time
函数来获取当前时间。time
函数会返回自 1970 年 1 月 1 日 0 时 0 分 0 秒起至程序当前运行时刻的差值,单位为秒,返回值类型为time_t
。当time
函数的参数为NULL
时,它仅返回这个时间差值,该差值也被称为 “时间戳”。通过srand((unsigned int)time(NULL))
这样的语句(因为srand的参数是unsigned int 类型,所以我们将time的返回类型强转为无符号整型),就能以当前时间作为随机数生成器的种子,使得每次程序运行时rand
生成的随机数都不同,从而实现电脑下棋坐标的随机化
在程序中srand((unsigned int)time(NULL))
一般放在程序开头合适的位置,比如main
函数开头,且只调用一次来设置种子,后续多次调用rand
生成不同随机数。否则如果在程序中多次调用srand((unsigned int)time(NULL))
可能达不到预期随机效果(因为短时间内时间戳变化不大,可能生成相近随机数序列)
棋盘的初始化:
棋盘的打印:
玩家下棋:
如果要正确访问棋盘中的每个位置的话,理应是用下标访问,但是玩游戏的人可不知道有下标这样的说法,他们只知道数学中的行和列,所以在判断断这个位置有没有棋时,给玩家输入的坐标-1,刚好对应了数组中的下标
电脑下棋:
判断输赢:
判断获胜的情况有三种:某一行棋子相同、某一列棋子相同以及两条对角线上的棋子相同
如果满足其中某一个条件,就返回第一个位置的棋,这个时候就和解析逻辑那块对应着了
判断平局:
只要棋盘上还有一个空的位置,就没有结束,如果棋盘下满了还没有决出胜负,那就是平局
如果判断输赢那块的判断没有一个满足,就返回C,继续游戏
完整代码:
test.c:
game.h :
game.c :
通过以上代码实现了一个简单的三子棋游戏。这个小游戏不仅帮助我们巩固了 C 语言中数组、循环、条件判断等基础知识,还让我们对游戏编程的基本流程有了一定的了解。你可以进一步对游戏进行扩展,比如添加电脑对战模式、优化界面等,以提升游戏的趣味性和可玩性
相关文章:

【C语言篇】“三子棋”
一、游戏介绍 三子棋,英文名为 Tic - Tac - Toe,是一款简单而经典的棋类游戏。游戏在一个 33 的棋盘上进行,两名玩家轮流在棋盘的空位上放置自己的棋子(通常用 * 和 # 表示),率先在横、竖或斜方向上连成三个…...

安培定律应用于 BH 曲线上的工作点
在本篇博文中,我将展示如何应用安培定律来确定磁芯包裹的导体必须承载多少电流才能从 BH 值工作点获得 B 值,该工作点对应于磁芯材料中的最大 B 值。我在 BH 曲线上使用两个工作点,一个在线性区域,另一个在饱和区域。 安培定律 H…...

深度求索DeepSeek横空出世
真正的强者从来不是无所不能,而是尽我所能。多少有关输赢胜负的缠斗,都是直面本心的搏击。所有令人骄傲振奋的突破和成就,看似云淡风轻寥寥数语,背后都是数不尽的焚膏继晷、汗流浃背。每一次何去何从的困惑,都可能通向…...

【CSS】什么是响应式设计?响应式设计的基本原理,怎么做
在当今多设备、多屏幕尺寸的时代,网页设计面临着前所未有的挑战。传统的固定布局已无法满足用户在不同设备上浏览网页的需求,响应式设计(Responsive Web Design)应运而生,成为网页设计的趋势和标准。本文将深入探讨响应…...

后盾人JS--继承
继承是原型的继承 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…...

提升开发效率:IDE使用技巧与插件推荐
在软件开发过程中,选择一个合适的集成开发环境(IDE)并掌握其使用技巧,可以显著提高开发效率。本文将分享一些常用的IDE使用技巧,并推荐几款实用的插件,帮助开发者更好地利用IDE进行开发。 一、IDE使用技巧…...

开源模型应用落地-DeepSeek-R1-Distill-Qwen-7B与vllm实现推理加速的正确姿势(一)
一、前言 在当今人工智能技术迅猛发展的时代,各类人工智能模型如雨后春笋般不断涌现,其性能的优劣直接影响着应用的广度与深度。从自然语言处理到计算机视觉,从智能安防到医疗诊断,AI 模型广泛应用于各个领域,人们对其准确性、稳定性和高效性的期望也与日俱增。 在此背景下…...

小书包:让阅读更美的二次开发之作
小书包是在一款知名阅读软件的基础上进行二次开发的产品。在保留原有软件的基本功能和用户体验的同时,对其界面和视觉效果进行了精心美化,让阅读体验更加舒适和愉悦。 内置了171条书源,虽然数量不算多,但都是作者精挑细选出来的&a…...

MySQL 插入数据指南
MySQL 插入数据指南 引言 MySQL 是一款广泛使用的开源关系数据库管理系统,被广泛应用于各种规模的组织中。在数据库管理中,数据的插入是基础操作之一。本文将详细介绍如何在 MySQL 中插入数据,包括插入单条记录和多条记录,以及一…...

防火墙安全策略实验
一、拓扑图 需求 Cloud云: 二、防火墙配置 初始化防火墙 Username:admin Password:***** The password needs to be changed. Change now? [Y/N]: y Please enter old password: Admin123 Please enter new password: admin123 Please confirm new password: …...

【Redis】主从模式,哨兵,集群
主从复制 单点问题: 在分布式系统中,如果某个服务器程序,只有一个节点(也就是一个物理服务器)来部署这个服务器程序的话,那么可能会出现以下问题: 1.可用性问题:如果这个机器挂了…...

互联网行业常用12个数据分析指标和八大模型
本文目录 前言 一、互联网线上业务数据分析的12个指标 1. 用户数据(4个) (1) 存量(DAU/MAU) (2) 新增用户 (3) 健康程度(留存率) (4) 渠道来源 2. 用户行为数据(4个) (1) 次数/频率…...

多模块协同信息安全管理平台
1.产品介绍 产品名称 【SecureMOS - 多模块协同信息安全管理平台】 主要功能: [功能1] 模块化架构设计与集成 具体作用与使用方式: 通过模块化的设计,将信息安全系统分解为多个独立且可扩展的组件,便于快速部署和维护。需求满足与问题解…...

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现
伴随近年来新型储能技术的高质量规模化发展,储能电站作为新能源领域的重要载体, 旨在配合逐步迈进智能电网时代,满足电力系统能源结构与分布的创新升级,给予相应规模 电池管理系统的设计与实现以新的挑战。同时,电子系…...

使用LightGlue进行图像配准并提取图像重叠区域
发表日期:2023年6月23日 项目地址:https://github.com/cvg/LightGlue https://github.com/cvg/glue-factory/ LightGlue是一个在精度上媲美Superglue,但在速度上比Superglue快一倍的模型。通过博主实测,LightGlue的配准效果比Su…...

DeepSeek-R1:开源机器人智能控制系统的革命性突破
目录 引言 一、DeepSeek-R1 的概述 1.1 什么是 DeepSeek-R1? 1.2 DeepSeek-R1 的定位 二、DeepSeek-R1 的核心特性 2.1 实时控制能力 2.2 多传感器融合 2.3 路径规划与导航 2.4 人工智能集成 2.5 开源与模块化设计 2.6 跨平台支持 三、DeepSeek-R1 的技术…...

第二十二章 MySQL锁之全局锁
目录 一、锁概述 二、全局锁概念 三、全局锁使用 四、全局锁特点 五、不加锁一致性数据备份 5.1. 实现方式 5.2. 优点和缺点 一、锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O&#x…...

pytorch实现简单的情感分析算法
人工智能例子汇总:AI常见的算法和例子-CSDN博客 在PyTorch中实现中文情感分析算法通常涉及以下几个步骤:数据预处理、模型定义、训练和评估。下面是一个简单的实现示例,使用LSTM模型进行中文情感分析。 1. 数据预处理 首先,我…...

Win11关闭登录密码?
或者使用winR快捷键, 输入: netplwiz 进入页面后,按照提示按ctrlaltdel键更改密码。 在跳转页面点击更改密码。 输入原密码后,将新密码设置为空即可。 Win11的两个实用技巧系列之如何关闭登录密码?_win11关闭密码还是要输入-CSDN博客...

e2studio开发RA4M2(6)----GPIO外部中断(IRQ)配置
e2studio开发RA4M2.6--GPIO外部中断(IRQ)配置 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置SWD调试口设置GPIO口配置按键中断配置中断回调函数主程序 概述 GPIO(通用输入/输出&a…...

DeepSeek 阐述 2025年前端发展趋势
预测2025年前端的发展趋势。首先,我需要考虑当前的前端 技术发展情况,以及近几年的变化趋势。比如,框架方面,React、Vue、Angular这些主流框架的更新方向和社区活跃度。可能用户想知道未来哪些技术会更流行,或者需要学…...

linux内核源代码中__init的作用?
在 Linux 内核源代码中,__init是一个特殊的宏,用于标记在内核初始化阶段使用的变量或函数。这个宏的作用是告诉内核编译器和链接器,被标记的变量或函数只在内核的初始化阶段使用,在系统启动完成后就不再需要了。因此,这…...

计算机从何而来?计算技术将向何处发展?
计算机的前生:机械计算工具的演进 算盘是计算机的起点,它其实是一台“机械式半自动化运算器”。打算盘的“口诀”其实就是它的编程语言,算盘珠就是它的存储器。 第二阶段是可以做四则运算的加法器、乘法器。1642年,法国数学家帕斯…...

浏览器的通信能力
浏览器的通信能力 用户代理 浏览器可以代替用户完成http请求,代替用户解析响应结果,所以我们称之为: 用户代理 user agent 在网络层面,对于前端开发者,必须要知道浏览器拥有的两大核心能力: 自动发出请…...

11. 9 构建生产级聊天对话记忆系统:从架构设计到性能优化的全链路指南
构建生产级聊天对话记忆系统:从架构设计到性能优化的全链路指南 关键词: 聊天对话记忆系统、多用户会话管理、LangChain生产部署、Redis记忆存储、高并发对话系统 一、服务级聊天记忆系统核心需求 多用户隔离:支持同时处理数千个独立对话持久化存储:对话历史不因服务重启丢…...

25.02.04 《CLR via C#》 笔记14
第二十一章 托管堆和垃圾回收 内存分配过程 CLR维护一个“下一次分配指针”(NextObjPtr),指向当前托管堆中第一个可用的内存地址 计算类型所需的字节数,加上对象开销(类型对象指针、同步块索引)所需字节数…...

半导体器件与物理篇5 mosfet及相关器件
认识mos二极管 MOS二极管是研究半导体表面特性最有用的器件之一。MOS二极管可作为存储电容器,并且是电荷耦合器件(CCD)的基本结构单元。 MOS二极管结构的重要参数包括:氧化层厚度d;施加于金属平板上的电压V(正偏压时V为正&#x…...

Hugging Face GGUF 模型可视化
Hugging Face GGUF 模型可视化 1. Finding GGUF files (检索 GGUF 模型)2. Viewer for metadata & tensors info (可视化 GGUF 模型)References 无知小儿,仙家雄霸天下,依附强者才是唯一的出路。否则天地虽大,也让你们无路可走࿰…...

PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接
PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接 文章目录 PVE纵览-掌握 PVE USB 直通:让虚拟机与物理设备无缝连接摘要前提条件步骤一:识别 USB 设备步骤二:编辑虚拟机配置步骤三:重启虚拟机注意事项其他配置选…...

关于系统重构实践的一些思考与总结
文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更(数据平滑迁移)3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…...