首页 > 编程问答 >为什么点击鼠标后屏幕上没有出现 X?

为什么点击鼠标后屏幕上没有出现 X?

时间:2024-08-09 13:11:34浏览次数:9  
标签:python pygame tic-tac-toe

我想实现程序在按下鼠标的位置将“X”传送到屏幕上的功能。然而,一旦我运行该程序,什么也没有出现。 take_turn 函数将值存储在二维数组中,并将鼠标单击的位置存储在名为“positions”的列表中。然后,在主游戏循环中,应将 X 放置在通过位置列表迭代的所有位置中。我应该如何修改我的代码?

import pygame
import sys

pygame.init()

HEIGHT = 800
WIDTH = 600
BOARD_COLOR = (50, 50, 50)
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game")
ROWS = 3
SIZE = 200
count = 0
board = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
positions = []

font = pygame.font.Font('Poppins-ExtraBold.ttf', 150)
text = font.render('X', True, (255, 255, 255))


def draw_board(screen):
    pygame.draw.line(screen, (255, 255, 255), (0, SIZE), (WIDTH, SIZE), width=5)

    for i in range(0, ROWS-1):
        pygame.draw.line(screen, (255, 255, 255), ((i+1)*SIZE, SIZE), ((i+1)*SIZE, HEIGHT))
        pygame.draw.line(screen, (255, 255, 255), (0, ((i+1) * SIZE) + SIZE), (WIDTH, ((i+1) * SIZE) + SIZE))


def take_turn(position):
    global count
    global positions

    if position[1] > SIZE:
        if count % 2 == 0:
            board[int((position[1] - SIZE) / SIZE)][int((position[0]) / SIZE)] = 1
            for i in range(len(board)):
                print(board[i])
            positions.append((position[0], position[1]))
            count += 1
        else:
            board[int((position[1] - SIZE) / SIZE)][int((position[0]) / SIZE)] = 2
            for i in range(len(board)):
                print(board[i])
            count += 1


running = True
while running:

    mouse = pygame.mouse.get_pos()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            take_turn(mouse)

    WIN.fill(BOARD_COLOR)
    draw_board(WIN)
    for pos in positions:
        text.blit(text, pos)
    pygame.display.update()

我尝试将填充函数放在游戏循环的不同位置,但没有任何变化。


代码中导致没有“X”出现在屏幕上的问题是 text.blit(text, pos) 行中的一个小错误。 blit() 函数的第一个参数应该是要绘制的表面,而第二个参数是位置。在这个例子中,你传递了 text 两次,这是不正确的。

以下是修复后的代码:

import pygame
import sys

# ... (其余的代码与之前相同)

running = True
while running:

    mouse = pygame.mouse.get_pos()

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            take_turn(mouse)

    WIN.fill(BOARD_COLOR)
    draw_board(WIN)
    for pos in positions:
        # 修改这里:将第一个参数改为 WIN
        WIN.blit(text, pos) 
    pygame.display.update()

解释:

  • WIN.blit(text, pos) : 这行代码现在将 text 表面(也就是“X”)绘制到 WIN 表面(也就是你的游戏窗口)上,位置由 pos 指定。

通过这个修改,现在每次点击鼠标时,都应该会在对应位置看到一个“X”了。

标签:python,pygame,tic-tac-toe
From: 78850620

相关文章

  • Python酷库之旅-第三方库Pandas(074)
    目录一、用法精讲301、pandas.Series.dt.components属性301-1、语法301-2、参数301-3、功能301-4、返回值301-5、说明301-6、用法301-6-1、数据准备301-6-2、代码示例301-6-3、结果输出302、pandas.Series.dt.to_pytimedelta方法302-1、语法302-2、参数302-3、......
  • python-docx 将文档根据标题二拆分为多个docx文件
    python-docx将文档根据标题二拆分为多个docx文件时隔好久,又开始搞文档了感觉搞来搞去还不如手动复制粘贴得了……只是文本内容–>简单文本内容自定义样式保持不变(有点难度)提取文档中的图片、表格(简单)按照顺序还原图片、表格到文档中,并且不改变样式(累了,毁灭吧)题注、......
  • 【Python版本】气象局天气数据采集
    分析寻找数据url经过详细的分析,发现网络请求中有一个get请求是返回全国天气最新数据。接口是这个:https://weather.cma.cn/api/map/weather/1?t=1723174351500查看请求的类型从请求头信息中发现:连接+请求方式是get查看数据从这里我们可以看到返回数据的时间于更新时......
  • open3d python 法线估计
    测试效果废话Open3D中的法线估计是一个重要的功能,它可以帮助用户了解三维点云中每个点的局部表面方向。以下是对Open3D法线估计的详细解释:一、法线估计的基本原理法线估计通常基于局部表面拟合的方法。在点云数据中,每个点的局部邻域可以视为一个平面或曲面的近似。通......
  • jenkins的shell command中如何让python 实时显示执行日志
    在使用Jenkins的shellcommand里面执行python脚本时,我们希望在构建shell脚本时可以实时输出日志,但是在构建python脚本时,是等到python执行完成以后,才显示结果,这个对于我们判断脚本执行状态非常不友好。而之所以会出现这种情况,是因为python默认是有缓存的,所以我们需要禁用输入......
  • onnx转engine工具(包含量化) python脚本
    量化工具在网上搜索五花八门,很多文章没有说明使用的版本导致无法复现,这里参考了一些写法实现量化,并转为engine。具体实现代码见下方,欢迎各位小伙伴批评指正。tensorrt安装参考windows11下安装TensorRT,并在conda虚拟环境下使用_tensorrt免费吗-CSDN博客pycuda安装参考GPU......
  • 20:Python函数
    #Python3函数#函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。#函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。#但你也可以自己创建函数,这被叫做用户自定义函数。#定义一个函数#你可以定义一个由自己想要功能......
  • 使用python做页面,测试数据库连通性!免费分享!测试通过~
    免费分享刚刚写的一个小程序,测试通过没问题,解BUG也就花了半小时吧有更好的方法欢迎评论区推给我谢谢。importtkinterastkfromtkinterimportmessageboximportpymysqldefget_db_info(db_source):ifdb_source=='database1':hostname=e1.get()......
  • Python面试宝典第30题:找出第K大元素
    题目        给定一个整数数组nums,请找出数组中第K大的数,保证答案存在。其中,1<=K<=nums数组长度。        示例1:输入:nums=[3,2,1,5,6,4],K=2输出:5        示例2:输入:nums=[50,23,66,18,72],K=3输出:50快速选择算法......
  • 使用Python和Flask框架实现简单的RESTful API
    目录环境准备创建Flask应用运行Flask应用测试API注意事项在当今的Web开发领域,RESTfulAPI因其简洁性和高效性而备受欢迎。本文将引导你使用Python的Flask框架来创建一个简单的RESTfulAPI,用于增删改查(CRUD)用户信息。环境准备在开始之前,请确保你的Python环境中已经安......