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