Bash游戏— 1 | 井字游戏

著名的井字游戏

挑战是要在shell中编写类似的逻辑,但这很容易。 因此,我至少要为贝壳爱好者准备一些游戏。

另一个原因是,我从小就玩很多。 当您阅读时,我们可能会像我在编写此行时一样拥有相同的笑脸。

在Page的左侧,这幅传奇游戏的图像来自Linux自己的bash shell。

创建董事会

数组-数组在shell中占有特殊的位置,没有更好的替代方法来定义和使用列表。

因此,我使用了数组来保存几乎所有列表。 最初的电路板设计如下图所示。

  #电路板设计 
1 | 2 | 3
--------
4 | 5 | 6
--------
7 | 8 | 9#然后,将阵列分布并对齐以印刷电路板,从而创建一维度量。 [SET- $ sets]
====================
$ {b [1]} | $ {b [2]} | $ {b [3]}
---------
$ {b [4]} | $ {b [5]} | $ {b [6]}
---------
$ {b [7]} | $ {b [8]} | $ {b [9]}

注册玩家

因为这是2人游戏,所以与计算机一起玩并不总是很有趣。 编写玩家注册时要注意每次最多只能有2位玩家,并确保脚本不会控制哪个玩家先开始,而是随机选择。

  #2个用户已初始化 
users = {p1 p2)#通过在两个可用索引之间进行混洗,确保每个玩家都有机会开始比赛,从而使随机用户可以玩。
shuf -i 0-1 -n 1

每次玩家选择移动时,只需通过对照数组默认值检查数组中每个索引的值来更新单维度指标中的可用位置。

旋转转弯

通过3个简单的步骤旋转转弯:

  • 检查指标中是否有足够的空闲点。
  • 允许玩家选择它的位置。
  • 设置下一位玩家来回合。
  #检查是否有多个景点。而[$ {#nspots} -ge 1]; 做 
案例$ u
0)player = $ {users [0]}

#将回合分配给下一位玩家
u = 1
打破;;
1)player = $ {users [1]}

#将回合分配给下一位玩家
u = 0
打破;;
埃萨克
做完了

避免作弊

这里的一个巨大挑战是:

  1. 为避免这种情况,请重新选择其他玩家或同一玩家选择的相同位置。
  2. 为了避免这种情况,玩家可以选择o或x以外的其他字符。
  3. 为了避免,在游戏中作弊。
 如果[[“ $ {b [$ spot]}” ='。  ]] && [[!  -z $ spot]] && [[!  $ spot -gt 9]] && [[!  “ $ spot” =〜[az]]] 
然后
b [$ spot] = $ p2
打破
其他
echo -e“警告:不允许该地点!!”
科幻

获奖组合

在井字游戏中,玩家首先在单个行或列中获胜所有连续的点。 因此,所有这些组合成为获胜的赌注。

  #检查用户的所有获胜可能性,如果匹配则将分数加1。if[[“” $ {b [1]}“ =” $ {!i}“]] && [[$ {b [2]} =“” $ {!i}“]] && [[$ {b [3]} =” $ {!i}“]]]; 然后 
((v + = 1))
elif [[“ $ {b [1]}” =“ $ {!i}”]] && [[$ {b [4]} =“ $ {!i}”]]] && [[$ {b [7 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [1]}” =“ $ {!i}”]] && [[$ {b [5]} =“ $ {!i}”]]] && [[$ {b [9 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [2]}” =“ $ {!i}”]] && [[$ {b [5]} =“ $ {!i}”]]] && [[$ {b [8 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [3]}” =“ $ {!i}”]] && [[$ {b [6]} =“ $ {!i}”]]] && [[$ {b [9 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [3]}” =“ $ {!i}”]] && [[$ {b [5]} =“ $ {!i}”]]] && [[$ {b [7 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [4]}” =“ $ {!i}”]] && [[$ {b [5]} =“ $ {!i}”]]] && [[$ {b [6 ]} =“ $ {!i}”]]; 然后
((v + = 1))
elif [[“ $ {b [7]}” =“ $ {!i}”]] && [[$ {b [8]} =“ $ {!i}”]]] && [[$ {b [9 ]} =“ $ {!i}”]]; 然后
((v + = 1))
科幻

计分板

设计记分板时要牢记游戏能力,可以从结束处重新开始,并为玩家提供更好的游戏感觉。

  #初始计分板 
-分数-
---------
| P1 | P2 |
---------
| 0 | 0 |
---------#确认当前玩家并分配分数
如果[[“ $ i” ='p1']]; 然后
v1 = $ v
其他
v2 = $ v
科幻

电脑的AI

该功能(计算机(我们的脚本)在其中)不仅选择其动作,而且还可以智能地阻止对手在下一动作中获胜。

在这里,计算机会检查对手是否可以在下一步行动中获胜,然后选择空位并避免失去比赛。

  #检查对手是否可以赢还是我可以赢。if [[$ {b [$ one]} =“ $ w”]] && [[$ {b [$ two]} =“ $ w”]]; 然后 
#检查现货是否可用
is_spot_free $ 3
elif [[$ {b [$ one]} =“ $ w”]] && [[$ {b [$ three]} =“ $ w”]]; 然后
#检查现货是否可用
is_spot_free $ two
elif [[$ {b [$ two]} =“ $ w”]] && [[$ {b [$ three]} =“ $ w”]]; 然后
#检查现货是否可用
is_spot_free $ one
科幻

而且,在不违反游戏规则的情况下,只要能够在下一轮中采取制胜法宝的能力。

在这里,计算机检查它是否可以在下一步移动中获胜,然后进行移动并获胜。

  #检查(如果有空位,我可以移动)赢得还是避免损失。if[“ $ {b [$ s]}” ='。  ]; 然后 

科幻

管理组和保留分数

第一部分是小菜一碟,在游戏开始时增加一个变量,在管理布景中发挥作用。

但是,第二部分很容易但是很棘手。

  ((w + = v)) 

结论

我同意,这不是最好的,可以做到的,但这主要是为了好玩。 但是,我也相信,对于初学者和编程爱好者来说,这是一种学习,编写脚本的好方法,不仅是在shell中,而且我们可以使用许多语言。

尝试一下,GitHub存储库中还有其他一些游戏。 包括另一款传奇游戏以及该系列的下一个即将推出的游戏,《 Bash游戏-扫雷》。

我确实同意,有很多空间可以进行代码清理和改进。 如果您希望做出贡献,使现有游戏更好或添加新游戏,则欢迎PR和建议。