Skip to main content
 首页 » 编程设计

python之我的 Pygame 游戏打不开,但没有报错

2025年05月04日18qq号

所以我写了一个简单的学校图片匹配,但是打不开,IDLE也没有报错。我得到的是:

>>> ================================ RESTART ================================ 
>>>  
>>>  

我真的不知道从哪里开始。
非常抱歉,我的游戏是爱沙尼亚语的,也许这并不重要,但如果重要的话,我会把名字翻译成英文。

import pygame, sys, time, random 
from pygame.locals import * 
bg = pygame.image.load("bg.png") 
 
#Põhi muutujad (k - kast), nii on kergem hiljem muuta viga ainult ühes kohas 
kanimkiirus = 6 
rida = 5 
tulp = 5 
ksuurus = 50 
kvahe = 15 
fps = 35 
ekraanilaius = 640 
ekraanipikkus = 480 
kcolor = (255, 255, 255) 
 
kollane = pygame.image.load("1.png") 
punane = pygame.image.load("2.png") 
roheline = pygame.image.load("3.png") 
sinine = pygame.image.load("4.png") 
must = pygame.image.load("5.png") 
 
def baas(): 
        global baaskell, ekraan #Tegin need muutujad globaalseteks 
        pygame.init() 
        baaskell = pygame.time.Clock() 
        ekraan = pygame.display.set_mode([ekraanilaius, ekraanipikkus]) 
        ekraan.blit(bg, (0, 0)) 
        pygame.display.set_caption('Malukas') 
 
        #Need kaks muutujat hoiavad infot hiire asukoha kohta 
        hiirx = 0 
        hiiry = 0 
 
        baasLaud = looSuvalineLaud() 
        avatudKastid = tekitaAvatudKastideInfo(False) 
 
        """Need kaks järgnevat muutujat hoiavad infot kasutaja valikute kohta, kui mängija vajutab esimest korda kastile 
        saab esimeneSamm väärtuseks False ja esmineValik võrdub sellega, mis selle kasti all oli, kui oli kollane lind saab 
        selle väärtuseks see. Kui mängija vajutab järgmisele kastile saame kontrollida, kas teine valik on võrdne esimese valikuga""" 
        esimeneSamm = True 
        esimeneValik = None 
 
        alustaManguAnimatsiooni(baasLaud) #Mängu alguses näitab kogu lauda korra mängijale 
 
        while True: 
                klikitud = False 
 
                ekraan.blit(bg, (0, 0)) 
                joonistaLaud(baasLaud, avatudKastid) 
 
                #See tsükkel tegeleb sündmustega 
                for sündmus in pygame.event.get(): 
                        if sündmus.type == QUIT or (sündmus.type == KEYUP and sündmus.key == K_ESCAPE): #Mängu sulgemiseks 
                                pygame.quit() 
                                sys.exit() 
                        if sündmus.type == MOUSEMOTION: #Salvestab infot hiire asukoha kohta 
                                hiirx, hiiry == sündmus.pos 
                        if sündmus.type == MOUSEBUTTONUP: # 
                                hiirx, hiiry = sündmus.pos 
                                clicked = True 
 
                kastx, kasty = onKastiPeal(hiirx, hiiry) #Kui hiir liigub üle kasti, siis selle kasti kordinaadid salvestatakse siia 
                if kastx != None and kasty != None: 
                        #Hiir on järelikult üle kasti 
 
                        if not avatudKastid[kastx][kasty]: 
                                raamistaKast(kastx, kasty) #See funktsioon loob raami ümber kasti, kui hiir liigub üle kasti 
 
                        if klikitud and not avatudKastid[kastx][kasty]: 
                                #Kasutaja klikkis avamata kastile 
                                kastiAvamisAnimatsioon(baasLaud, [(kastx, kasty)], kanimkiirus) #See funktsioon tekitab kasti avamis animatsiooni 
                                avatudKastid[kastx][kasty] = True 
 
                                if esimeneSamm: 
                                        esimeneValik = (kastx, kasty) 
                                        esimeneSamm = False #Seame muutuja esimeneSamm väärtuse False ehk valeks, mis näitab, et mängija teeb oma teist valikut 
                                else: 
                                        lind1 = leiaLind(baasLaud, esimeneValik[0], esimeneValik[1]) 
                                        lind2 = leiaLind(baasLaud, kastx, kasty) 
 
                                        if lind1 != lind2: #Katab uuesti kastid kinni, kui linnud ei sobi 
                                                time.sleep(0.8) 
                                                kastiKatmisAnimatsioon(baasLaud, [(esimeneValik[0], esimeneValik[1]), (kastx, kasty)], kanimkiirus) 
                                                avatudKastid[esimeneValik[0]][esimeneValik[1]] = False 
                                                avatudKastid[kastx][kasty] = False 
                                        elif onVoitnud(avatudKastid): #Kui kõik linnud on omavahel sobitatud 
                                                manguVoiduAnimatsioon(baasLaud) 
                                                time.sleep(2) 
 
                                                #Alustab mängu uuesti 
                                                baasLaud = looSuvalineLaud() 
                                                avatudKastid = tekitaAvatudKastideInfo(False) 
 
                                                #Näitab lände korra 
                                                joonistaLaud(baasLaud, avatudKastid) 
                                                pygame.display.update() 
                                                time.sleep(1) 
 
                                                #Mängib algus animatsiooni uuesti 
                                                alustaManguAnimatsiooni(baasLaud) 
                                        esimeneSamm = True #paneb mängija esimese sammu peale tagasi 
 
                pygame.display.update() 
                baaskell.tick(fps) 
 
def kastiVasakTipp(kastx, kasty): 
        #Arvutab kastide vahed 
        vahex = int((ekraanilaius - (rida * (ksuurus + kvahe))) / 2) 
        vahey = int((ekraanipikkus - (tulp * (ksuurus + kvahe))) / 2) 
 
        vasak = kastx * (ksuurus + kvahe) + vahex 
        tipp = kasty * (ksuurus + kvahe) + ymargin 
 
        return (left, top) 
 
def kujutaLind(lind, kastx, kasty): 
        vasak, tipp = kastiVasakTipp(kastx, kasty) 
        if lind == kollane: 
                ekraan.blit(kollane, (kastx, kasty)) 
        elif lind == punane: 
                ekraan.blit(punane, (kastx, kasty)) 
        elif lind == roheline: 
                ekraan.blit(roheline, (kastx, kasty)) 
        elif lind == sinine: 
                ekraan.blit(sinine, (kastx, kasty)) 
        elif lind == must: 
                ekraan.blit(must, (kastx, kasty)) 
 
def looSuvalineLaud(): 
        linnud = [kollane, punane, roheline, sinine, must] 
        random.shuffle(linnud) 
        mituIkooniKasutada = int(rida * tulp / 2) 
        linnud = linnud[:mituIkooniKasutada] * 2 #ikoonide paarid 
 
        laud = [] 
        for x in range(tulp): 
                tulpa = [] 
                for y in range(rida): 
                        suvalineIndeks = random.randint(0, len(icons) - 1) 
                        tulpa.append(linnud[suvalineIndeks]) 
                        del linnud[suvalineIndeks] 
                laud.append(column) 
        return laud 
 
def joonistaKastiKate(laud, b, kate): 
        vasak, tipp = kastiVasakTipp(b[0], b[1]) 
        pygame.draw.rect(ekraan, (vasak, tipp, ksuurus, ksuurus)) 
        lind = leiaLind(laud, b[0], b[1]) 
        kujutaLind(lind, b[0], b[1]) 
        if kate > 0: 
                pygame.draw.rect(ekraan, kcolor, (vasak, tipp, kate, ksuurus)) 
 
def kastiKatmisAnimatsioon(laud, kastid, kiirus): 
        for i in range(0, ksuurus): 
                for b in kastid: 
                        joonistaKastiKate(laud, b, i) 
                pygame.display.update() 
                baaskell.tick(FPS) 
 
def kastiAvamisAnimatsioon(laud, kastid, kiirus): 
        for i in range(ksuurus, -kiirus - 1, -kiirus): 
                for b in kastid: 
                        joonistaKastiKate(laud, b, i) 
                pygame.display.update() 
                baaskell.tick(FPS) 
 
def leiaLind(laud, kastx, kasty): 
        return laud[kastx][kasty][0], laud[kastx][kasty][1] 
 
def alustaManguAnimatsiooni(laud): 
        valeAvatudKastid = tekitaAvatudKastideInfo(False) 
        kastid = [] 
        for x in range(tulp): 
                for y in range(rida): 
                        kastid.append((x, y)) 
        random.shuffle(kastid) 
 
        grupid = jagaGruppidesse(8, kastid) 
 
def jagaGruppidesse(grupiSuurus, list): 
        tulemus = [] 
        for i in range(0, len(list), grupiSuurus): 
                tulemus.append(list[i:i+grupiSuurus]) 
        return result 
 
def onVoitnud(avatud): 
        for i in avatud: 
                if False in i: 
                        return False 
        return True 
def manguVoiduAnimatsioon(laud): 
        global kcolor 
        valeAvatudKastid = tekitaAvatudKastideInfo(True) 
 
        for i in range(14): 
                kcolor = kcolor 
                ekraan.blit(bg) 
                joonistaLaud(laud, valeAvatudKastid) 
                pygame.display.update() 
                time.sleep(0.3) 
 
def tekitaAvatudKastideInfo(vaartus): 
        andmed = [] 
        for c in range(tulp): 
                andmed.append([vaartus] * rida) 
        return andmed 
 
def joonistaLaud(laud, avatud): 
        for kastx in range(tulp): 
                for kasty in range(rida): 
                        vasak, tipp = kastiVasakTipp(kastx, kasty) 
                        if not avatud[kastx][kasty]: 
                                pygame.draw.rect(ekraan, kcolor, (vasak, tipp, ksuurus, ksuurus)) 
                        else: 
                                lind = leiaLind(laud, kastx, kasty) 
                                kujutaLind(lind, kastx, kasty) 
 
def onKastiPeal(x, y): 
        for kastx in range(tulp): 
                for kasty in range(rida): 
                        vasak, tipp = kastiVasakTipp(kastx, kasty) 
                        kastiKuju = pygame.rect(vasak, tipp, ksuurus, ksuurus) 
                        if kastiKuju.collidepoint(x,y): 
                                return (kastx, kasty) 
        return (None, None) 
 
def raamistaKast(kastx, kasty): 
        vasak, tipp = kastiVasakTipp(kastx, kasty) 
        pygame.draw.rect(ekraan, kcolor, (vasak - 5, tipp - 5, ksuurus + 10, ksuurus + 10), 4) 

Pastebin .

    Traceback (most recent call last): 
  File "C:\Users\John\Documents\Python\Lõputöö\pildid.py", line 232, in <module> 
    baas() 
  File "C:\Users\John\Documents\Python\Lõputöö\pildid.py", line 34, in baas 
    baasLaud = looSuvalineLaud() 
  File "C:\Users\John\Documents\Python\Lõputöö\pildid.py", line 139, in looSuvalineLaud 
    suvalineIndeks = random.randint(0, len(linnud) - 1) 
  File "C:\Python32\lib\random.py", line 214, in randint 
    return self.randrange(a, b+1) 
  File "C:\Python32\lib\random.py", line 192, in randrange 
    raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop, width)) 
ValueError: empty range for randrange() (0,0, 0) 

请您参考如下方法:

您似乎没有在任何地方调用 baas()。看起来您的脚本将设置一些变量、加载一些图像,然后退出。

尝试在调用 baas() 的脚本末尾添加 if __name__=="__main__": - 这意味着如果您的脚本将被调用直接运行。