I'm very new to python. I am working on a simple game. So far, what I am trying to do is to add a few second delay between it showing the question rectangle and then showing the options. How would I do this? I tried using time.sleep or pygame.time.wait, but all of those showed a black screen, and then showed both the question and the options at the same time. By the way I am using pygame :). Here is my code:
try:
    logname = 'c:/temp/pgzrun.log'
    fontname = 'arial.ttf'   
    import faulthandler
    import math
    faulthandler.enable()
    import time
    import os, sys, importlib
    from time import sleep 
   
    script_dir = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    os.chdir(script_dir)
    
    import pgzrun
    import playsound
    import pygame 
    
    import random 
    from random import randint
    WIDTH = 1280
    HEIGHT = 720
    sys.setrecursionlimit(10000000)
    q1 = ["SIFS", "ba", "bo", "bi", "blo", 1]
    q2 = ["AFST", "la", "lo", "li", "lloo", 3]
    q3 = ["jaks", "fa", "fo", "fi", "asdlo", 2]
    q4 = ["afsa", "afsfga", "dfsdff", "dfdf", "safaawr", 2]
    questions = [q1, q2, q3, q4]
    question_box = Rect(500, 400, 140, 100)
  
    def draw():
        
        index = 0
        screen.fill("purple")
        screen.draw.filled_rect(question_box, "blue")
        screen.draw.textbox(str(questions[index][0]), question_box)
        screen.draw.filled_rect(answer_boxes[0], "blue")
        screen.draw.filled_rect(answer_boxes[0], "blue")
        screen.draw.filled_rect(answer_boxes[1], "blue")
        screen.draw.filled_rect(answer_boxes[2], "blue")
        screen.draw.filled_rect(answer_boxes[3], "blue")
     
    ab1 = Rect(0, 0, 140, 100)
    ab2 = Rect(0, 0, 140, 100)
    ab3 = Rect(0, 0, 140, 100)
    ab4 = Rect(0, 0, 140, 100)
    ab1.move_ip(40, 80)
    ab2.move_ip(300, 80)
    ab3.move_ip(600, 80)
    ab4.move_ip(900, 80)
    answer_boxes = [ab1, ab2, ab3, ab4]
    random.shuffle(questions)
    game_over = False
   
    pgzrun.go()
        
except:
    import traceback
    with open(logname, 'a', encoding = 'utf-8') as f:
        f.write(''.join(traceback.format_exc()) + '\n')
When you program an interactive application, you have an event loop.
In that case you shouldn't block the program with sleep or similar
commands.
Instead, you should use timers to trigger events. In Pygame Zero, you would use clock.schedule to trigger a function call after a specified period of time.
Here's how I would implement such an application:
import pgzrun
questions = ["One", "Two"]
index = 0
can_answer = False
def show_answers():
    global can_answer
    can_answer = True
def on_mouse_down(pos):
    global can_answer, index
    if can_answer:
        can_answer = False
        index = index + 1
        clock.schedule(show_answers, 1.0)
    
def draw():
    screen.fill("black")
    screen.draw.textbox(questions[index], Rect(0, 0, 200, 100))
    if can_answer:
        screen.draw.filled_rect(Rect(0, 100, 200, 50), "blue")
clock.schedule(show_answers, 1.0)
pgzrun.go()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With