简易三子棋游戏实现

news2024/11/15 11:26:52

哈喽小伙伴们大家好,我们一起学习三子棋游戏的创建吧。在开始之前我们先来复习一下,函数声明放在头文件中函数定义放在源文件中。那么什么是函数声明和函数定义呢?所谓函数声明就是说明函数的返回参数,函数类型,函数名。但具体存不存在,这可不归他管。函数定义就更加简单了,说明函数的具体实现功能。接来下我们正式开始学习吧

在开始三子棋之前我们需要三个文件test.c文件用于测试,game.h用于放置函数声明,game.c放置函数定义。OK接着开始吧

一般来说,一打开游戏就会弹出一个游戏菜单让用户选择是开始玩游戏还是退出游戏。并且再玩过一把之后选择再来一把还是结束游戏。对于这种我们选择用do while()函数,因为do while的特点是先执行在判断。这一点就符合我们的游戏设计的需要。然后应该在do while()函数中放置菜单函数。此时先来设计菜单内容,大致内容就是选择1开始游戏,选择0退出游戏。到这里一个简单的菜单就设计好了,如图

在游戏中出现菜单之后,提示用户就进行选择是退出游戏还是开始游戏。对于用户的输入我们也要进行判断,此时在do while()函数中可以用一个switch语句来解决,当然这里也可以用if else语句来解决不过略微的麻烦一点。

也有小伙伴可能也会有疑问说,为啥要有default语句项呢为啥do while()中while后的括号中放的是input呢?这里来说明一下,当用户输入的既不是1也不是0,那么此时我们该提醒一下用户输入错误让用户重新选择。至于while()判断部分为啥要放input则更简单啦,判断部分非0为真进入循环,0为假跳出循环,当输入既不是1也不是0是依旧会进入循环也就是进入游戏。

解决完这些,我们要在case 1中分装一个game()函数,此时才正式进入三子棋代码实现部分。如图,

我们会发现三子棋棋盘和二维数组的打印是一致的,这就说明我们可以用一个char类型的二维数组来表示棋盘。倘若我们要一个3*3大小的棋盘,则可以写成char board[3][3];但是这种写法的话棋盘的大小就固定了,当想换成5*5或者更大的棋盘是就会显得不方便。该如何解决呢?没错就在头文件中用define来定义常量,这样想修改时只需要在头文件修改即可。而且只需要引用一下game.h就好了

再来初始化棋盘,把棋盘的全部内容都初始化为空格。用到一个InitBoard函数,初始化的方式也简单遍历一遍数组把每个赋值为空格即可。这里我们把函数声明依旧放在game.h中,InitBoard函数定义放在game.c文件中。注意:在game.c中也要引用game.h

接下来就是打印棋盘,先准备一个DisplayBoard函数,同样它的实现放在game.c中声明放在game.h中

以3*3的棋盘为例,我们可以把打印字符和|看成一组,把---和|看成一组。同时呢在打印第三组字符之后不在打印|,第三组---也是同样不打印|。再往下看会发现第三组字符和|打印之后就不在打印了。这些是我们需要注意的问题避免打印图案错误。那我们如何来打印呢,来,上代码(等!等!在打印字符和|之后要进行换行)

此时呢棋盘初始化也并且打印好了,接下来就该来到下棋部分了。在此之前玩家下棋用‘*’表示,电脑下棋用‘#’表示。下棋嘛先让玩家进行下棋如何打印棋盘,再判断输赢。然后再有电脑下棋,打印棋盘,判断输赢。这个是个循环过程,毕竟不能一次就下成功了叭。所以要用一个while()循环,判断部分就放一个非0的,当判断玩家赢或者电脑赢或者平局的时候就跳出循环。先开始玩家下棋,这不得来个PlayerMove函数来实现,函数参数放进去数组名,行,列。具体实现依旧放在game.c中来。不过这里还需要注意一个问题,在二维数组中,行和列都是从0开始。但是玩家可不是程序员,他可不会从0开始,一般会从1开始。而且输入的坐标也不一定就是在棋盘之中。所以在PlayerMove函数中先进行判断,要是符合棋盘的行列就继续判断,不符合则提醒一下玩家坐标非法。当坐标合法之后,倘若玩家输入的坐标是空格没被占用的话则继续输入,反之则提醒玩家输入的坐标已经被占用,再玩家输入之后再来打印棋盘。口说无凭,那不得上代码

玩家下棋结束之后再来电脑下棋,判断输赢先不急♪(・ω・)ノ

电脑下棋也要一个函数来实现,就浅浅的把这个函数称之为ComputerMove.依旧是把函数名,行列传过去,具体实现在game.c中声明在game.h中。电脑下棋就不要太复杂,随机生成坐标然后再判断一下生成的坐标有没有被占用,被占用的话就再生成一个反之则下棋并跳出循环,电脑下棋完成之后依旧要打印棋盘。那么问题又来了如何生成随机坐标呢?小伙伴们还记得rand函数吗,rand函数可以生成随机坐标(记得引用对应头文件诺)。但是电脑下棋的随机坐标必须是要符合棋盘行列的,这可咋办呢?是的没错,电脑生成的行坐标用rand()%ROW,列坐标用rand()%COL.可能又有小伙伴有疑问了为啥要这样写!以3*3棋盘为例,行和列的范围都是0~2,这种用rand()%3就能得到范围。还有一个需要注意的是:在使用rand函数之前必须使用srand(),详情请看

上代码

终于来到了判断是输赢的部分了,判断输赢的话会有四种结果:玩家赢,电脑赢,平局,继续。平局就是棋盘已经满了。当玩家赢时返回‘*’,电脑赢时返回‘#’,平局返回‘q’,继续游戏返回‘c’。不管是玩家赢还是电脑赢,都说明棋盘上的三行或三列,一撇亦或是一捺连成三个。但一定要注意这几个都不能是空格。否则在玩家下棋之后就会直接结束游戏(小编昨天写的代码会写成这样的,呜呜呜)。既不是电脑赢也不是玩家赢的话,要进行判断棋盘是否满了,满了的话平局,反之则游戏继续。分析到此,我们在判断输赢时用一个char型的is_win函数来进行判断并且返回值,倘若返回的是‘c’游戏继续,不是‘c’跳出循环。跳出循环之后再对返回值进行判断,为避免麻烦可以用一个char ret 来接收is_win的返回值。倘若ret是‘*’,则打印玩家赢。若是‘#’,则打印电脑赢。若是‘q’,则打印平局。分析结束,上代码

OK,代码到这里就设计完成了来看看实现效果吧

最后就是整个代码啦

请问坚持到这的勇士还有多少,敬勇士。以上就是今天所有的内容。勇士们记得一键三连呐么么哒

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

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

相关文章

基于PHP的图书管理系统

摘要网络技术给生活带来了十分的便利。所以把图书管理与现在网络相结合。在图书馆发展的整个过程中,图书担负着最重要的角色。为满足如今日益复杂的管理需求,各类管理系统程序也在不断改进。本课题所设计的图书管理系统,使用B/S架构&#xff…

C++之this指针

this指针到底是什么?this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。我们操作一个对象…

Hadoop配置手册1:hadoop环境搭建与测试

Hadoop配置手册1 Date: September 25, 2022 第1章 hadoop环境搭建 1.1 安装Vmware软件 下载地址:https://www.onlinedown.net/soft/45831.htm 运行安装程序,并连续点击下一步安装 输入密钥,启动程序 详细参考:https://blog.csd…

2023年19个数学建模竞赛重磅来袭!!!

更新时间:2022年2月3日 本人的团队全是计算机的研究生,从本科到研究生有丰富的打比赛和数模的经验,有需要指导的,请私信我 相关链接 (1)【数学建模】2022年整年所有数学建模竞赛时间表 (2&a…

再过半小时,你就能理解Kafka的基本原理了

kafka总结一.定义二.基础架构及术语三.工作流程分析3.1发送数据3.2保存数据3.2.1 partition结构3.2.2 message结构3.2.3 存储策略3.2.4 消费数据一.定义 Kafka是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据,具有…

基于 PyTorch 的目标检测(YOLO实现)

目标检测是一个直到最近才开始逐渐被征服的挑战。解决这个问题对于自动化和自动驾驶来说是至关重要的。对解决办法的追求导致了各种方法的发展。我想要描述一些主要的方法,在过去的21目标检测已经被使用,然后讨论 Yolov3的实现。讨论方法引言虽然深度学习…

windows 7 离线安装vs20219,GraalVM 打包java成可执行程序

环境准备 由于vs2022不支持windows 7 ,故用vs2019版。 如果是 win7 系统,在安装下载的依赖项前需要安装 win7 所需要的两个补丁 KB4490628和KB4474419 ,下载地址分别为(下载后直接安装即可): 参考这篇博客…

vite --- 搭建开发环境

目录 下载安装和初始化VSCode 安装Node.js yarn 使用 pnpm 安装与使用 搭建第一个Vite项目 使用 PNPM创建项目 项目目录解读 下载安装和初始化VSCode 1、访问网站 Visual Studio Code - Code Editing. Redefined 2、选择平台版本 选择符合自己操作系统的安装包下载完毕…

接口测试及接口抓包常用的测试工具有哪些?

目录 接口 接口测试的重要性 常用抓包工具 01、F12 02、Fiddler抓包工具 03、Charles抓包工具 04、Firebug抓包工具 05、httpwatch抓包工具 06、Wireshark抓包工具 07、SmartSniff抓包工具 常用接口测试工具 01、Postman 02、Jmeter 03、RESTClient 04、WireMock…

655. 汽车大甩卖2 etiger.vip 答案

题目描述 有n辆车大甩卖,第i辆车售价a[i]元。有m个人带着现金来申请购买,第i个到现场的人带的现金为b[i]元,只能买价格不超过其现金额的车子。你是大卖场总经理,希望将车和买家尽量多地进行一对一配对,请问最多卖出多…

Qt 开发环境搭建

一、Qt下载与安装 1、qt下载网站https://download.qt.io/ 其中各个目录含义如下: 目录说明snapshots/预览版,最新开发测试的Qt库和开发工具online/在线安装源official_releases/正式发布版,是与开发版相对应的稳定版Qt库和开发工具&#x…

利用哨兵简化实现难度

首先先回顾一下链表的插入和删除,如果需要在一个结点p后边插入一个结点,那么只需要下边两行代码: new_node->next p->next; p->next new_node;但是当往链表插入第一个结点时候,上边的代码就不能用了。需要进行下边的处…

【vue2】vue框架学习前置必备基础知识

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:数组 | 字符串中常用方法、对象解构语法、function |箭头函数this指向、展开运算符、原型…

为了会做题而学习期权合约

基本术语 买入期权:按照固定价格购买特定物品的期权。卖出期权:按照固定价格出售特定物品的期权。执行价格:期权合约中约定的固定价格。到期日:在其后期权不再被执行的日期。欧式期权:期权只能在到期日当日被执行。美…

python带你采集热点事件,让你第一时间掌握全发展

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 实现流程: 一. 思路分析 找到数据来源 network 记录网页数据 请求 二…

windows下djaongo项目移植至centos7系统并启动

概述:在windows下开发完成的django项目需要移植至centos系统并启动。 文章目录1,在django项目目录下生成requirements.txt文件2,下载FileZilla安装并连接Linux系统3,本地传输文件至linux系统3.1,可用vim修改settings.py的参数4,安装requirements.txt依赖包5,启动项目…

pwn小白入门 装载 笔记

所看视频奉上:5、装载与汇编_哔哩哔哩_bilibili笔记如下:1.查看文件类型:file 文件名其中:add:文件名ELF:文件格式64-bit:64位LSB:端序 lsb:小端序 msb:大端序x86-64:架构…

sqlserver2012数据库,日志文件损坏修复

背景 服务器突然断电,导致数据库日志文件损坏,数据库无法启动。 本方案也同样适用于不小心删除数据库日志文件的情况。 相关报错 master数据库日志异常,导致数据库无法启动: 无法在数据库“master”(数据库 ID 为 1)的分配单元 …

windows下生成自签证书并配置到chrome

Windows自签证书生成工具:XCA – X Certificate and Key Management 简称:XCA 下载地址: https://github.com/chris2511/xca/releases 或者 http://sourceforge.net/projects/xca/files/latest/download 界面(1.4.1版本&#xff0…

从0开始学python -19

Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : value2, key3…