Python 在游戏中创建随机事件

Python 在游戏中创建随机事件,python,random,Python,Random,我正在用Python开发一个名为“黑屏模拟器”的小游戏(但它不仅仅是一个黑屏,我希望有一些事件。比如随机图像弹出的时间,但现在我只有一个你经常点击鼠标的时间和一个你经常按按钮的时间)总之,我需要把这些随机的。这是我试过的系统: import pygame from pygame.locals import * import time import random pygame.init() width, height = 640, 480 screen=pygame.display.set_mo

我正在用Python开发一个名为“黑屏模拟器”的小游戏(但它不仅仅是一个黑屏,我希望有一些事件。比如随机图像弹出的时间,但现在我只有一个你经常点击鼠标的时间和一个你经常按按钮的时间)总之,我需要把这些随机的。这是我试过的系统:

import pygame
from pygame.locals import *
import time
import random

pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
Event1 == False
Event2 == False
screen_rect=screen.get_rect()
player=pygame.Rect(180, 180, 20, 20)
mouseClickNumber = 0
keyPressNumber = 0
a = random.choice(Event1, Event2)
a = True

def Event1:
    if pygame.mouse.get_pressed(button 1):
        mouseClickNumber = mouseClickNumber + 1
    time.sleep(20)
    clickHappyFunTime = False
    print mouseClickNumber
    mouseClickNumber = 0

def Event2:
    if pygame.key.get_pressed:
        keyPressNumber = keyPressNumber + 1
    time.sleep(20)
    buttonPressTime = False
    print keyPressNumber
    keyPressNumber = 0
我的系统包括将两个事件设置为False,然后在两个变量Event1和Event2之间选择random.choice,但是当我运行它时,def Event2:是无效语法。我只是做错了什么吗?

函数定义必须包含参数列表,即使它是空的。像这样:

def Event1():
然而,这里还有很多其他问题

  • Event1==False
    不会将
    False
    分配给
    Event1
    ,它只是将
    Event1
    False
    进行比较-这将引发
    NameError
    ,因为您还没有任何命名为
    Event1
    的内容,但即使您这样做了,也没有任何用处,尤其是你忽略了结果
  • 如果您解决了这个问题,
    a=random.choice(Event1,Event2)
    将失败,因为
    choice
    只接受一个参数,一个可供选择的序列,而不是每个选项的单独参数;您想要
    a=random.choice([Event1,Event2])
  • 如果您解决了这个问题,它将在
    False
    False
    之间进行选择。也许你想让它在以后定义的两个函数中进行选择?但在定义它们之前,不能在它们之间进行选择。早些时候将它们定义为不同的值没有帮助;它只是选择较早的值。(同样,对普通值和函数重复使用相同的名称非常容易混淆。)
  • 如果您解决了这个问题,那也没关系,因为
    a=True
    将替换您选择的值
  • 您从不直接调用函数,也不会将它们附加到事件中,这样它们就会被
    PyGame
    间接调用,因此它们没有多大用处
  • 如果调用这些函数,它们将引发一个
    UnboundLocalError
    ,因为在函数中赋值给
    mouseClickNumber
    会使其成为局部变量,从而隐藏该名称的全局变量。为了避免这种情况,您需要添加
    全局mouseClickNumber
  • time.sleep
    在GUI应用程序中冻结整个GUI,防止其更新屏幕