Я новичок в Pygame, и я пытаюсь заставить игру рисовать новый прямоугольник при каждом щелчке мыши (без удаления предыдущих), и я просто не могу понять, как это сделать ...: \
Я однажды делал игру Ti c -ta c -папка с pygame, и у меня не было этой проблемы, и кажется, что я делал все почти одинаково ...
Так что любая помощь и / или объяснение будет высоко оценено.
import pygame, sys, random
from settings import *
from buttonClass import *
class App:
def __init__(self):
pygame.init()
self.window = pygame.display.set_mode((WIDTH, HEIGHT))
self.running = True
self.grid = testboard
self.selected = None
self.mousePos = None
self.state = "playing"
self.playingButtons = []
self.endButtons = []
self.loadButtons()
def run(self):
while self.running:
if self.state == "playing":
self.playing_events()
self.playing_update()
self.playing_draw()
pygame.quit()
sys.exit()
#### PLAYING STATE ####
def playing_events(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.running = False
if event.type == pygame.MOUSEBUTTONDOWN:
selected = self.mouseOnGrid()
if selected:
self.selected = selected
else:
print("not on board")
self.selected = None
def playing_update(self):
self.mousePos = pygame.mouse.get_pos()
def playing_draw(self):
self.window.fill(WHITE)
if self.selected:
self.drawSelection(self.window, self.selected)
#pygame.display.update()
self.drawGrid(self.window)
pygame.display.update()
#### HELPER FUNCTIONS #####
def drawSelection(self, window, pos):
pygame.draw.rect(window, RED, ((pos[0]*cellSize)+gridPos[0], (pos[1]*cellSize)+gridPos[1], cellSize, cellSize))
def drawGrid(self, window):
pygame.draw.rect(window, BLACK, (gridPos[0], gridPos[1], WIDTH-150, HEIGHT-150), 2)
for x in range(5):
pygame.draw.line(window, BLACK, (gridPos[0] + (x * cellSize), gridPos[1]), (gridPos[0] + (x * cellSize), gridPos[1] + 450))
pygame.draw.line(window, BLACK, (gridPos[0], gridPos[1]+ (x * cellSize)), (gridPos[0] + 450, gridPos[1] + (x * cellSize)))
def mouseOnGrid(self):
if self.mousePos[0] < gridPos[0] or self.mousePos[1] < gridPos[1]:
return False
if self.mousePos[0] > gridPos[0] + gridSize or self.mousePos[1] > gridPos[1] + gridSize:
return False
return ((self.mousePos[0]-gridPos[0])//cellSize, (self.mousePos[1]-gridPos[1])//cellSize)
def loadButtons(self):
pass
- вот файл settings.py, если вы хотите его протестировать.
WIDTH = 600
HEIGHT = 600
# Colors
WHITE = (255,255,255)
BLACK = (0,0,0)
RED = (255,0,0)
# boards
testboard = [
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""],
["", "", "", "", ""]
]
# posiotons and sizes
gridPos = (75,100)
cellSize = 90
gridSize = cellSize*5