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

标签 python pygame

所以我写了一个简单的学校图片匹配,但是打不开,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__": - 这意味着如果您的脚本将被调用直接运行。

关于python - 我的 Pygame 游戏打不开,但没有报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16524214/

相关文章:

python - addheaders if-modified-since 现在加上 60 秒

python - 在循环中添加同一类的新对象

python - Pygame 碰撞检测不适用于旋转图像

python-3.x - Pygame 中更复杂的颜色渐变

python - 需要有关加入 sqlalchemy 的帮助

python - 更新 tastypie 中多个资源的字段

python - 如何使用 Python Chameleon 指定 html5 文档类型?

python - Django 的双下划线

python - 具有抗锯齿功能的可嵌入 GUI 的 Python 绘图小部件

python - 数字键的大写()