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