写入·markdownimport pygameimport sysimport random初始化游戏界面WIDTH = 640HEIGHT = 480LINE_WIDTH = 2FPS = 30BOARD_SIZE = 15PLAYER = 1COMPUTER = 2EMPTY = 0WHITE = 255 255 255BLACK = 0 0 0BLUE = 0 0 255GREEN = 0
import pygame
import sys
import random
# 初始化游戏界面
WIDTH = 640
HEIGHT = 480
LINE_WIDTH = 2
FPS = 30
BOARD_SIZE = 15
PLAYER = 1
COMPUTER = 2
EMPTY = 0
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Five Chess")
clock = pygame.time.Clock()
# 初始化棋盘上的所有位置为空
def init_board():
board = []
for row in range(BOARD_SIZE):
board.append([EMPTY] * BOARD_SIZE)
return board
# 绘制棋盘
def draw_board():
screen.fill(WHITE)
for i in range(BOARD_SIZE + 1):
pygame.draw.line(screen, BLACK, (50, 50 + i * 30), (450, 50 + i * 30), LINE_WIDTH)
pygame.draw.line(screen, BLACK, (50 + i * 30, 50), (50 + i * 30, 450), LINE_WIDTH)
# 绘制棋子
def draw_chess(row, col, player):
if player == PLAYER:
pygame.draw.circle(screen, WHITE, (50 + col * 30, 50 + row * 30), 13)
else:
pygame.draw.circle(screen, BLUE, (50 + col * 30, 50 + row * 30), 13)
# 在指定的位置落子
def put_chess(board, row, col, player):
if board[row][col] == EMPTY:
board[row][col] = player
return True
return False
# 检查五子棋是否连成一线
def check_win(board, row, col, player):
# 检查横向是否连成五子
for c in range(col - 4, col + 1):
if c < 0 or c + 4 >= BOARD_SIZE:
continue
if (board[row][c] == player and board[row][c + 1] == player and
board[row][c + 2] == player and board[row][c + 3] == player and
board[row][c + 4] == player):
return True
# 检查竖向是否连成五子
for r in range(row - 4, row + 1):
if r < 0 or r + 4 >= BOARD_SIZE:
continue
if (board[r][col] == player and board[r + 1][col] == player and
board[r + 2][col] == player and board[r + 3][col] == player and
board[r + 4][col] == player):
return True
# 检查从左上到右下是否连成五子
for t in range(-4, 1):
if row + t < 0 or row + t + 4 >= BOARD_SIZE or col + t < 0 or col + t + 4 >= BOARD_SIZE:
continue
if (board[row + t][col + t] == player and board[row + t + 1][col + t + 1] == player and
board[row + t + 2][col + t + 2] == player and board[row + t + 3][col + t + 3] == player and
board[row + t + 4][col + t + 4] == player):
return True
# 检查从左下到右上是否连成五子
for t in range(-4, 1):
if row - t >= BOARD_SIZE or row - t - 4 < 0 or col + t < 0 or col + t + 4 >= BOARD_SIZE:
continue
if (board[row - t][col + t] == player and board[row - t - 1][col + t + 1] == player and
board[row - t - 2][col + t + 2] == player and board[row - t - 3][col + t + 3] == player and
board[row - t - 4][col + t + 4] == player):
return True
return False
# 检查游戏是否结束
def check_game_over(board):
for row in range(BOARD_SIZE):
for col in range(BOARD_SIZE):
if board[row][col] == EMPTY:
return False
return True
# 电脑AI:随机选择一个位置落子
def computer_ai(board):
while True:
row = random.randint(0, BOARD_SIZE - 1)
col = random.randint(0, BOARD_SIZE - 1)
if board[row][col] == EMPTY:
return row, col
# 主游戏循环
def game_loop():
game_over = False
player_turn = True
chess_board = init_board()
while not game_over:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN and player_turn:
x, y = event.pos
# 计算点击的位置在棋盘上的行列
row = (y - 50) // 30
col = (x - 50) // 30
if put_chess(chess_board, row, col, PLAYER):
draw_chess(row, col, PLAYER)
player_turn = False
if check_win(chess_board, row, col, PLAYER):
show_message("You Win!")
game_over = True
if check_game_over(chess_board):
show_message("Game Over!")
game_over = True
if not player_turn:
row, col = computer_ai(chess_board)
if put_chess(chess_board, row, col, COMPUTER):
draw_chess(row, col, COMPUTER)
player_turn = True
if check_win(chess_board, row, col, COMPUTER):
show_message("Computer Wins!")
game_over = True
if check_game_over(chess_board):
show_message("Game Over!")
game_over = True
pygame.display.flip()
clock.tick(FPS)
# 显示游戏信息
def show_message(message):
pygame.draw.rect(screen, GREEN, (160, 200, 320, 100))
font = pygame.font.Font(None, 36)
text = font.render(message, True, BLACK)
screen.blit(text, (200, 240))
pygame.display.flip()
pygame.time.wait(2000)
# 启动游戏
game_loop()
``
原文地址: http://www.cveoy.top/t/topic/iq0B 著作权归作者所有。请勿转载和采集!