pygame实现井字棋——1.绘制九宫格

本文介绍了如何使用pygame模块创建一个井字棋游戏,包括显示界面和划分九宫格的实现。作者提到游戏规则简单,人机对战采用随机模式。在九宫格部分,通过rect对象来表示每个格子,并讨论了如何处理颜色和边界。最后,预告了将在后续文章中实现游戏逻辑。
摘要由CSDN通过智能技术生成

前言

这次,自己尝试使用pygame模块实现一个九宫格游戏。
目标:形成一个界面,将界面分割成9个,然后对于没有被占领的方框,我们可以用鼠标点击进行占领。
游戏规则就不用说了,至于套路,自己百度一下吧。
这里的人机采用随机数模式,因为实在是没什么套路。

显示界面

import pygame
import sys
# 初始化模块,加一下稳一些
pygame.init()
# 创建屏幕对象
screen = pygame.display.set_mode((width,height))
# 界面背景颜色渲染,放在while中会不断覆盖格子
screen.fill((255,255,255))
# 界面的标题
pygame.display.set_caption('井字棋')

# 刷新界面函数
def update():
    pass

# 游戏状态,0表示未分胜负,-1表示个人胜利,1表示电脑获胜
judge = 0

while not judge:
    update()
    # 感应事件
    for event in pygame.event.get():
    	# 点击关闭窗口,退出游戏
    	if event.type == pygame.QUIT:
            sys.exit()
    # 将渲染的界面显示
    pygame.display.flip()

另外,注意一下如果我们没有使用exit,那么游戏界面可能会卡死,然后显示未响应。

九宫格

这里我的想法是将界面分成9个格子,每一个格子对应一个rect对象。

# width、height已经给出
# 长/宽的三分之一,为一个格子的长宽
single = width
好的,我理解了你的要求,我可以给你分享一下使用 Pygame 实现井字棋的代码。 ``` import pygame pygame.init() # 设置游戏窗口 WINDOW_SIZE = (300, 300) screen = pygame.display.set_mode(WINDOW_SIZE) pygame.display.set_caption("Tic Tac Toe") # 定义颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) # 定义游戏状态 game_over = False winner = None # 创建游戏区域 board = [[None] * 3, [None] * 3, [None] * 3] # 设置字体 font = pygame.font.SysFont(None, 30) # 绘制游戏区域 def draw_board(): for row in range(3): for col in range(3): pygame.draw.rect(screen, WHITE, [(col * 100) + 10, (row * 100) + 10, 80, 80]) if board[row][col] == "X": text = font.render("X", True, BLACK) screen.blit(text, ((col * 100) + 35, (row * 100) + 35)) elif board[row][col] == "O": text = font.render("O", True, BLACK) screen.blit(text, ((col * 100) + 35, (row * 100) + 35)) # 检查游戏是否结束 def check_game_over(): global game_over, winner # 检查行 for row in range(3): if board[row][0] == board[row][1] == board[row][2] and board[row][0] is not None: winner = board[row][0] game_over = True # 检查列 for col in range(3): if board[0][col] == board[1][col] == board[2][col] and board[0][col] is not None: winner = board[0][col] game_over = True # 检查对角线 if board[0][0] == board[1][1] == board[2][2] and board[0][0] is not None: winner = board[0][0] game_over = True if board[0][2] == board[1][1] == board[2][0] and board[0][2] is not None: winner = board[0][2] game_over = True # 检查是否平局 if all([all(row) for row in board]) and winner is None: game_over = True # 主循环 while not game_over: for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if winner is None: if event.type == pygame.MOUSEBUTTONDOWN: # 获取鼠标点击位置 xpos, ypos = pygame.mouse.get_pos() row = ypos // 100 col = xpos // 100 # 检查是否为合法位置 if board[row][col] is None: # 设置该位置为当前玩家的符号 board[row][col] = "X" # 切换到另一个玩家 if winner is None: draw_board() check_game_over() pygame.display.update() pygame.time.wait(500) if winner is None: open_spots = [(r, c) for r in range(3) for c in range(3) if board[r][c] is None] if len(open_spots) > 0: row, col = open_spots[0] board[row][col] = "O" draw_board() pygame.display.update() # 显示胜者 if winner == "X": text = font.render("You win!", True, RED) elif winner == "O": text = font.render("Computer wins!", True, RED) else: text = font.render("Tie game!", True, RED) screen.blit(text, (80, 140)) pygame.display.update() # 等待用户关闭窗口 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() ``` 希望这个代码对你有帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值