在本章中,我们将深入探讨并实现一个简单的四子棋(Connect Four)游戏的源代码。四子棋是一种两人对战的棋盘游戏,玩家交替在垂直的格子中放入棋子,目标是让自己的棋子在水平、垂直或对角线方向上连续排列四个,从而获胜。以下是一个基于Python实现的四子棋游戏完整源代码,包含了游戏逻辑、用户交互以及基本的胜负判断。
首先,我们需要设置游戏的基本参数,如棋盘大小、玩家标记等,并初始化棋盘。
def initialize_board(size=7, width=6):
""" 初始化棋盘,返回一个二维列表,默认为7行6列 """
return [[0] * width for _ in range(size)]
def print_board(board):
""" 打印棋盘 """
for row in board:
print(' '.join(str(cell) for cell in row))
print(" 1 2 3 4 5 6")
def check_win(board, player, row, col):
""" 检查是否有玩家获胜 """
directions = [
(0, 1), (1, 0), (1, 1), (1, -1) # 右,下,右下,右上
]
for dx, dy in directions:
count = 1
x, y = row + dx, col + dy
while 0 <= x < len(board) and 0 <= y < len(board[0]) and board[x][y] == player:
count += 1
x, y = x + dx, y + dy
x, y = row - dx, col - dy
while 0 <= x < len(board) and 0 <= y < len(board[0]) and board[x][y] == player:
count += 1
x, y = x - dx, y - dy
if count >= 4:
return True
return False
def is_valid_move(board, row, col):
""" 检查落子位置是否有效 """
return 0 <= row < len(board) and 0 <= col < len(board[0]) and board[row][col] == 0
def make_move(board, row, col, player):
""" 在棋盘上放置棋子 """
if is_valid_move(board, row, col):
board[row][col] = player
#### 2. 游戏主循环
接下来,我们定义游戏的主循环,包括玩家交替落子、检查胜负、以及游戏结束条件。
```python
def main():
board = initialize_board()
players = ['X', 'O']
current_player = 0
while True:
print_board(board)
print(f"Player {players[current_player]}'s turn:")
try:
row = int(input("Enter row number (0-6): "))
col = int(input("Enter column number (1-6): ")) - 1 # 输入转换为0-based index
if not is_valid_move(board, row, col):
print("Invalid move, try again.")
continue
make_move(board, row, col, players[current_player])
if check_win(board, players[current_player], row, col):
print_board(board)
print(f"Player {players[current_player]} wins!")
break
current_player = 1 - current_player # Switch players
except ValueError:
print("Invalid input, please enter numbers.")
if all(cell != 0 for row in board for cell in row):
print_board(board)
print("It's a draw!")
break
if __name__ == "__main__":
main()
initialize_board
函数创建了一个二维列表作为棋盘,其中0
表示空位。print_board
函数遍历棋盘并打印,便于玩家观察游戏进展。check_win
函数检查在给定位置放置棋子后,是否形成连续四个同色棋子。它遍历四个方向(右、下、右下、右上),并计算连续相同棋子的数量。is_valid_move
函数确保玩家选择的落子位置在棋盘范围内且为空。make_move
函数在有效位置放置棋子。main
函数控制游戏流程,包括玩家交替落子、胜负检查、以及游戏结束条件处理。通过上述步骤,我们实现了一个基本的四子棋游戏。这个游戏不仅考验玩家的策略思维,还为他们提供了一个休闲娱乐的好去处。希望读者能够在此基础上进一步探索和实践,创造出更多有趣的功能和玩法。