2013-05-13 123 views
1

所以我写了一个简单的匹配学校的图片,但它没有打开,没有在IDLE中给出错误。我得到的是:我的Pygame游戏没有打开,但没有给出错误

>>> ================================ 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) 
+0

如此多的嵌套块/条件可能是错误代码练习的标志。您应该考虑这一点,也许不是将整块代码包装在一个“if”块中,而是先测试一个“非情况”,如果不是,则继续正常工作而不必缩进。也;我们阅读,回答并在stackoverflow上发布问题,而不是pastebin。 – timss 2013-05-13 14:17:15

+0

你似乎没有在任何地方调用'baas()'。它看起来像你的脚本将设置一些变量,加载一些图像,然后退出。 – thegrinner 2013-05-13 14:19:38

+0

它看起来像你已经定义了所有的功能,但你永远不会调用baas()函数来运行游戏。 – ecline6 2013-05-13 14:20:08

回答

3

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

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

+1

谢谢!那是一个愚蠢的错误。好吧,现在我弹出窗口并停止响应,但这一次我也收到了一个错误。我将错误添加到了我原来的帖子中。 – Vasar 2013-05-13 15:38:49

3

您的程序没有调用您定义的任何函数的主要部分。执行baas()之前的所有代码,但只加载常量。您需要调用初始化应用程序的函数。

编辑:

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

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

相关问题