数组高级应用之实现井字棋游戏

数组应用二

今天来给大家讲讲数组另外一种基本应用排序和如何使用数组实现井字棋游戏。

一、排序

利用数组可以使我们比较方便的进行排序,下面介绍两种常见的排序算法,选择排序和冒泡排序。

选择排序:以从小到大为例,通过与相邻的数据进行比较,若这个数比前面的数小,我们则把这个数的地址暂存为最小值,第一轮比较完后,我们就可以确定最小值,然后我们开始第二轮的比较,可以确定第二小的数,以此类推,我们就可以把数据从小到大排序出来。

e4d54068ea0b4549bb21f86fea2b4546.png

 dff42ec997db42f99a3852abaf9cab17.png

 对%4d能有个更深印象

5e1b006983994a518efa6751d60e7fcb.png

 如果想知道每轮数据的变化,我们还可以加多一个for循环用于输出。

冒泡排序:以从小到大为例,通过与相邻数据进行比较,若这个数比前面的数小,则进行交换,直到和最后一个数比较完毕,结束第一轮,然后开始第二轮比较,直到数据排序为从小到大。

ba210f960a7a404a8f0e2147b7f14fa6.png

 

二、井字棋游戏

我们可以先用一个一维数组来表示棋盘状态,每个元素代表一个格子的状态(比如空、X、O等)。玩家下棋时,通过修改数组元素来更新棋盘状态,然后根据规则判断胜负。先看代码:

a66d0f4bd4404b9b959c2ececd635a02.png

99b115b51dcf4f6cb7dcaa0c1954e375.png 

在这个代码中,我们先在main函数之前定义了玩家,一个棋盘和一个win函数(用来判断玩家是否赢得游戏),再看main里面的代码,我们可以通过do…while循环来让玩家可以在游戏未结束前持续输入,在do里我们先调用print_board函数来打印出棋盘,然后对player使用条件操作符,当player为1时,表达式的值不为0,即为真,所以当前输出1(即玩家1),当player为2时,表达式的值为0,即为假,所以输出为2(即玩家2),以此类推,当player++时,我们就可以实现玩家的循环输入。

f3346c0444624afebee696f4ff7f501a.png

 

[不好意思,图片有一点被遮住了,完整代码为:

if (choice < 1 || choice > 9 || board[choice - 1] == 'X' || board[choice - 1] == 'O')

 {printf("无效的选择,请重新输入。\n");

   continue;}]

下面这个条件操作符用来判断如果是玩家1的选择,则输出"X",否则输出"O"。最后调用check_win函数判断哪一方的玩家赢得游戏。

5145e4f65886409b9ad6dcf81fcec7da.png

 

 好啦,今天的分享就到这里了。再次声明:作者水平有限,如有失偏颇,还请各位不吝赐教!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值