手撕三子棋
手撕三子棋
好的,让我们来手撕一下三子棋游戏吧。
首先,我们需要定义一个棋盘。为了简化问题,我们可以用一个3x3的矩阵表示棋盘,其中0表示空位,1表示玩家1放置的棋子,2表示玩家2放置的棋子。棋盘初始化如下:
```
board = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
```
接下来,我们需要实现玩家轮流下棋的逻辑。我们可以定义一个函数 `make_move(player, row, col)` ,其中 `player` 表示当前下棋的玩家,取值为 1 或 2, `row` 和 `col` 分别表示要下棋的位置的行和列。
在函数中,我们需要检查选择的位置是否为空,如果是,则将其设为当前玩家的棋子。如果不为空,则提示玩家重新选择位置。并返回 True 表示下棋成功,返回 False 表示下棋失败。下面是代码实现:
```
def make_move(player, row, col):
if board[row][col] == 0:
board[row][col] = player
return True
else:
print("该位置已有棋子,请重新选择!")
return False
```
接下来,我们需要判断游戏是否结束。游戏结束的条件有三种:一方获胜、平局、或者游戏被强制停止。我们可以先定义一个函数 `check_win()` ,用于判断当前是否有一方获胜。如果有获胜方,则返回该方玩家的编号;如果没有,则返回0表示游戏未结束。
判断获胜的方法比较简单,我们只需要检查每一行、每一列和两条对角线是否有三个连续的棋子,如果有,则表示该玩家获胜。下面是代码实现:
```
def check_win():
# 检查每一行
for i in range(3):
if board[i][0] == board[i][1] == board[i][2] != 0:
return board[i][0]
# 检查每一列
for j in range(3):
if board[0][j] == board[1][j] == board[2][j] != 0:
return board[0][j]
# 检查对角线
if board[0][0] == board[1][1] == board[2][2] != 0:
return board[0][0]
if board[0][2] == board[1][1] == board[2][0] != 0:
return board[0][2]
# 游戏未结束
return 0
```
最后,我们可以写一个主函数,来循环执行玩家的下棋和判断是否获胜的过程。在每次循环中,我们要依次询问两个玩家的选择,直到游戏结束或者被强制停止。游戏结束后,我们输出获胜方或者平局的结果。
下面是完整的代码实现:
```
board = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
]
def make_move(player, row, col):
if board[row][col] == 0:
board[row][col] = player
return True
else:
print("该位置已有棋子,请重新选择!")
return False
def check_win():
# 检查每一行
for i in range(3):
if board[i][0] == board[i][1] == board[i][2] != 0:
return board[i][0]
# 检查每一列
for j in range(3):
if board[0][j] == board[1][j] == board[2][j] != 0:
return board[0][j]
# 检查对角线
if board[0][0] == board[1][1] == board[2][2] != 0:
return board[0][0]
if board[0][2] == board[1][1] == board[2][0] != 0:
return board[0][2]
# 游戏未结束
return 0
def print_board():
for i in range(3):
for j in range(3):
if board[i][j] == 0:
print("-", end=" ")
elif board[i][j] == 1:
print("O", end=" ")
else:
print("X", end=" ")
print()
def main():
player = 1
flag = 0
while flag == 0:
print_board()
row = int(input("玩家{},请选择要下棋的行:".format(player)))
col = int(input("玩家{},请选择要下棋的列:".format(player)))
# 检查是否下棋成功
if make_move(player, row, col):
# 检查游戏是否结束
winner = check_win()
if winner != 0:
flag = 1
print("恭喜玩家{}获胜!".format(winner))
elif sum([board[i].count(0) for i in range(3)]) == 0:
flag = 1
print("平局!")
# 切换玩家
player = 1 if player == 2 else 2
if __name__ == '__main__':
main()
```
希望这个示例能够帮助你更好地了解三子棋游戏的实现过程。