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()执行,但这只是加载常量。您需要调用初始化应用程序的函数。

编辑:

random.randint(0, len(linnud) - 1)

如果linnud没有值,则表达式将评估为 -1。这是一个无效的范围。

于 2013-05-13T14:20:00.983 回答
3

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

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

于 2013-05-13T14:24:37.687 回答