I was making a game where you chop trees and that when you chopped down a tree, it would count down from 3 until chopping it. However, during the countdown process the window will all fill with white and nothing can be seen except from the text counting down at the bottom of the screen. After the countdown, everything would return back to normal. Can someone tell me why this is happening? The entire code is below:
import pygame
import time
pygame.init()
root = pygame.display.set_mode((603, 573))
pygame.display.set_caption("Foraging Simulator")
window_is_open = True
white = (255, 255, 255)
black = (0, 0, 0)
width = 10
leaves_width = 30
height = 20
leaves_height = 10
x = 0
tree_trunk_x = 10
y = 0
tree_trunk_y = 10
vel = 5
brown = (150, 75, 0)
green = (58, 95, 11)
class Tree:
def __init__(self, tree_x, tree_y, tree_property_name):
self.tree_x = tree_x
self.tree_y = tree_y
self.tree_property_name = tree_property_name
self.trunk = None
self.leaves = None
def destroy(self):
count = pygame.font.SysFont('Tahoma', 18, True, False)
countdown = count.render('3', True, (0, 0, 0))
root.blit(countdown, (583, 553))
pygame.display.update()
time.sleep(1)
pygame.draw.rect(root, (255, 255, 255), (583, 553, 20, 30))
pygame.display.update()
count = pygame.font.SysFont('Tahoma', 18, True, False)
countdown = count.render('2', True, (0, 0, 0))
root.blit(countdown, (583, 553))
pygame.display.update()
time.sleep(1)
pygame.draw.rect(root, (255, 255, 255), (583, 553, 20, 30))
pygame.display.update()
count = pygame.font.SysFont('Tahoma', 18, True, False)
countdown = count.render('1', True, (0, 0, 0))
root.blit(countdown, (583, 553))
pygame.display.update()
time.sleep(1)
pygame.draw.rect(root, (255, 255, 255), (583, 553, 20, 30))
pygame.display.update()
self.tree_property_name = False
def create_tree(self):
if self.tree_property_name:
trunk_x = self.tree_x + 10
trunk_y = self.tree_y + 10
self.trunk = pygame.draw.rect(root, brown, (trunk_x, trunk_y, width, height))
self.leaves = pygame.draw.rect(root, green, (self.tree_x, self.tree_y, leaves_width, leaves_height))
def redraw(self):
self.create_tree()
tree_one_property = True
tree_two_property = True
tree_three_property = True
tree_four_property = True
tree_five_property = True
tree_six_property = True
tree_seven_property = True
tree_eight_property = True
tree_nine_property = True
tree_ten_property = True
tree_eleven_property = True
tree_twelve_property = True
tree_thirteen_property = True
tree_fourteen_property = True
tree_fifteen_property = True
tree_sixteen_property = True
tree_seventeen_property = True
tree_eighteen_property = True
tree_nineteen_property = True
tree_twenty_property = True
tree_twenty_one_property = True
tree_twenty_two_property = True
tree_twenty_three_property = True
tree_twenty_four_property = True
tree_twenty_five_property = True
tree_one = Tree(0, 0, tree_one_property)
tree_two = Tree(50, 0, tree_two_property)
tree_three = Tree(100, 0, tree_three_property)
tree_four = Tree(150, 0, tree_four_property)
tree_five = Tree(200, 0, tree_five_property)
tree_six = Tree(0, 50, tree_six_property)
tree_eight = Tree(100, 50, tree_eight_property)
tree_seven = Tree(50, 50, tree_seven_property)
tree_nine = Tree(150, 50, tree_nine_property)
tree_ten = Tree(200, 50, tree_ten_property)
tree_eleven = Tree(0, 100, tree_eleven_property)
tree_twelve = Tree(50, 100, tree_twelve_property)
tree_thirteen = Tree(100, 100, tree_thirteen_property)
tree_fourteen = Tree(150, 100, tree_fourteen_property)
tree_fifteen = Tree(200, 100, tree_fifteen_property)
tree_sixteen = Tree(0, 150, tree_sixteen_property)
tree_seventeen = Tree(50, 150, tree_seventeen_property)
tree_eighteen = Tree(100, 150, tree_eighteen_property)
tree_nineteen = Tree(150, 150, tree_nineteen_property)
tree_twenty = Tree(200, 150, tree_twenty_property)
tree_twenty_one = Tree(0, 200, tree_twenty_one_property)
tree_twenty_two = Tree(50, 200, tree_twenty_two_property)
tree_twenty_three = Tree(100, 200, tree_twenty_three_property)
tree_twenty_four = Tree(150, 200, tree_twenty_four_property)
tree_twenty_five = Tree(200, 200, tree_twenty_five_property)
root.fill(white)
while window_is_open:
pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
window_is_open = False
if pygame.mouse.get_pressed()[0] and tree_one.trunk.collidepoint(pygame.mouse.get_pos()):
tree_one.destroy()
if pygame.mouse.get_pressed()[0] and tree_two.trunk.collidepoint(pygame.mouse.get_pos()):
tree_two.destroy()
if pygame.mouse.get_pressed()[0] and tree_three.trunk.collidepoint(pygame.mouse.get_pos()):
tree_three.destroy()
if pygame.mouse.get_pressed()[0] and tree_four.trunk.collidepoint(pygame.mouse.get_pos()):
tree_four.destroy()
if pygame.mouse.get_pressed()[0] and tree_five.trunk.collidepoint(pygame.mouse.get_pos()):
tree_five.destroy()
if pygame.mouse.get_pressed()[0] and tree_six.trunk.collidepoint(pygame.mouse.get_pos()):
tree_six.destroy()
if pygame.mouse.get_pressed()[0] and tree_seven.trunk.collidepoint(pygame.mouse.get_pos()):
tree_seven.destroy()
if pygame.mouse.get_pressed()[0] and tree_eight.trunk.collidepoint(pygame.mouse.get_pos()):
tree_eight.destroy()
if pygame.mouse.get_pressed()[0] and tree_nine.trunk.collidepoint(pygame.mouse.get_pos()):
tree_nine.destroy()
if pygame.mouse.get_pressed()[0] and tree_ten.trunk.collidepoint(pygame.mouse.get_pos()):
tree_ten.destroy()
if pygame.mouse.get_pressed()[0] and tree_eleven.trunk.collidepoint(pygame.mouse.get_pos()):
tree_eleven.destroy()
if pygame.mouse.get_pressed()[0] and tree_twelve.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twelve.destroy()
if pygame.mouse.get_pressed()[0] and tree_thirteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_thirteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_fourteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_fourteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_fifteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_fifteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_sixteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_sixteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_seventeen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_seventeen.destroy()
if pygame.mouse.get_pressed()[0] and tree_eighteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_eighteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_nineteen.trunk.collidepoint(pygame.mouse.get_pos()):
tree_nineteen.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty_one.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty_one.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty_two.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty_two.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty_three.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty_three.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty_four.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty_four.destroy()
if pygame.mouse.get_pressed()[0] and tree_twenty_five.trunk.collidepoint(pygame.mouse.get_pos()):
tree_twenty_five.destroy()
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
x += vel
if keys[pygame.K_LEFT]:
x -= vel
if keys[pygame.K_UP]:
y -= vel
if keys[pygame.K_DOWN]:
y += vel
font = pygame.font.SysFont('Tahoma', 18, True, False)
score = font.render('Score:', True, (0, 0, 0))
root.blit(score, (410, 0))
rectangle = pygame.draw.rect(root, (0, 0, 0), (x, y, width, 10))
tree_one.redraw()
tree_two.redraw()
tree_three.redraw()
tree_four.redraw()
tree_five.redraw()
tree_six.redraw()
tree_seven.redraw()
tree_eight.redraw()
tree_nine.redraw()
tree_ten.redraw()
tree_eleven.redraw()
tree_twelve.redraw()
tree_thirteen.redraw()
tree_fourteen.redraw()
tree_fifteen.redraw()
tree_sixteen.redraw()
tree_seventeen.redraw()
tree_eighteen.redraw()
tree_nineteen.redraw()
tree_twenty.redraw()
tree_twenty_one.redraw()
tree_twenty_two.redraw()
tree_twenty_three.redraw()
tree_twenty_four.redraw()
tree_twenty_five.redraw()
pygame.display.update()
root.fill(white)
pygame.quit()
It is sufficient to rest the property self.tree_property_name
when the tree is destroyed:
class Tree:
def __init__(self, tree_x, tree_y):
self.tree_x = tree_x
self.tree_y = tree_y
self.tree_property_name = True
self.trunk = None
self.leaves = None
# [...]
def destroy(self):
self.tree_property_name = False
Create a list of trees rather than separate variables:
trees = []
for x in range(4):
for y in range (4):
trees.append(Tree(x*50, y*50))
Draw the trees in alist:
while window_is_open:
# [...]
for tree in trees:
tree.redraw()
Evaluate if on a tree is clicked in a loop and and start a count_down
in seconds:
count_down = 0
destroy_tree = None
while window_is_open:
delta_time = pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
window_is_open = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if destroy_tree == None and event.button == 1:
for tree in trees:
if tree.tree_property_name:
if tree.trunk.collidepoint(event.pos) or tree.leaves.collidepoint(event.pos):
count_down = 3
destroy_tree = tree
Destroy the key when the the count has expired:
while window_is_open:
# [...]
number = 0
if destroy_tree != None:
count_down -= delta_time / 1000
if count_down > 0:
number = int(count_down) +1
else:
destroy_tree.destroy()
destroy_tree = None
See the example:
import pygame
import time
pygame.init()
root = pygame.display.set_mode((603, 573))
pygame.display.set_caption("Foraging Simulator")
window_is_open = True
white = (255, 255, 255)
black = (0, 0, 0)
width = 10
leaves_width = 30
height = 20
leaves_height = 10
x = 0
tree_trunk_x = 10
y = 0
tree_trunk_y = 10
vel = 5
brown = (150, 75, 0)
green = (58, 95, 11)
class Tree:
def __init__(self, tree_x, tree_y):
self.tree_x = tree_x
self.tree_y = tree_y
self.tree_property_name = True
self.trunk = None
self.leaves = None
def create_tree(self):
if self.tree_property_name:
trunk_x = self.tree_x + 10
trunk_y = self.tree_y + 10
self.trunk = pygame.draw.rect(root, brown, (trunk_x, trunk_y, width, height))
self.leaves = pygame.draw.rect(root, green, (self.tree_x, self.tree_y, leaves_width, leaves_height))
def destroy(self):
self.tree_property_name = False
def redraw(self):
self.create_tree()
trees = []
for x in range(4):
for y in range (4):
trees.append(Tree(x*50, y*50))
count_down = 0
destroy_tree = None
while window_is_open:
delta_time = pygame.time.delay(100)
for event in pygame.event.get():
if event.type == pygame.QUIT:
window_is_open = False
elif event.type == pygame.MOUSEBUTTONDOWN:
if destroy_tree == None and event.button == 1:
for tree in trees:
if tree.tree_property_name:
if tree.trunk.collidepoint(event.pos) or tree.leaves.collidepoint(event.pos):
count_down = 3
destroy_tree = tree
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
x += vel
if keys[pygame.K_LEFT]:
x -= vel
if keys[pygame.K_UP]:
y -= vel
if keys[pygame.K_DOWN]:
y += vel
number = 0
if destroy_tree != None:
count_down -= delta_time / 1000
if count_down > 0:
number = int(count_down) + 1
else:
destroy_tree.destroy()
destroy_tree = None
font = pygame.font.SysFont('Tahoma', 18, True, False)
score = font.render('Score:', True, (0, 0, 0))
countdown = font.render(str(number), True, (0, 0, 0))
root.fill(white)
root.blit(score, (410, 0))
root.blit(countdown, (583, 553))
for tree in trees:
tree.redraw()
pygame.display.update()
pygame.quit()