圆圈没有在正确的位置绘制pygame

Posted

技术标签:

【中文标题】圆圈没有在正确的位置绘制pygame【英文标题】:Circle not being drawn at the correct position pygame 【发布时间】:2021-12-16 23:40:55 【问题描述】:

我的井字游戏项目再次出现问题,当我单击一个正方形时,圆圈没有出现在应有的位置,我尝试了多个不同的坐标但仍然无法弄清楚,所以如果你们中的任何人知道该怎么做,请告诉我知道,谢谢。

import pygame, sys
import numpy as np
pygame.init()

screen_color = (28, 170, 156)
line_color = (23, 140, 135)
line_width = 9

screen = pygame.display.set_mode((550, 450))
pygame.display.set_caption("Tic Tac Toe")
screen.fill(screen_color)
board = np.zeros((3, 3))


def draw_lines():
    #1st horizontal
    pygame.draw.line(screen, line_color, (0, 135), (550, 135), line_width)
    #2nd horizontal
    pygame.draw.line(screen, line_color, (0, 300), (550, 300), line_width)
    #1st vertical
    pygame.draw.line(screen, line_color, (175, 0), (175, 450), line_width)
    #2nd vertical
    pygame.draw.line(screen, line_color, (370, 0), (370, 450), line_width)

def draw_figures():
    for row in range(3):
        for col in range(3):
            if board[row][col] == 1:
                pygame.draw.circle(screen, 'cyan', (int(col * 550/3), int(row * 450/3)), 60, 10)
            

def mark_square(row, col, player):
    board[row][col] = player

def available_square(row, col):
    if board[row][col] == 0:
        return True

    else:
        return False

def is_board_full():
    for row in range(3):
        for col in range(3):
            if board[row][col] == 0:
                return False

print(is_board_full())
print(board)
draw_lines()

player = 1

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.MOUSEBUTTONDOWN:
            mouseX = event.pos[0] #X coordinate
            mouseY = event.pos[1] #Y coordinate

            clicked_row = int(mouseY * 3 // 450)
            clicked_col = int(mouseX * 3 // 550)

            #print(clicked_col)
            #print(clicked_row)

            if available_square(clicked_row, clicked_col):
                if player == 1:
                    mark_square(clicked_row, clicked_col, 1)
                    player = 2
                
                elif player == 2:
                    mark_square(clicked_row, clicked_col, 2)
                    player = 1

                draw_figures()
                print(board)

    pygame.display.update()

(如果还有其他错误也请告诉我) 如果获取坐标是反复试验或有特定的方法,请告诉我,谢谢!

【问题讨论】:

【参考方案1】:

pygame.draw.circle 的第三个参数是圆的中心。在 (col + 0.5) 和 (row + 0.5) 处画圆:

pygame.draw.circle(screen, 'cyan', (int(col * 550/3), int(row * 450/3)), 60, 10)

pygame.draw.circle(screen, 'cyan', (int((col + 0.5) * 550/3), int((row+0.5) * 450/3)), 60, 10)

【讨论】:

你能帮我做十字架吗,这个坐标很混乱@Rabbid76 @DogeCoder 使用pygame.Rect 对象。 1.rect = pygame.Rect(0, 0, 120, 120) 2.rect.center = (int((col + 0.5) * 550/3), int((row+0.5) * 450/3)).现在你可以画一条从rect.topleftrect.bottomright的线和一条从rect.bottomleftrect.toprihgt的线。 我添加了矩形,但是当我单击正方形时,它不显示行@Rabbid76 我按照你所说的做 rect 但它不起作用,我输入了确切的代码 感谢它有效!【参考方案2】:

问题是圆圈以网格为中心,位于正方形的中间。 您需要像这样向中心添加偏移量:

pygame.draw.circle(screen, 'cyan', (int(col * 550/3 + x_offset), int(row * 450/3 + y_offset)), 60, 10)

我还建议您创建一个名为 grid_width 的变量,这样您就不需要在程序中到处都有 550 或 450 这样的数字。

【讨论】:

好的,谢谢下次我会添加一个grid_width变量和一个grid_height

以上是关于圆圈没有在正确的位置绘制pygame的主要内容,如果未能解决你的问题,请参考以下文章

在已经创建的正方形上绘制一个圆圈 - pygame

画布圆圈未正确绘制[重复]

画布圆圈绘制不一致

使用 UIBezierPath 绘制 100 多个不同位置的圆圈

如何聚焦光线或如何仅在 pygame 中绘制窗口的某些圆形部分?

如何在Android中绘制一个圆圈并移动它/拖动它