#python-3.x #pygame
#python-3.x #pygame
Вопрос:
У меня есть задача, в которой у меня есть квадрат 3X3, и для каждого щелчка в маленьком квадрате этот квадрат будет окрашиваться в красный цвет. Вот пока мой код. Я думаю, что я сделал что-то не так в своем первом цикле while, но я не уверен. Пожалуйста, помогите мне.
import pygame
pygame.init()
#create a screen
screen = pygame.display.set_mode((400, 400))
#colors
white = [255, 255, 255]
red = [255, 0, 0]
x = 0
y = 0
#create my square
for j in range(3):
for i in range(3):
pygame.draw.rect(screen, white, (x, y, 30, 30), 1)
x = 30
if x == 90:
x = 0
y = 30
pygame.display.flip()
running = 1
while running:
event = pygame.event.poll()
#found in what position my mouse is
if event.type == pygame.QUIT:
running = 0
elif event.type == pygame.MOUSEMOTION:
print("mouse at (%d, %d)" % event.pos)
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
#mouse click
if click[0] == 1 and x in range(30) and y in range (30):
pygame.draw.rect(screen, red, (30, 30 , 29 ,29))
while pygame.event.wait().type != pygame.QUIT:
pygame.display.change()
Ответ №1:
Вы должны update
просматривать экран каждый раз, когда рисуете или делаете что-то на экране. Итак, поместите эту строку в свой первый цикл while.
pygame.display.flip()
В вашем состоянии вы проверяли x и y, которые не являются позицией мыши.
if click[0] == 1 and x in range(30) and y in range (30):
Проверьте свое положение мыши в, range(90)
потому что у вас есть три прямоугольных и они 30x30
.
if click[0] == 1 and mouse[0] in range(90) and mouse[1] in range (90):
Затем установите прямоугольное начальное положение, чтобы заполнить точку мыши.
rect_x = 30*(mouse[0]//30) # set start x position of rectangular
rect_y = 30*(mouse[1]//30) # set start y position of rectangular
Вы можете отредактировать свой код с помощью этого.
while running:
pygame.display.flip()
event = pygame.event.poll()
#found in what position my mouse is
if event.type == pygame.QUIT:
running = 0
elif event.type == pygame.MOUSEMOTION:
print("mouse at (%d, %d)" % event.pos)
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
#mouse click
if click[0] == 1 and mouse[0] in range(90) and mouse[1] in range (90):
'''
rect_x = 30*(0//30) = 0
rect_y = 30*(70//30) = 60
'''
rect_x = 30*(mouse[0]//30) # set start x position of rectangular
rect_y = 30*(mouse[1]//30) # set start y position of rectangular
pygame.draw.rect(screen, red, (rect_x, rect_y , 30 , 30)) # rectangular (height, width), (30, 30)