Mario

Iš wiki.angis.net.
Jump to navigation Jump to search

Super Mario žaidimas

Super Mario žaidimo aplinka

Ši programa demonstruoja, kaip susikurti klasikinį Super Mario stiliaus žaidimą, kuriame veikėjas turi pereiti per žemėlapį ir paimti monetą, kuri atsiranda vis kitoje žemėlapio vietoje. Žaidimo tikslas surinkti, kuo daugiau monetų neiškritus iš žemėlapio ar nesusidūrus su priešu.

Šioje programėlėje panaudoti keli skirtingi vaizdo failai ir garsai, kurie atsiranda priklausomai nuo atlikto veiksmo.

Žaisti Super Mario

Žaidimui reikalingi failai

Visus garsus ir vaizdus panaudotus šiame žaidime galima atsisiųsti čia.

Super Mario žaidimo kodas

reikalinga angis
reikalingas žaidimas

scena = žaidimas.Scena(plotis=600, aukštis=400, plytelėsPlotis = 16, plytelėsAukštis = 16)

angis.naudosiuFailus([
    'belekas/image/mario.single.png',
    'belekas/image/mario.single.png',
    'belekas/image/mario.didelis.png',
    'belekas/image/mario.json',
    'belekas/image/plyt.png',
    'belekas/image/plyt_2.png',
    'belekas/image/plyt_3.png', # permatomas
    'belekas/image/moneta.png',
    'belekas/image/gumbaMires.png',
    'belekas/image/fonas.png',
    'belekas/image/gumba.1.png',
    'belekas/image/gumba.2.png',

    'belekas/garsas/suolis.mp3',
    'belekas/garsas/moneta.mp3',
    'belekas/garsas/stomp.mp3',
    'belekas/garsas/fonas.mp3',
])

marioPermatomas = 'belekas/image/plyt_3.png'
marioNejuda = 'belekas/image/mario.didelis.png'

šuolioGarsas = angis.Garsas("belekas/garsas/suolis.mp3")
monetosPaėmimoGarsas = angis.Garsas("belekas/garsas/moneta.mp3")
stompGarsas = angis.Garsas("belekas/garsas/stomp.mp3")
fonasGarsas = angis.Garsas("belekas/garsas/fonas.mp3")

žaidimas.duokSceną().fonas('belekas/image/fonas.png')

k1 = žaidimas.Plytelė('belekas/image/plyt_3.png')
k2 = žaidimas.Plytelė('belekas/image/plyt_2.png')
	
scena.pridėkPlyteles( 
    [
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1],
    [ k2, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k2, k1, k1, k1, k1, k1, k1, k2, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k1, k2],
    [ k2, k2, k2, k2, k2, k2, k1, k1, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k2, k1, k1, k2, k2, k2, k2, k2, k2, k2, k2]
    ]
    , plytelėsPlotis = 16, plytelėsAukštis = 16)

kampas = 360
reikiaJudėti = False

judėtDešinėn = False
judėtkairėn = False

judėtViršun = False
judetŽemyn = True
sakytiSkrendu = True
pagreitisY = 0

žaisti = True


komanda dešinėn():
    global judėtDešinėn
    global judėtkairėn

    judėtDešinėn = True
    judėtkairėn = False
 
komanda kairėn():
    global judėtDešinėn
    global judėtkairėn

    judėtDešinėn = False
    judėtkairėn = True

komanda atleidusDešinėn():
    global judėtDešinėn
    judėtDešinėn = False
    
 
komanda atleidusKairėn():
    global judėtkairėn
    judėtkairėn = False

# komanda atleidusKlavišą():
#     global reikiaJudėti
#     reikiaJudėti = False

komanda šokti():
    global pagreitisY

    koordinates = mario.duokKoordinates()
    easterEgg = koordinates[0] >= 438 and koordinates[1] <= 462
    

    if easterEgg or atstumas == 0:
        pagreitisY = -12
        šuolioGarsas.grokFone()



komanda atstumasIkiPlatformos():
    global plaformos
    koordinates = mario.duokKoordinates()

    for platforma in plaformos:
        if koordinates[0] + 16 >= platforma[0] and koordinates[0] <= platforma[0] + platforma[2]:
            return koordinates[1]+32-platforma[1]
        
    return -99

komanda mirtis():
    global žaisti

    žaisti = False
    print("Žaidimas baigėsi. Pralaimėjai")
    
    mario.atsirask(999, 999) # mario.pasislėpk()
    moneta.atsirask(9999, 9999)

komanda laimėjimas(mario, x, y):
    global žaisti

    žaisti = False
    print("Laimėjai")
    
    mario.atsirask(999, 999) # mario.pasislėpk()
    moneta.atsirask(9999, 9999)

komanda paimtiMonetą(mario, x, y):
    global paimtaMonetų
    global monetaXdešinėja
    global monetaXkairėja
    global moneta
    global gumbaGyvas

    monetosPaėmimoGarsas.grokFone()
    
    monetosKoord = moneta.duokKoordinates()
    x = monetaXdešinėja
    if monetosKoord[0] == monetaXdešinėja:
        x = monetaXkairėja

    moneta.atsirask(x, monetaY)

    paimtaMonetų += 1
    atnaujintiŠvieslentę()

    if not gumbaGyvas:
        gumbaKoordinates = gumbaMires.duokKoordinates()
        gumba.atsirask(gumbaKoordinates[0], gumbaKoordinates[1]-7)
        gumbaMires.atsirask(9999,9999)
        gumbaGyvas = True


komanda fonoTaimeris():
    fonasGarsas.grokFone()

angis.Taimeris(fonoTaimeris, 76.8) 
fonoTaimeris()

angis.paspaudus("w", šokti)
angis.paspaudus(" ", šokti)
# angis.atleidus("w", atleidusŠokti)

angis.paspaudus("d", dešinėn)
angis.atleidus("d", atleidusDešinėn)

angis.paspaudus("a", kairėn)
angis.atleidus("a", atleidusKairėn)


blokas1 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
blokas1.nustatykKliūtį(x = 0, y = 16*15, plotis = 16, aukštis = 32)

blokas2 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
blokas2.nustatykKliūtį(x = 11*16, y = 16*15, plotis = 16, aukštis = 16)
# blokas2.rodykZonas()

blokas3 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
blokas3.nustatykKliūtį(x = 16*18, y = 16*15, plotis = 16, aukštis = 16)

blokas4 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
blokas4.nustatykKliūtį(x = 29*18+6, y = 16*15, plotis = 16, aukštis = 16)


#    x,         y,       plotis
plaformos = [
    [0    +6,   16*15,   16*1  -9],  # blokas1
    [11*16+6,   16*15,   16*1  -9],  # blokas2
    [16*18+6,   16*15,   16*1  -9],  # blokas3
    [29*18+6,   16*15,   16*1  -9],  # blokas4

    [0,         16*16,   16* 6],  # platforma1
    [16* 8,     16*16,   16* 16], # platforma2
    [16*26,     16*16,   16* 8],  # platforma3
]

plaforma1 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
plaforma1.nustatykKliūtį(x = 0, y = 16*16, plotis = 16*6, aukštis = 16)

plaforma2 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
plaforma2.nustatykKliūtį(x = 16*8, y = 16*16, plotis = 16*16, aukštis = 16)

plaforma3 = žaidimas.Daiktas('belekas/image/plyt_3.png', 0, 0)
plaforma3.nustatykKliūtį(x = 16*26, y = 16*16, plotis = 16*8, aukštis = 16)

lapas1  = žaidimas.AnimacijųLapas('belekas/image/mario.json')

mario = žaidimas.Veikėjas(failoVardas = 'belekas/image/plyt_3.png', tag = 'mario')
# mario = žaidimas.Veikėjas(failoVardas = 'belekas/image/mario.single.png', tag = 'mario')
# mario.animuok(judesys="idle",  animacija=lapas1.animacija("idle",  0.05))
# mario.animuok(judesys="east", animacija=lapas1.animacija("walksE", 0.11))
# mario.animuok(judesys="south", animacija=lapas1.animacija("idle", 0.11))


w = žaidimas.Animacija(failoVardas = "belekas/image/mario.json", pavadinimas="walksW", greitis=0.11)
e = žaidimas.Animacija(failoVardas = "belekas/image/mario.json", pavadinimas="walksE", greitis=0.11)



# mario.rodykVektorių()
mario.atsirask(2*16, 16*14)
mario.žiūrėk(kampas)
mario.žingsnioIlgis(16)
mario.greitis(3)
# mario.rodykZonas()

monetaXdešinėja = 32*16
monetaXkairėja = 2*16
monetaY = 16*14
moneta = žaidimas.Daiktas('belekas/image/moneta.png')
moneta.atsirask(monetaXdešinėja,monetaY)
moneta.nustatykKliūtį(x=monetaXdešinėja, y=monetaY, plotis=40)
mario.susidūrus(moneta, paimtiMonetą)


komanda atnaujintiŠvieslentę():
    return švieslentė.tekstas("Monetų: " + str(paimtaMonetų))

paimtaMonetų = 0
švieslentė = žaidimas.Tekstas(" ")
švieslentė.dydis(25)
švieslentė.spalva("#FFFFFF")
švieslentė.atsirask(x = 10, y = 20)
atnaujintiŠvieslentę()


gumba = žaidimas.Veikėjas(failoVardas = 'belekas/image/gumba.1.png', tag = 'gumba')
gumbaMires = žaidimas.Veikėjas(failoVardas = 'belekas/image/gumbaMires.png', tag = 'gumbaMires')


gumbaKairen = True
gumbaX = 15*16
gumbaGyvas = True
gumba1 = True
gumbaKeiskPaveiksliuką = 10
gumba.atsirask(gumbaX, 16*15-1)
gumba.nustatykKliūtį(x=15*16, y=16*15-1, plotis=16)
gumba.žiūrėk(kampas)
gumba.žingsnioIlgis(16)
gumba.greitis(1)


judetiPo = 0

print("Paimk monetą")

while žaisti:
    atstumas = atstumasIkiPlatformos()
    koordinates = mario.duokKoordinates()

    if koordinates[1] < 50 and sakytiSkrendu:
        mario.sakyk("Skrendu !!!")
        sakytiSkrendu = False

    gumbaKoordinates = gumba.duokKoordinates()

    # mario liečia gumba iš kairės arba dešinės
    if koordinates[0] + 16-3 >= gumbaKoordinates[0] and koordinates[0] <= gumbaKoordinates[0] +16+3:
        diffY = gumbaKoordinates[1] - koordinates[1]

        if diffY <= 32 and diffY >=26:
            gumbaMires.atsirask(gumbaKoordinates[0], gumbaKoordinates[1]+7)
            gumba.atsirask(9999,9999)
            gumbaGyvas = False
            stompGarsas.grokFone()
        elif diffY < 26:
            mirtis()


    if gumbaGyvas:
        # pasukam gumba eit i kaire ar desine
        if gumbaKoordinates[0] <= 12*16: 
            gumbaKairen = False
        if gumbaKoordinates[0] >= 16*17:
            gumbaKairen = True

        # gumba pajuda
        if gumbaKairen:
            gumbaX -= 1
        else:
            gumbaX += 1
        gumba.atsirask(gumbaX, 16*15-1)

        if gumbaKeiskPaveiksliuką > 0:
            gumbaKeiskPaveiksliuką -= 1
        else:
            if gumba1:
                gumba.naudokPaveiksliuką('belekas/image/gumba.1.png')
                gumba1 = False
                gumbaKeiskPaveiksliuką = 10
            else:
                gumba.naudokPaveiksliuką('belekas/image/gumba.2.png')
                gumba1 = True
                gumbaKeiskPaveiksliuką = 10

    if  koordinates[1] >= 16*16:
        mirtis()
        break

    # atstatyti veikėja ant platformos
    atstatyta = False
    if atstumas > 0:
        atstatyta = True
        mario.atsirask(koordinates[0], koordinates[1]-atstumas)
        judėtViršun = False

    if not atstatyta and (judėtDešinėn or judėtkairėn or judėtViršun or judetŽemyn):
        
        dy = 0
        dx = 0

        if pagreitisY != 0:
            dy = pagreitisY
            pagreitisY += 1
            if abs(pagreitisY) <= 1:
                pagreitisY = 0
        else:
            if atstumas < 0:
                dy = 3*4

        if judėtDešinėn:
            dx = 16

        if judėtkairėn:
            dx=-16

        
        if dx != 0 or dy != 0:
            dx /=8
            dy /=2

            if dx < 0:
                e.pasislėpk()
                w.atsirask(koordinates[0] + dx, koordinates[1] + dy)
                w.grokFone()
            else:
                w.pasislėpk()
                e.atsirask(koordinates[0] + dx, koordinates[1] + dy)
                e.grokFone()

            mario.atsirask(koordinates[0] + dx, koordinates[1] + dy)
            mario.naudokPaveiksliuką(marioPermatomas)
        else:
            mario.naudokPaveiksliuką(marioNejuda)
            w.pasislėpk()
            e.pasislėpk()


    angis.palauk(10)

Svarbu! Nepamiršk įsikelti žaidime naudojamus paveiksliukus ir garsus per failų tvarkyklę. Visi Super Mario žaidimui reikalingi failai yra čia.