1

ということで学校用の絵合わせを簡単に書いてみたのですが、開かず、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)

ペーストビン

    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)
4

2 に答える 2

3

baas()あなたはどこにも電話していないようです。スクリプトがいくつかの変数を設定し、いくつかの画像をロードしてから終了するようです。

if __name__=="__main__":呼び出すスクリプトの末尾に を追加してみてくださいbaas()。これは、スクリプトが直接実行された場合に呼び出されることを意味します。

于 2013-05-13T14:24:37.687 に答える