三子棋(简易和高级)编程思路

本文介绍了如何从创建文件夹开始,一步步实现一个简单的三子棋游戏。包括编写菜单选择功能,使用二维数组创建棋盘,实现玩家和电脑下棋的逻辑,以及判断输赢的算法。作者分享了游戏中的优化技巧,如开场动画、动态效果,并鼓励读者亲自尝试编写这个游戏。
摘要由CSDN通过智能技术生成

一、文件夹的创建

想要写好三子棋,将文件夹创建好是成功的第一步。我们需要创建三个文件夹,一个是头文件,用于声明自己写的函数,还有两个是源文件,一个用来放程序主体,也就是编写三子棋的思路,另一个用来定义函数,让主体能够直接调用。

二、三子棋实现思路

前言,每实现一个功能前,可以将其变成一个函数,方便重复调用。例如棋盘的展示,就需要重复调用很多次。

1、菜单与选择

首先,当玩家进入游戏时,我们希望他能进行选择,play  or  exit 并且要能保证他能多次游玩,要实现这个,我们可以先写个menu()函数,将play 和 exit打印下来,提示玩家进行选择,然后在用do while()写出循环,配合swich创造出进入游戏的入口。那么我们可以用1,代表play,用0,代表exit,在case 1里创建出进入游戏的入口,就可以书写游戏体了。这样写方便跳出do while的循环,也能在玩家选择错误时,继续进行循环。

2、棋盘的创建

三子棋,是一个3×3的棋盘,然后往里面填写两种符号,相同的符号连成3个,则胜。所以,要实现三子棋,第一步,是写出一个美观的棋盘。小时候,我们想玩三子棋时,往往会拿一个树枝,在地上横着画两条线,竖着画两条线,这样,一个棋盘就诞生了。现在我们,不仅仅要能创建一个棋盘,还要能够填写内容进去。所以,这要靠二维数组来实现。我们先在头函数里定义好行和列的数,用字母代替,可以方便我们在需要改变行和列时直接改动定义好的字母,而不用一个一个去改动。然后创建一个二维数组,用循环将二维数组里面的内容全部变成空格,接着再用循环,用| 和-来分格一个一个字符,这样就能达到一个棋盘的目的。

3、下棋

下棋分为玩家下棋和电脑下棋

(1)玩家下棋:玩家下棋比较好实现,我们只需要让玩家,选择要下的位置(x,y),再让x和y各减1,满足数组下标的需要,然后先判断下玩家所填写的地方有没有棋子,若有棋子,提示下玩家“这个地方已被占用”再让玩家重新填写,若这个地方时空格,则将空格赋值成玩家的字符,这又需要一个循环来实现,并且能在满足条件时跳出循环。这样,玩家的填写就解决了

(2)电脑下棋:电脑下棋分为高级版和低级版:

-低级版很简单,只需要用rand()函数和srand()函数创建随机值,给x和y赋值,然后在判断下下棋的地方有无棋子随机填就好了。

-高级版就有些麻烦了:首先要能很熟悉三子棋的规则,明白什么能赢,什么不能赢。最简单的设计就是要会堵住玩家的棋子,还要在电脑自己要获胜时,直接填上那个棋子。笔者能力有限,直接在电脑下棋这个函数里,写了不知道多少个循环才实现。笔者还在这个三子棋里,添加了先后手这个功能,能让玩家选择先手还是后手,无论电脑还是玩家,先手肯定是占优的,而先后手就相当于让玩家自主选择难度了。在先后手中,无论谁想赢,中间的位置是必须占领的,所以在电脑下棋时,我都会让电脑判断下中间是否为空,要是为空就直接添上,不为空,再进行其他判断。在给同伴游玩的过程中,笔者还发现,无论谁下棋,四角的空也是必须占领的,所以,我给电脑添加了判断四周是否为空的能力。笔者实在是个小白,用了无数的goto才实现这些能力,而且代码一环扣一环,可操作性很差,但最终还是写出来了。

4、判断输赢
判断输赢的过程,我也单独用了一个char类型的函数来写,利用传入数组判断之后的返回值,来判断各种情况的发生。有三种情况:玩家获胜,电脑获胜和平局。玩家获胜分为,横排竖排和斜排获胜,电脑也是相同,只要用循环判断是否有三个相同的值,并且这个值是什么,若是玩家棋子则返回一个字符,若是电脑棋子则返回一个字符,若棋盘满了则返回一个字符。让判断输赢的函数来判断字符是什么,最终达到判断输赢的功能。

5、补充

笔者用了很多方法来完善和美观这个游戏实现的过程,比如设置开场动画,利用清屏函数来让界面看起来像动态的,利用sleep函数来减缓清屏的速度,让玩家能看清清屏前的内容是什么等等等。小小的游戏有大大的学问在里面,如果可以,希望读者能自己动手试一试。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值