所以我写了一个简单的学校图片匹配,但是打不开,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/