首页 百科知识 趣味火柴棍

趣味火柴棍

时间:2023-10-16 百科知识 版权反馈
【摘要】:题目中要求模拟一个人机对战游戏,对战时要不断修改一个“变量”的值,这个变量的初值为火柴棍的总根数———21。假设变量stickNum代表火柴棍的总根数,最终stickNum的值为1且这个1应由甲方取得。程序中for循环的循环变量i从1变化至4正好对应这四轮。其中for循环的循环体中又包含一个while循环,这个while循环也很重要,它的作用是过滤非法的取火柴棍个数。本题不仅只有一种方法,读者可以尝试其他解题思路来进行程序设计。

趣味火柴棍

生活中有许多小游戏,游戏中往往蕴含着智慧与“玄机”,譬如一根小小的火柴棍照样可以玩出大乐趣。下面就以C语言为工具来开发一个小小的火柴棍游戏。

一、需求分析

两人以火柴棍“对弈”:现共有21根火柴棍,两人轮流取这些火柴棍,每人每次可取走1~4根(1、2、3、4根均可),但不可多取(大于4根),也不能不取,谁取到最后一根火柴棍则认定谁输。编写一个程序模拟人机对弈战况,要求人先取,计算机后取,务必保证计算机每次都赢,使之成为“常胜将军”。

二、总体设计

题目中要求模拟一个人机对战游戏,对战时要不断修改一个“变量”的值,这个变量的初值为火柴棍的总根数———21。最难的地方在于务必使计算机取得最终的胜利,这就需要使用一定的方法和技巧来实现这个目标。

限制条件有:(1)共21根火柴棍;(2)人先取,然后计算机取,依此顺序进行下去;(3)每人每次取x根,其中x大于等于1,小于等于4;(4)计算机赢。我们不妨采用逆向思维,设甲乙双方,甲方为对战计算机的人,乙方为计算机。假设变量stickNum代表火柴棍的总根数,最终stickNum的值为1且这个1应由甲方取得。21根中除了最后1根还有21-1共20根火柴,这里令甲乙各取一次为一轮,显然这20根火柴必须经过整数轮来取(保证下一轮是甲方取最后的一根)。

根据每一轮甲乙取的火柴棍之和必然位于2与8之间(每人每次可取1、2、3或4根火柴),可以得到这样一个结论:可能的整数轮取值范围为2~10,接下来筛选符合条件的。第一次筛选的条件为能够整除20,符合条件的有2、4、5、10。接下来再次筛选。

(1)2轮:不符合条件,这要求每轮取的总根数为10根;

(2)5轮:不符合条件,每轮取4根,若甲取4根,则乙只能取0根,与题意矛盾;

(3)10轮:不符合条件,每次只能各取1根或一人取2根另外一人取0根。

综合上面的各种分析,只有进行4轮是最合理的解决办法,每轮甲乙共取5根。若甲方取x根,则下一次乙方取5-x根。分析出这个结果,问题就迎刃而解了。只需要使用一个循环结构即可完成上述要求。

三、案例源代码

img444

img445

四、系统运行

(1)单击【调试】工具栏中的编译按钮、链接按钮和运行按钮即可运行该游戏。系统运行后在命令行中显示了游戏说明,并提示用户输入要取火柴棍的根数,如图2-1所示。

img446

图2-1

(2)根据游戏规则,用户可以输入1~4之间的一个整数,例如3。按【Enter】后系统显示对手(计算机)所取根数以及剩余总根数,并再次提示用户进行选择。如图2-2所示。

img447

图2-2

(3)根据游戏规则,用户可以再次输入1~4之间的一个整数,例如2。按【Enter】后系统显示对手(计算机)所取根数以及剩余总根数,并再次提示用户进行选择。如图2-3所示。

img448

图2-3

(4)根据游戏规则,用户可以再次输入1~4之间的一个整数,例如4。按【Enter】后系统显示对手(计算机)所取根数以及剩余总根数,并再次提示用户进行选择。如图2-4所示。

img449

图2-4

(5)根据游戏规则,用户可以再次输入1~4之间的一个整数,例如4。按【Enter】后系统显示对手(计算机)所取根数,此时仅剩余1根火柴供用户选择,系统提示游戏结束。如图2-5所示。

img450

图2-5

五、程序分析

这个题目看似十分复杂,经过分析之后可以发现其中的奥妙所在,即保证两人所取火柴棍总和为5,共需要经过甲乙、甲乙、甲乙、甲乙共四轮的取火柴棍顺序,接下来留给甲的只有1根火柴棍。程序中for循环的循环变量i从1变化至4正好对应这四轮。其中for循环的循环体中又包含一个while循环,这个while循环也很重要,它的作用是过滤非法的取火柴棍个数。因为题目中限定了每人每次只能取1~4根,所以凡是不在这个范围内的都会提示出错信息,必须重新输入数据。

本题不仅只有一种方法,读者可以尝试其他解题思路来进行程序设计。如果题目中的条件之一改为每人每次可取走1~3根的话程序又该如何修改呢?

六、小结

本章利用C语言开发了一个趣味小游戏———火柴棍游戏,主要使用了循环以及循环的嵌套结构来实现。结构化程序设计中顺序结构、选择结构和循环结构是三种基本结构,因此掌握好这三种基本结构对于开发复杂的程序具有十分重要的意义。这就好比盖楼房打地基一样,只有基础扎实了,楼房才能更高更稳。进行程序设计也是一样的道理,基础知识掌握牢固、熟练,才会熟能生巧、融会贯通。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈