在Python编程的旅途中,通过实现有趣的游戏项目,我们不仅能巩固基础知识,还能提升编程思维和问题解决能力。本章节,我们将一起动手编写一个简单的四子棋(Connect Four)游戏。四子棋是一款经典的两人对战游戏,玩家轮流在7x6的棋盘上放置棋子(通常是红蓝两色),目标是让自己的棋子在水平、垂直、对角线上连成一线(四个棋子连续)。接下来,我们将分步骤实现这个游戏。
首先,我们需要明确游戏的基本结构和流程:
None
或空格' '
表示)。我们可以使用Python的列表(list)来创建和表示棋盘。
def initialize_board():
return [[' ' for _ in range(7)] for _ in range(6)]
def print_board(board):
for row in board:
print(" ".join(row))
玩家通过输入列号来选择下棋位置,系统需要验证该列是否已满,并自动找到该列最底部的空位。
def place_piece(board, column, player):
for i in range(5, -1, -1): # 从下往上遍历
if board[i][column] == ' ':
board[i][column] = player
return True
return False # 列已满
def get_player_move(player):
while True:
try:
column = int(input(f"{player}的回合,请输入列号(1-7): "))
if 1 <= column <= 7:
return column
else:
print("列号输入错误,请重新输入!")
except ValueError:
print("请输入有效的数字!")
检查胜负是游戏的核心逻辑之一,需要分别检查水平、垂直、两个对角线方向是否连续出现四个相同的棋子。
def check_win(board, player):
directions = [
# 水平方向
[(0, 1), (0, 2), (0, 3)],
# 垂直方向
[(1, 0), (2, 0), (3, 0)],
# 主对角线
[(1, 1), (2, 2), (3, 3)],
# 副对角线
[(1, -1), (2, -2), (3, -3)]
]
for row in range(6):
for col in range(7):
if board[row][col] == player:
for dx, dy in directions:
try:
if all(board[row + i*dy][col + i*dx] == player for i in range(1, 4)):
return True
except IndexError:
continue
return False
注意:这里的directions
仅示例了四个方向,实际实现时需要完整覆盖所有可能的连线情况,包括所有水平、垂直及两个对角线方向。
将上述功能整合到游戏的主循环中,处理玩家交替下棋、胜负检查和游戏结束逻辑。
def play_game():
board = initialize_board()
players = ['X', 'O']
current_player = players[0]
while True:
print_board(board)
column = get_player_move(current_player)
if place_piece(board, column - 1, current_player): # 注意列号减1,因为用户习惯从1开始计数
if check_win(board, current_player):
print_board(board)
print(f"{current_player} 获胜!")
break
current_player = players[1 - players.index(current_player)] # 切换玩家
else:
print("该列已满,请重新输入!")
if all(all(cell != ' ' for cell in row) for row in board):
print_board(board)
print("平局!")
break
play_game()
以上代码实现了四子棋游戏的基本功能,但仍有许多可以改进和扩展的地方,比如:
通过实现这个项目,我们不仅学会了如何在Python中处理二维数组、控制流和函数定义,还锻炼了问题分解和代码组织的能力。希望这个四子棋项目能成为你Python编程进阶之路上的一块坚实基石。