<p>改善游戏的几点措施:</p>
<ul>
<li>正如前面提到的注释和其他答案,在设置值时,请确保保持数组\列表长度。使用<code>len(mylist)</code>而不是硬编码长度是有帮助的</李>
<li>除非您可以从错误中恢复(或记录错误),否则Try\Except不是真正有用的。在这种情况下,只要让错误发生,您就可以看到问题</李>
<li>当检查电路板中是否有空位时,从底部开始查找第一个空单元</李>
<li>考虑一列可能已满,因此无法添加新的部分</李>
</ul>
<p>我使用此代码进行测试:</p>
<pre><code>currentField = [
[" "," "," "," "," "," "],
[" "," "," "," "," "," "],
[" "," "," "," "," "," "],
[" "," "," "," "," "," "],
[" "," "," "," "," "," "],
[" "," "," "," "," "," "],
[" "," "," "," "," "," "]]
def drawfield():
for x in range(len(currentField[0])):
for y in range(len(currentField)):
print("|" + currentField[y][x], end="")
print("|")
def mark(x, y, p):
currentField[x][y] = p # update field with player
def play():
Player = 'X' # player is X or O
while (True):
drawfield()
print(f"Players turn: {Player}")
columnSelect = int(input("Select your column: "))
if columnSelect >= 0 and columnSelect <= 6: # can also use len(currentField)
locate = 0
for i in range(5,-1,-1): # start from bottom, find first empty cell
if currentField[columnSelect][i] == " ":
locate = i
mark(columnSelect, locate, Player) # update field
break # found cell, loop is done
else: # no empty cells
print("Column is full")
Player = 'X' if Player == 'O' else 'O' # swap players
else:
print("outside board")
play()
</code></pre>
<p>播放期间的输出</p>
<pre><code>| | | | | | | |
| | | | | | | |
| | | | | | | |
| | |O|X| | | |
| | |X|O|X| | |
| | |O|X|O| |X|
Players turn: O
Select your column:
</code></pre>