很多人都会玩剪刀钉锤布的游戏,可要让计算机跟我们玩这个游戏,那就不是一种简单的事情了。
首先,我们分析一下剪刀(伸出中指和食指表示)、钉锤(用拳头表示)、布(平伸五指表示)之间是怎样比较输赢的。钉锤可以砸坏剪刀,所以钉锤赢剪刀;剪刀可以把布剪碎,所以剪刀赢布;布可以包起钉锤,使钉锤失去原有的威力,所以布赢钉锤。由于这个游戏我们玩得太熟了,所以谁也没有每次都去思考这个比较过程。但是,三种手势之间的输赢判断的确是根据它们所代表的物品的功能决定的。
要让现代的电子计算机像我们人脑一样进行上面的思考并做出输赢判断,几乎是不可能的。
那么,怎样做才能让计算机跟我们玩这个游戏呢?首先要做的事情是建立数学模型。所谓建立数学模型,就是把本来不是数学的问题转化成数学问题。
“剪刀钉锤布”游戏的数学模型可以这样建立:分别用1、2、3三个数代表剪刀、钉锤、布三件物品或代表它们的手势。用其中任意两个数的差代表相应的两个手势比较的结果。
人(R)
机(J)剪刀
1钉锤
2布
3剪刀
10
平-1
输-2
赢钉锤
21
赢0
平-1
输布
3
2
输1
赢0
平
R-J=2
1——→赢
0——→平
-1——→输
-2
图“剪刀钉锤布”输赢比较数学模型图
有了这个数学模型,编程序就容易了。
10REM剪刀钉锤布
20A$=“剪刀”:B$=“钉锤”:C$=“布”
30PRINT“人”,“计算机”
35PRINT
40S=0
50FOR I=1 TO 10
60X=INT(RND(1)*3)+1
70IF X=1 THEN J$=A$:GOTO 100
80IF X=2 THEN J$=B$:GOTO 100
90J$=C$
100INPUT Y
105IF Y<>1 AND Y<>2 AND Y<>3 THEN PRINT“错了,重出!”:GOTO 100
110IF Y=1 THEN PRINT A$,J$:GOTO 140
120IF Y=2 THEN PRINT B$,J$:GOTO 140
130PRINT C$,J$
140IF Y-X=0 THEN PRINT“平!”:S=S+5:GOTO 170
150IF Y-X=1 OR Y-X=-2 THEN PRINT“你赢了!”:S=S+10:GOTO 170
160PRINT“你输了,哈哈哈!”
170NEXT I180PRINT190PRINT“你得了”;S;“分”
200END
本程序中的60语句行使用随机数函数和取整函数每次产生1、2、3之中的一个数,用这个来模拟剪刀、钉锤、布。
100语句行键盘输入Y值。要求玩游戏的人随意敲入1、2、3之中的一个数,分别表示出剪刀、钉锤或布。
105语句行对人键入的数进行检查,如果不符合要求(不是1、2、3中的某个数)则要求重新键入。
140—160语句行判断输赢,赢了加10分,平了加5分,输了不加分。
50—170语句行为一循环,共循环10次。
最后在190语句行给出得分。
在本程序中使用了字符串变量,如A$、B$、C$、J$。字符串变量名是在简单变量名后面加一个“$”号。字符串变量中存的是字符,可以使用PRINT语句输出字符串变量的“值”
,也就是输出该字符串变量中存的字符串。