Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by axu »

Niin eli tässä esimerkissä pääpaino on ulkoasulla(en tarkoita sitä palloa ;) ), EI fysiikassa :cry:

Toivottavasti joku tästä oppii tekemään edes tuon taivaan, maan kohalla meni vähän hankalammaksi, ja rumemmaksi

Code: Select all

SCREEN 1000, 750,0,2
SetWindow "Moukarinheitto",3
FrameLimit 40
SW=ScreenWidth()
SH=ScreenHeight()

SandAmount=20                           'Hiekkapartikkeleiden määrä
Dim SandX(SandAmount), SandY(SandAmount), SandVelX#(SandAmount), SandVelY#(SandAmount) 'Hiekan muuttujat(sijainti & nopeus)

BG=MakeObjectFloor()
SkyW=1000                               'Taivas-tekstuurin leveys
SkyH=700                                'Taivas-tekstuurin korkeus
CloudSize=100                           'Pilvien koko
Sky=MakeImage(SkyW,SkyH)                'Tehdään kuva taivaaksi
DrawToImage Sky
    Color Rand(80,120),Rand(80,130),Rand(160,250)       'Arvotaan sinertävä väri taivaaksi
    Box 0,0,SkyW,SkyH                                   'Väritetään sillä taivas
    For i=1 To Int((SkyW+SkyH)/100)                     'Tehdään pilviä taivaan koon mukaan, muuta jakajaa jos haluat muuttaa pilvien tiheyttä
        BW=Rand(10,CloudSize)                           'Uuden pilven leveys
        BX=Rand(SkyW-CloudSize-BW)                      'Uuden pilven X-sijainti
        BH=Rand(10,CloudSize)                           'Uuden pilven korkeus
        BY=Rand(SkyH-CloudSize-BH)                      'Uuden pilven Y-sijainti
        Color 240+Rand(10),240+Rand(10),240+Rand(10)    'Arvotaan vaalea väri pilveä varten
        For X1=BX To BX+BW                              'Käydään läpi jokainen vaakasijainti pilven sisällä
            For Y1=BY To BY+BH                          'ja pystysijainti myös!
                S=Rand(CloudSize)                       'Tämä määrää pilven yksittäisen "palleron" koon
                If Rand(30)=0 Then Ellipse X1,Y1,S+Rand(-5,5),S+Rand(-5,5)
            Next Y1
        Next X1
    Next i
DrawToScreen
PaintObject BG,Sky
PositionObject BG,0,0,-1                'Siirretään taivasta "taaemmaksi"
Ground1=MakeImage(SW,100)               'Tehdään maan tekstuuri ruudun levyiseksi
DrawToImage Ground1
    Color Rand(170,200),Rand(150,180),Rand(50)          'Maanläheisiä värejä
    Box 0,30,SW,70                                      'Väritetään tausta reikien varalta
    For X1=0 To SW/10
        For Y1=2 To 9
            Color 220-Y1*7,170-Y1*10,Rand(5)            'Maanläheisiä värejä
            RY=Rand(-10,5)
            RR=Rand(15,35)
            Circle X1*10,Y1*10+RY,RR
            If X1>SW/10-3 Then Circle X1*10-SW,Y1*10+RY,RR
        Next Y1
    Next X1
DrawToScreen
Ground2=CloneImage(Ground1)             'Tehdään kopio maasta, jotta saadaan jatkuva tekstuuri aikaiseksi

Dim VelX#(1),VelY#(1),X#(1),Y#(1),Dis#,Ang# 
Const Grav=-.4                          'Painovoiman suuruus
Joustavuus=20                           'Moukarin nauhan(?) oletus joustavuus

PositionCamera 100000,300               'Purkkaa joka estää maailmanlopun(huomaat kyllä mistä puhun jos muutat nollaksi ja heität väärään suuntaan)
X(1)=100000
DrawToWorld ON
Repeat
    For s=0 To SandAmount               'Hiekkapartikkeleiden päivittäminen
        Color 180+s*3,150-s*2,30        'Valitaan sävy(ei arvota, koska se aiheuttaa hiekan välkkymistä)
        Line SandX(s),SandY(s),SandX(s)+SandVelX(s),SandY(s)+SandVelY(s)
        SandX(s)=SandX(s)+SandVelX(s)   'Liikutetaan
        SandY(s)=SandY(s)+SandVelY(s)   'hiekkaa
        SandVelX(s)=SandVelX(s)*.9      'Hidastetaan
        SandVelY(s)=SandVelY(s)*.9      'myös
        SandVelY(s)=SandVelY(s)+Grav    'Painovoima
    Next s
    DrawImage Ground1,-CameraX() Mod SW,SH-100+CameraY()    'Asetetaan maa-tekstuurit niin,
    DrawImage Ground2,-CameraX() Mod SW+SW,SH-100+CameraY() 'että syntyy jatkuvuuden vaikutelma
    MX=MouseWX()                        'Otetaan ylös hiireen sijainti
    MY=MouseWY()
    If Heitetty=0 Then                  'Jos pallo kädessä
        X(0)=MX                         'Asetetaan nauhan pää hiireen
        Y(0)=MY
        VelY(0)=0
        VelX(0)=0
        Dis=Distance(X(1),Y(1),MX,MY)   'Haetaan etäisyys hiirestä palloon
        Ang=GetAngle(X(1),Y(1),MX,MY)   'ja kulma myös
        VelX(1)=CurveValue(Cos(Ang)* Dis,VelX(1),Joustavuus)    'Asetetaan edellä hankittujen tietojen
        VelY(1)=CurveValue(Sin(Ang)*-Dis,VelY(1),Joustavuus)    'mukaan pallolle nopeudet
        PositionCamera CameraX(),CurveValue(0,CameraY(),30)     'Liikutetaan kameraa pelkästään pystysuunnassa maantasolle
    Else
        Dis=Distance(X(0),Y(0),X(1),Y(1))                       'Haetaan etäisyys nauhan päästä palloon
        Ang=GetAngle(X(0),Y(0),X(1),Y(1))                       'sekä kulma
        VelX(0)=CurveValue(Cos(Ang)* Dis,VelX(0),Joustavuus*2)  'Lasketaan nopeudet
        VelY(0)=CurveValue(Sin(Ang)*-Dis,VelY(0),Joustavuus*2)  'nauhan päälle
        PositionCamera CurveValue(X(1),CameraX(),7),CurveValue(Y(1)/30,CameraY(),7)  'Kamera seuraa palloa
        If CameraY()<0 Then PositionCamera CameraX(),0          'Estetään kameran putoaminen maan alle
    EndIf
    If MouseHit(1) Then
        StartX=MX                       'Heitetään pallo tai
        Heitetty=(Heitetty+1) Mod 2     'otetaan se kiinni
    EndIf
    
    For i=0 To 1
        VelY(i)=VelY(i)+Grav            'Päivitetään fysiikat
        VelX(i)=VelX(i)*.99
        VelY(i)=VelY(i)*.99
        If Y(i)<-SH/2+90 Then           'Törmäys maahan
            VelY(i)=-Vely(i)*.4:Y(i)=-SH/2+90:VelX(i)=VelX(i)*.8
            If i = 1 Then               'Heitetään hiekkaa jos osuja oli pallo
                For s=0 To SandAmount
                    SandX(s)=X(i)
                    SandY(s)=Y(i)-10
                    SandVelX(s)=Cos(Rand(0,180))*Rand(1,5)+VelX(i)*Rnd(1.5)
                    SandVelY(s)=Sin(Rand(0,180))*Rand(1,5)+VelY(i)*Rnd(1.5)
                Next s
            EndIf
        EndIf
        X(i)=X(i)+VelX(i)
        Y(i)=Y(i)+VelY(i)
    Next i
    Color 0,0,0
    Line X(0), Y(0), X(1), Y(1)         'Piirtäminen
    Circle X(1)-15,Y(1)+15,30
    Text 1,1,"Joustavuus: "+Joustavuus+"  Nuolinäppäimistä muuttaa"
    Joustavuus=Joustavuus+UpKey()-DownKey()
    If Heitetty=0 Then StartX=X(1)
    Text 1,15,"Matka: "+(Int(X(1)-StartX))
    If Y(1)>SH/2 Then
        X1=X(1)-CameraX()+SW/2
        If X1>SW-TextWidth(Y(1)+SW/2) Then X1=SW-TextWidth(Y(1)+SW/2)
        If X1<10 Then X1=10
        Text X1,30,Int(Y(1)+SW/2)
    EndIf
    DrawScreen
    DrawGame
Until EscapeKey()
Antaa valaa palituksia
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Guest

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by Guest »

Purkkaa joka estää maailmanlopun
:D tosiaankin
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by Koodiapina »

Juu, nuo fysiikat eivät tosiaan olleet järisyttävät, moukari meni välillä maasta läpi, takertui siihen tai pomppi minne sattuu. Ei sillä, että itse yltäisin tuollekkaan tasolle. Mutta jos grafiikoiden luonnissa oli pääpaino, niin siinä ollaan onnistuttu varsin hienosti. Enpä ole noin yksityiskohtaista maata nähnyt piirtokomennoilla tehtävän :) EDIT: Niin ja hiekan lentämis efekti on hieno myös.
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by atomimalli »

Itse ylsin maailman loppuun :P lennolle tuli matkaa -8221406 pituusyksikköä.

Minä tykkäsin maasta kovasti, omaperäinen ja mukavan näköinen.

Pilvet olivat myös mukavi mitta ehkä turhan neliskulmaisia, monimutkaisemmalla kaavalla niiden muotoon olisi voinut vaikuttaa enemmän.
Virkistävää grafiikkaa, uskallan sanoa.

Ei se nyt olisi iso homma ollut vielä pallollekkin tekaista väriliukua mutta näin on ihan hyvä.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by koodaaja »

Ei ollenkaan huonompi väkerrelmä. Hiukka tönkkö ja epämääräinen pelituntuma, mutta graafisesti hieno - huomioon ottaen käytetyn tekniikan. Itse pidin pilvistä, joskin nuo pienimmät läikät ovat oudon näköisiä. Maa on kumman väristä ja siitä lentävät partikkelit vielä kummempia. Ei muuten ole välttämättä paras idea venyttää ikkunaa noin isoksi, tulee mössöä.

Löysin yhden muikean bugin, jonka avulla parhaasta heitostani tuli 27130192 yksikköä (?) pitkä. Eli hiirellä kikkailua juu.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by axu »

koodaaja wrote:Eli hiirellä kikkailua juu.
tarkoitatko klikkailua? jos se liittyy siihen mahtavaan bugiin 8-)
no jaa eipä tässä mitään ennätyslistaa tartte alkaa tekemään kun siinä tosiaan saa |aika| pitkiä heittoja, sekä sitä nauhan :evil: (mikäs sen oikea nimi on?) joustavuutta saa pienennettyä
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Moukarin heittopeli (sis. grafiikoiden luonti koodissa)

Post by MaGetzUb »

Kivat grafiikat, jännä '3d' effekti sielä taustalla niitten pilvien kanssa. :D Ihan mielenkiitoinen toteutus.. Moukarissa ei tuntunut olevan järjen hiventäkään.. 158496304 tuli loppu distanssiksi. :D
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Post Reply