所以我寫了一個簡單的匹配學校的圖片,但它沒有打開,沒有在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)
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)
如此多的嵌套塊/條件可能是錯誤代碼練習的標誌。您應該考慮這一點,也許不是將整塊代碼包裝在一個「if」塊中,而是先測試一個「非情況」,如果不是,則繼續正常工作而不必縮進。也;我們閱讀,回答並在stackoverflow上發佈問題,而不是pastebin。 – timss 2013-05-13 14:17:15
你似乎沒有在任何地方調用'baas()'。它看起來像你的腳本將設置一些變量,加載一些圖像,然後退出。 – thegrinner 2013-05-13 14:19:38
它看起來像你已經定義了所有的功能,但你永遠不會調用baas()函數來運行遊戲。 – ecline6 2013-05-13 14:20:08