Pikku pelit

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Pikku pelit

Post by temu92 » Mon Feb 08, 2010 8:57 pm

jaahas wrote:(tää on mun eka peli et ei välttämättä oo kovin hyvä)
jaahas wrote:eka peli ei oo hyvä
Ekoja pelejä ei edes juuri itse mainitsemasi syyn takia kannata julkistaa missään.

jaahas
Advanced Member
Posts: 307
Joined: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Pikku pelit

Post by jaahas » Mon Feb 08, 2010 9:19 pm

kuka sitä kommentois sitten?

User avatar
mikeful
Moderator
Moderator
Posts: 523
Joined: Mon Aug 27, 2007 8:36 pm
Location: Vaasa, Finalnd
Contact:

Re: Pikku pelit

Post by mikeful » Mon Feb 08, 2010 9:30 pm

Offtopikkia voisi vähentää. Jaahaksella näyttää olevan sen verran kysymyksiä, että olisi ehkä viisainta katsella editorin manuaalia ja Ongelmat-aluetta projektien sijaan.
Pelejä: Pelasta puhe, Grinder
Muuta: Blogi, Twitter

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Pikku pelit

Post by koodaaja » Mon Feb 08, 2010 9:33 pm

Ensimmäiset pelit tuppaavat olemaan sen verran tasottomia, että kukaan ei halua niitä kokeilla.

Tämä oli ihan hauska, tosin aivan liian helppo ja hieman päämäärätön. Joku tavoite piristäisi peliä kummasti, esimerkiksi tietyn rahasumman kerääminen tietyssä ajassa. Ok:n tai seiskan hakkaaminen jatkuvasti oli myös aavistuksen rasittavaa, graafiset namiskat olisivat hyvästä - ainakin asiat voisi laittaa paremmin järjestykseen, hetki meni löytää "seuraava päivä" -namiska. Ja pikkuhavaintona, menot ilmoitetaan positiivisena lukuna. Esmes -300€ menoja tarkoittaisi 300€ tuloja.

Mutta kuten sanottu, ensimmäiset tekeleet ovat yleensä hyvin huonoja joten tämä on aivan fiktiivisen hatunnoston arvoinen suoritus.

jaahas
Advanced Member
Posts: 307
Joined: Sat Feb 06, 2010 12:36 am
Location: Tornio

Re: Pikku pelit

Post by jaahas » Mon Feb 08, 2010 11:24 pm

mikeful wrote:Offtopikkia voisi vähentää. Jaahaksella näyttää olevan sen verran kysymyksiä, että olisi ehkä viisainta katsella editorin manuaalia ja Ongelmat-aluetta projektien sijaan.
käyppä kattomassa tyhmät kysymykset osiota :D

User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 11:50 pm

Re: Pikku pelit

Post by Knoy » Sun Feb 14, 2010 9:46 pm

Hiiri Väistely,
Laiskasti ja nopeasti tehty peli jossa pitää väistellä hiirellä lenteleviä palloja.
Pelin värit ovat erillaiset joka kerralla kun sen avaa!

Vasemmalla hiiren näppäimellä voi tehdä kilven joka torjuu palloja.

Code: Select all

SCREEN 500,500
SetWindow "Hiiri Väistely",0
FrameLimit 50
olionobjectinkuva=MakeImage(15,15)
DrawToImage olionobjectinkuva
        Color Rand(255),Rand(255),Rand(255)
        Circle 0,0,15,0
DrawToScreen
olionobjecti=MakeObject()
PaintObject olionobjecti,-olionobjectinkuva
ShowObject olionobjecti,OFF 

kursori=MakeImage(13,13)
DrawToImage kursori
    Color Rand(45,255),Rand(45,255),Rand(45,255)
    Circle 1,1,11,0
    Color Rand(45,255),Rand(45,255),Rand(45,255)
    Box 0,6,13,1,0
    Color Rand(45,255),Rand(45,255),Rand(45,255)
    Box 6,0,1,13,0
DrawToScreen
Hiiri=MakeObject(360)
PaintObject hiiri,-kursori
ShowObject hiiri,OFF

oikeahiiri=MakeImage(1,1)
DrawToImage oikeahiiri
    Color 0,0,0
    Box 0,0,1,1,0
DrawToScreen
ShowMouse oikeahiiri

KilpiKuva=MakeImage(30,30)
DrawToImage KilpiKuva
    Color Rand(45,255),Rand(45,255),Rand(45,255)
    Circle 0,0,30,0
DrawToScreen
Kilpi=MakeObject(360)
PaintObject kilpi,-KilpiKuva
PositionObject kilpi, 1000,1000
ShowObject Kilpi,OFF
    

Type Otukset
    Field Otus
    Field OtusX
    Field OtusY
    Field kääntyminen
    Field väri1
    Field väri2
    Field väri3
    Field Kilvessä
    Field Kulma
EndType

Repeat
If Kohta=0 Then
    Color CbWhite
    Text 0,0, "-1- Helppo"
    Text 0,15, "-2- Normaali"
    Text 0,30, "-3- Vaikea"
    Text 0,50, "Hiiren vasennäppäin tekee kilven joka torjuu vastuksia."
    Text 0,65, "Kilven ylläpito maksaa 4 pistettä sekunnilta!"
    Text 0,80, "Peli alkaa kun hiiren kuvake alkaa pyörimään!"
    Color  CbBlue
    Text 0,485, "Pelin on tehnyt Knoy käyttäen CoolBasiccia!"
    If KeyHit(CbKey1) Then
        Kohta=1
        määrä=30
    EndIf
    If KeyHit(CbKey2) Then
        Kohta=1
        määrä=60
    EndIf
    If KeyHit(CbKey3) Then
        Kohta=1
        määrä=90
    EndIf
EndIf

If Kohta=1 Then
    For i = 1 To määrä
        oliot.otukset = New(Otukset)
        oliot\otus=CloneObject(olionobjecti)
        oliot\kääntyminen=Rand(0,19)
        oliot\otusX=Rand(-249,249)
        oliot\otusY=Rand(-249,249)
        oliot\väri1=Rand(45,255)
        oliot\väri2=Rand(45,255)
        oliot\väri3=Rand(45,255)
        PositionObject oliot\otus,oliot\otusX,oliot\otusY
        RotateObject oliot\otus, Rand(0,359)
    Next i
    Kohta=2
    ShowObject hiiri,ON
EndIf
    
If Kohta=2 Then
    If MouseDown(1) And Pisteet>3 And Pelialkanut=1 Then
        Pisteet-4
        CloneObjectPosition Kilpi,hiiri
        TurnObject kilpi,-2
        ShowObject Kilpi,ON
    Else
        PositionObject kilpi, 1000,1000
        ShowObject kilpi,OFF
    EndIf
    Color CbWhite
    Text 0,0,"Pisteet:"+pisteet
    Pisteet+1
    PositionObject hiiri,MouseWX(),MouseWY()
    For oliot.otukset = Each otukset
        oliot\kääntyminen+1
        If oliot\kääntyminen=20 Then
            oliot\kääntyminen=0
            TurnObject oliot\otus, Rand(-3,3)
        EndIf
        If pisteet>299 Then 
            pelialkanut=1
        EndIf
        If Pelialkanut=1 Then
            TurnObject Hiiri,1
            If ObjectsOverlap(hiiri,oliot\otus) And Oliot\kilvessä=0 Then
                Kohta=3
                hävisit=300
            EndIf
        EndIf
        If ObjectsOverlap(Oliot\otus,kilpi)=0 Then
            If oliot\kilvessä=1 Then
                oliot\kilvessä=0
                RotateObject oliot\otus,Oliot\kulma
            EndIf 
            MoveObject oliot\otus, 2,0
        Else
            If Oliot\kilvessä=0 Then
                oliot\kilvessä=1
                oliot\kulma=ObjectAngle(oliot\otus)
            EndIf
            PointObject oliot\otus,hiiri
            MoveObject Oliot\otus, -5,0
        EndIf
        oliot\otusX=ObjectX(oliot\otus)
        oliot\otusY=ObjectY(oliot\otus)
        If oliot\otusX>250 Then PositionObject oliot\otus, -249,oliot\otusY
        If oliot\otusX<-250 Then PositionObject oliot\otus, 249,oliot\otusY
        If oliot\otusY>250 Then PositionObject oliot\otus, oliot\otusX,-249
        If oliot\otusY<-250 Then PositionObject oliot\otus, oliot\otusX,249
    Next oliot
EndIf

If Kohta=3
    ShowObject hiiri,OFF
    If Hävisit>0 Then
        Text 0,0,"Sait:"+pisteet+" pistettä!"
        Hävisit-1
    EndIf
    For oliot.otukset = Each otukset
        DeleteObject Oliot\otus
        Delete oliot
    Next oliot
    If Hävisit=0 Then
        Kohta=0
        Pisteet=0
        Pelialkanut=0
    EndIf
EndIf
DrawScreen
Forever
    

User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 10:01 pm

Re: Pikku pelit

Post by ukkeli » Wed Feb 17, 2010 4:17 pm

hei tuohan on hyvä pikku peli !
en löytänyt bugeja paitsi yhden :shield oli päällä ja kuolin
mutta silti peli oli hyvä se oli ja ne värit jotka arvottiin :)
...

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Pikku pelit

Post by Ilkka » Wed Feb 17, 2010 9:41 pm

Tein huvikseen pelin jossa pitää väistää vastaan tulevia laatikoita. Nuolista liikutetaan omaa laatikkoa. Oma ennätykseni pikaisen testailun jälkeen: 54.

Code: Select all

Text 10,10,"Pelin tarkoitus on väistää vastaan tulevia"
Text 10,30,"laatikoita mahdollisimman kauan. Omaa"
Text 10,50,"laatikkoasi liikutat nuolinäppäimillä."
Text 10,80,"Paina jotain näppäintä pelataksesi."
DrawScreen 
WaitKey 

Type LAATIKOT
    Field x
    Field y
    Field leveys
    Field korkeus
    Field nopeus 
EndType 

x#=180
y#=280

pisteet=0

For i=1 To 15
    l.LAATIKOT = New(LAATIKOT)
    l\x = Rand(0,390)
    l\y = y - Rand(200,800)
    l\leveys = Rand(10,50)
    l\korkeus = Rand(10,50)
    l\nopeus = 2 
Next i

Repeat
    For l.LAATIKOT = Each LAATIKOT
    
        If LeftKey()Then x-0.3
        If RightKey()Then x+0.3
        If UpKey()Then y-0.3
        If DownKey()Then y+0.3
        
        Color 255,255,255
        Box l\x,l\y,l\leveys,l\korkeus
        
        Color 200,0,0
        Box x,y,20,20
        
        l\y+l\nopeus        
        If l\y>300 Then l\y=y-Rand(400,800): l\x =Rand(0,400)
        
        If Timer()>aika+500 Then 
           pisteet+1
           aika=Timer()
        EndIf 
        If Timer()>aikka+1000
           l\nopeus+2
           aikka=Timer()
        EndIf 

        If y<0 Then y=0
        If y>280 Then y=280
        If x<0 Then x=0
        If x>380 Then x=380 

        If BoxOverlap(x,y,20,20,l\x,l\y,l\leveys,l\korkeus) Then MakeError "Hävisit - Sait "+pisteet+" pistettä"
      
        SetWindow "Väistelypeli - Pisteet:"+pisteet
        
    Next l
  DrawScreen 
Forever 
Image

User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 10:01 pm

Re: Pikku pelit

Post by ukkeli » Wed Feb 17, 2010 10:44 pm

mahtava peli !
oma ennätys on 54 pistettä :)
...

User avatar
valscion
Moderator
Moderator
Posts: 1588
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Pikku pelit

Post by valscion » Wed Feb 17, 2010 11:10 pm

Ilkka wrote:Tein huvikseen pelin jossa pitää väistää vastaan tulevia laatikoita. Nuolista liikutetaan omaa laatikkoa. Oma ennätykseni pikaisen testailun jälkeen: 54.
Hauska pikkupeli :) Vähän vain lagasi omalla koneellani (FPS 19) ja onnistuin saamaan pistesaldon 94 ;)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
Ilkka
Active Member
Posts: 201
Joined: Mon Oct 08, 2007 8:01 am

Re: Pikku pelit

Post by Ilkka » Wed Feb 17, 2010 11:17 pm

VesQ wrote:Hauska pikkupeli :) Vähän vain lagasi omalla koneellani (FPS 19) ja onnistuin saamaan pistesaldon 94 ;)
Itselläni FPS pysyi aika tiiviisti 70-75 rajoilla. Sillon tällön kävi 50, mutta ei mulla pahemmi ainakaa. En vielä sun yli päässy pisteissä, 73 :lol:
Image

User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Pikku pelit

Post by phons » Wed Feb 17, 2010 11:23 pm

Ihan ok...
Huonoa:
Välillä laatikot vain yhtäkkiä lähtivät tulemaan ihan tysillä alas...
Jotkin laatikot liian nopeita ei mitää mahiksi väistää vaikka olisi mimmoset refleksit, ehkä tuurilla...
Perus pattitilanne joka esiintyy monissa tällaisissa peleissä, yksinkertaisesti jatkaminen on mahdotonta eli laatikot tulevat vastaan niin ettei pakoreittiä ole...

Hyvää:
Se mikä kaikissa muissakin näissä, täytyy aina saada parempi tulos, eli se koukuttaa hitusen..
Image

User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 11:50 pm

Re: Pikku pelit

Post by Knoy » Thu Feb 18, 2010 6:01 pm

Ihan kiva tuo laation väistely peli, mutta koneeni pyörittää sitä liika nopeasti... Laatikot tulevat samaa vauhtia kuin framelimit olisi 60 ja mobeobject olisi 20... nopeat laatikot tulevat taas niin nopeasti että niitä tuskin näkee... Pisteitä sain kuitenki 30... Lisäsin framelimitin 50 sitten peli toimi paremmin...


Koodasin tälläsen pikkasen juoksu pelin, mutta se oli hieman turhan yksin kertainen yksinään joten lisäsin mukaan keihäänheiton.

Tässä olisi koodi:

Code: Select all

FrameLimit 40
SCREEN 400,300
SetWindow "Urheilu pelit"

Viiva=MakeImage(90,2)
DrawToImage Viiva
    Color CbBlue
    Box 0,0,90,3
DrawToScreen
VauhtiViiva=MakeObject(4)
PaintObject VauhtiViiva,-Viiva
ShowObject vauhtiviiva,OFF

Keihäs=MakeImage(20,2)
DrawToImage Keihäs
    Color CbDarkRed
    Box 0,0,20,2
DrawToScreen
keihä=MakeObject(90)
PaintObject keihä,-keihäs
ShowObject keihä,OFF

Type Super
    Field VauhtiVi
EndType
Gosub loadgame
If ParasAika=0 Then parasaika=1000000000

Repeat
    If Kohta=0 Then
        Color CbOrange
        Text 0,0,"1. 10 metrin Pallojuoksu"
        Color CbRed
        Text 0,15,"2. Keihäänheitto"
        Color CbWhite
        Text 0,60, "Juoksun ohjeet:"
        Text 0,75, "Rämpytä ylösnuolta nopeasti!"
        Text 0,105, "Keihäänheiton ohjeet:"
        Text 0,120, "Paina Spacea pohjassa saadaksesi kulma!"
        Text 0,135, "Paina sapcea pohjassa uudestaan saadaksesi voima!"
        Color CbBlue
        Text 0,285, "Pelin on tehnyt Knoy käyttäen CoolBasiccia!"
        If KeyHit(CbKey1) Then
            JuoksunAika=0
            Kohta=1
            metrit=0
            sentit=0
        EndIf
        If KeyHit(CbKey2) Then
            keihäänmatka=0
            Kohta=4
            senttimetrit=0
            X=0
            Y=188
            Kulma=0
            KulmaKääntyy=0
            KulmaV=0
            Voima=0
            VoimaV=0
            voimakääntyy=0
            voimaa=0
            kulmaa=0
            odotus=0
            KulmaAlkaa=0
            VoimaAlkaa=0
            heittänyt=0
        EndIf
    EndIf
    If Kohta=1 Then
        Color CbOrange
        Box 0,0,400,300
        Color CbRed
        Circle 160,120,80,80
        Color CbWhite
        Box 50,0,10,300
        Box 340,0,10,300
        Text 0,0, "Juostu:"
        Text 0,15, metrit+","+sentit+"M"
        Text 0,30, "Aika:"
        Text 0,45, RoundDown(JuoksunAika/40)+"S"
        Text 0,75, "Paras:"
        If parasaika<15000 Then 
            Text 0,90, RoundDown(parasaika/40)+"S"
        Else
            Text 0,90,"----"
        EndIf
        JuoksunAika+1
        If KeyHit(CbKeyUp) And Odotus=0 And Metrit<20 Then
            sentit+10
            Odotus+1
            vauhti+15
        EndIf
        If odotus>0 Then
            odotus=0
        EndIf
        If Vauhti>1 Then
            Vauhti-2
        EndIf
        If Vauhti>30 And (JuoksunAika Mod 20)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>90 And (JuoksunAika Mod 40)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>120 And (JuoksunAika Mod 60)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>150 And (JuoksunAika Mod 70)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>180 And (JuoksunAika Mod 70)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>210 And (JuoksunAika Mod 75)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        If Vauhti>240 And (JuoksunAika Mod 75)=0 Then
            suppa.super=New(Super)
            suppa\vauhtiVi=CloneObject(vauhtiviiva)
            PositionObject suppa\vauhtivi, Rand(-140,138),310
            RotateObject suppa\vauhtivi, 270
        EndIf
        For suppa.super = Each super
            MoveObject suppa\vauhtivi, 12
            If ObjectY(Suppa\vauhtivi)<-170 Then
                DeleteObject suppa\vauhtivi
                Delete suppa
            EndIf
        Next suppa
        If sentit=100 Then
            sentit=0
            Metrit+1
        EndIf
        If Metrit=10 Then
            Kohta=3
            vauhti=0
        EndIf
    EndIf
    If Kohta=3 Then
        Color CbWhite
        Text 0,0,"Tuloksesi ON "+RoundDown(JuoksunAika/40)+" sekunttia!"
        Text 0,15, "Paina spacea jatkaaksesi!"
        For suppa.super = Each super
            DeleteObject suppa\vauhtivi
            Delete suppa
        Next suppa
        If KeyHit(cbkeyspace) Then
            If JuoksunAika<parasaika Then
                parasaika=JuoksunAika
            EndIf
            Gosub savegame
            Kohta=0
        EndIf
    EndIf
    If Kohta=4
        Aika+1
        Color CbGreen 
        Box 0,150,400,150
        Color CbOrange
        Box 0,190,50,20
        Color CbBlue
        Box 0,0,400,150
        Color CbRed
        Circle X,Y,12
        Text 0,0, "Kulma:"+Kulmaa
        Text 0,15, "Voima:"+Voimaa
        Text 0,30, "Paras:"
        If paraskeihäs>1 Then 
            Text 50,30, RoundUp(paraskeihäs)+"M"
        Else
            Text 50,30,"----"
        EndIf
        Color CbRed
        Box 80,1,Kulmaa,13
        Box 80,16,Voimaa,13
        Color CbBlack
        Box 79,0,92,15,0
        Box 79,15,102,15,0
        If KeyHit(CbKeySpace) And KulmaAlkaa=0 Then
            KulmaAlkaa=1
        EndIf
        If KulmaAlkaa=1 And KeyDown(CbKeySpace)=0 And Odotus<1 Then
            kulmaV=1
            odotus+1
        EndIf
        If KeyDown(CbKeySpace) And Kulma<90 And KulmaV=0 And KulmaAlkaa=1 And kulmakääntyy=0  Then
            Kulma+1
            If kulma=90 Then
                KulmaKääntyy=1
            EndIf
        EndIf
        If KeyDown(CbKeySpace) And KulmaKääntyy=1 And KulmaV=0 And KulmaAlkaa=1 Then
            kulma-1
            If kulma=10 Then
                KulmaV=1
            EndIf
        EndIf
        If KeyHit(CbKeySpace) And VoimaAlkaa=0 And Odotus=1 Then
            VoimaAlkaa=1
        EndIf
        If KeyDown(CbKeySpace) And voima<100 And voimaV=0 And voimaAlkaa=1 And voimakääntyy=0 Then
            Voima+1
            If voima=100 Then
                voimaKääntyy=1
            EndIf
        EndIf
        If KeyDown(CbKeySpace) And voimaV=0 And voimaAlkaa=1 And voimakääntyy=1 Then
            Voima-1
            If voima=0 Then
                VoimaV=1
            EndIf
        EndIf
        If VoimaAlkaa=1 And KeyDown(CbKeySpace)=0 And Odotus<20 Then
            voimaV=1
            odotus+1
        EndIf
        If X<40 And (Aika Mod 5)=0 And KulmaV=1 And VoimaV=1 And Odotus=20 Then
            X+1
        EndIf
        If X>38 And heittänyt=0 Then
            ShowObject keihä,ON
            PositionObject Keihä,X-200,Y-225
            RotateObject keihä,Kulma
            heittänyt=1
        EndIf
        If heittänyt=0 Then
            kulmaa=kulma
            voimaa=voima
        EndIf
        If heittänyt=1 Then
            If kulma>29 And Voima>15 Then
                If kulma>80 Then 
                    voima-1
                EndIf
                If kulma>30 Then
                    voima-1
                EndIf
            EndIf
            If Kulma<30 And Voima<150 Then
                voima+2
            EndIf
            MoveObject keihä,RoundUp(voima/15)
            If kulma<90 Then
                TurnObject keihä,-1
                Kulma-1
                If kulma<75 Then
                    TurnObject keihä,-1
                    Kulma-1
                    If kulma<60 Then
                        TurnObject keihä,-1
                        Kulma-1
                        If kulma<45 Then
                            Kulma-1
                            If kulma<30 Then
                                kulma-1
                            EndIf
                        EndIf
                    EndIf
                EndIf
            EndIf
            If ObjectY(keihä)<(Y-227) Then
                heittänyt=2
            EndIf
            If Heittänyt=2 Then
                keihääntulos=RoundUp((Distance(X-200,ObjectY(keihä),ObjectX(keihä),ObjectY(keihä))/3))
                Kohta=5
            EndIf
        EndIf        
    EndIf
    If Kohta=5 Then
        Color CbWhite
        Text 0,0,"Tuloksesi ON "+RoundUp(keihääntulos)+" metriä!"
        Text 0,15, "Paina spacea jatkaaksesi!"
        ShowObject keihä,OFF
        If KeyHit(cbkeyspace) Then
            If keihääntulos>paraskeihäs Then
                paraskeihäs=keihääntulos
            EndIf
            Gosub savegame
            Kohta=0
        EndIf
    EndIf
DrawScreen
Forever 

savegame:    
    lataus=OpenToEdit("Media\Tulokset.dat")
        WriteInt lataus,parasaika
        WriteInt lataus,paraskeihäs
    CloseFile lataus 
Return

LoadGame:
    lataus=OpenToEdit("Media\Tulokset.dat")
        parasaika=ReadInt(lataus)
        paraskeihäs=ReadInt(lataus)
    CloseFile lataus
Return 
Oli tylsää joten tein "Välkkyvä ruutu" ohjelman:

Code: Select all

ukkeli=MakeImage(27,27)
DrawToImage ukkeli
    Color CbBlue
    Box 0,0,9,9
    Color CbGreen
    Box 9,9,9,9
    Color CbYellow
    Box 9,0,9,9
    Color CbRed
    Box 0,9,9,9
    Color CbPurple
    Box 18,0,9,9
    Color CbCyan
    Box 18,9,9,9
    Color CbOrange
    Box 18,18,9,9
    Color CbPink
    Box 0,18,9,9
    Color CbBlackSkin
    Box 9,18,9,9
DrawToScreen
hemmo=MakeObject(360)
PaintObject hemmo,-ukkeli
ShowObject hemmo,OFF

Type ukot
    Field ukko
EndType

For i = 1 To 100
    jätkät.ukot=New(ukot)
    jätkät\ukko=CloneObject(hemmo)
    PositionObject jätkät\ukko, Rand(-199,199),Rand(-149,149)
    RotateObject jätkät\ukko, Rand(0,359)
Next i

FrameLimit 60

Repeat
Color Rand(0,255),Rand(0,255),Rand(0,255)
Box 0,0,400,300
For i = 1 To 25
    Color Rand(0,255),Rand(0,255),Rand(0,255)
    Box Rand(0,400),Rand(0,300),Rand(0,400),Rand(0,300)
Next i
For jätkät.ukot = Each ukot
    MoveObject jätkät\ukko,1,0
    TurnObject jätkät\Ukko,Rand(0,359)
    If ObjectX(jätkät\ukko)>200 Then PositionObject jätkät\ukko,199,ObjectY(jätkät\ukko)
    If ObjectX(jätkät\ukko)<-200 Then PositionObject jätkät\ukko,-199,ObjectY(jätkät\ukko)
    If ObjectY(jätkät\ukko)<-150 Then PositionObject jätkät\ukko,ObjectX(jätkät\ukko),-149
    If ObjectY(jätkät\ukko)>150 Then PositionObject jätkät\ukko,ObjectX(jätkät\ukko),149
Next jätkät
DrawScreen
Forever 

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Pikku pelit

Post by Wingman » Sat Feb 20, 2010 1:24 pm

teinpäs pari pikkupeliä, ensimmäisessä väistellään pallolla viivoja, ja toisessa kerätään kaverin kanssa kilpaa kolikoita
enemmittä mutinoitta:
Laserdodge v1.4.rar
(586.93 KiB) Downloaded 89 times
running.rar
(598.35 KiB) Downloaded 92 times
- - - -

DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Pikku pelit

Post by DatsuniG » Sat Feb 20, 2010 4:31 pm

Olipas tylsää ja koodailin (huonon) Asteroids kloonin piirtokomennoilla. Ja kiitokset Spuntelle funktiosta LineSegIsect().

Code: Select all

Global gReload as integer, gX As Float, gY As Float, gSpeed As Float, gAngle As Float, gScore As Integer
gX = 200
gY = 150
taim = 3000
Type BULLETS
    Field x As Float
    Field y As Float
    Field angle As Float
EndType

Type ASTEROIDS
    Field x As Float
    Field y As Float
    Field Radius As Float
    Field angle As Float
    Field rotateangle As Float
    Field angles As Integer
    Field AnglePositions
    Field Rotation As Integer
EndType

For i = 1 To i + 1
    SetWindow "Score: " + gScore
    If Timer() - taimer > taim Then
        taim = max(200,taim - 25)
        taimer = Timer()
        If Rand(1) Then
            xx = Rand(-70,ScreenWidth() + 70)
            If Rand(1) Then yy = -70 Else yy = ScreenHeight() + 70
        Else
            yy = Rand(-70,ScreenHeight() + 70)
            If Rand(1) Then xx = -70 Else xx = Screenwidth() + 70
        EndIf
        SpawnAsteroid(xx,yy,GetAngle(xx,yy,gX,gY) + Rand(-20,20),Rand(20,35))
    EndIf
    If KeyHit(cbKeySpace) And Timer() - gReload > 500 Then Shoot() : gReload = Timer()
        DrawShip()
    Updateship()
    UpdateBullets()
    UpdateAsteroids()
    DrawScreen
Next i

Function UpdateShip()
    If UpKey() Then gSpeed = Min(gSpeed + 0.05,4) Else gSpeed = CurveValue(0,gspeed,30)  'Max(0,gSpeed - 0.05)
    If outofscreen(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15) Then gSpeed = -gSpeed
    gAngle = WrapAngle(gAngle + gSpeed * (LeftKey() - RightKey()))
    gX = gX + Cos(gAngle) * gSpeed
    gY = gY - Sin(gAngle) * gSpeed
    For asteroid.ASTEROIDS = Each ASTEROIDS
        For i = 0 To asteroid\angles - 1
            If i = asteroid\angles - 1 Then
                If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
            Else
                If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                If LineSegIsect(gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
            EndIf
        Next i
    Next asteroid 
EndFunction

Function DrawShip()
    Line gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15
    Line gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15
    Line gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8
    Line gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8
EndFunction

Function Shoot()
    bullet.BULLETS = New(BULLETS)
    bullet\x = gX + Cos(gAngle) * 15
    bullet\y = gY - Sin(gAngle) * 15
    bullet\angle = gAngle
EndFunction

Function UpdateBullets()
    For bullet.BULLETS = Each BULLETS
        bullet\x = bullet\x + Cos(bullet\angle) * 1.5
        bullet\y = bullet\y - Sin(bullet\angle) * 1.5
        Line bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2
        For asteroid.ASTEROIDS = Each ASTEROIDS
        For i = 0 To asteroid\angles - 1
            If i = asteroid\angles - 1 Then
                If LineSegIsect(asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2) Then
                    rad = asteroid\radius / 2
                    x = asteroid\x
                    y = asteroid\y
                    ang = asteroid\angle
                    Delete asteroid
                    If rad > 5 Then
                        For a = 0 To 1
                            SpawnAsteroid(x,y,ang + a * 180 + Rand(-30,30),rad)
                        Next a
                    EndIf
                    gScore + 100
                    Delete bullet
                    Exit
                EndIf
            Else
                If LineSegIsect(bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then
                    rad = asteroid\radius / 2
                    x = asteroid\x
                    y = asteroid\y
                    ang = asteroid\angle
                    Delete asteroid
                    If rad > 5 Then
                        For a = 0 To 1
                            SpawnAsteroid(x,y,ang + a * 180 + Rand(-30,30),rad)
                        Next a
                    EndIf
                gScore + 100
                Delete bullet
                Exit
                EndIf
            EndIf
        Next i
        Next asteroid
        If outofscreen(bullet\x,bullet\y) Then Delete bullet
    Next bullet
EndFunction

Function SpawnAsteroid(x As Float,y As Float,angle As Float,radius As Float)
    asteroid.ASTEROIDS = New(ASTEROIDS)
    asteroid\x = x
    asteroid\y = y
    asteroid\rotation = 1 - Rand(1) * 2
    asteroid\angle = angle
    asteroid\angles = Rand(5,12)
    asteroid\radius = radius
    asteroid\anglepositions = MakeMEMBlock(asteroid\angles * 4)
    For i = 0 To asteroid\angles - 1
        tmp = tmp + rand(360 / asteroid\angles / 4,360 / asteroid\angles * 1.5)
        PokeInt asteroid\anglepositions, i * 4, tmp
    Next i
EndFunction

Function UpdateAsteroids()
    For asteroid.ASTEROIDS = Each ASTEROIDS
        asteroid\x = asteroid\x + Cos(asteroid\angle) * 0.7
        asteroid\y = asteroid\y - Sin(asteroid\angle) * 0.7
        asteroid\rotateangle = wrapangle(asteroid\rotateangle + asteroid\rotation)
        For i = 0 To asteroid\angles - 1
            If i = asteroid\angles - 1 Then
                Line asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius
            Else
                Line asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius
            EndIf
        Next i
        If asteroid\x < -75 Or asteroid\x > ScreenWidth() + 75 Or asteroid\y < -75 Or asteroid\y > ScreenHeight() + 75 Then Delete asteroid
    Next asteroid
EndFunction

Function Outofscreen(xx As Float,yy As Float)
        Return Not(Not((xx > ScreenWidth()) + (xx < 0) + (yy > ScreenHeight()) + (yy < 0)))
EndFunction

Function LineSegIsect(ax#, ay#, bx#, by#, cx#, cy#, dx#, dy#)
   Return (((bx-ax)*(cy-ay)-(by-ay)*(cx-ax))*((bx-ax)*(dy-ay)-(by-ay)*(dx-ax)) < 0)(((dy-cy)*(cx-ax)-(dx-cx)*(cy-ay))*((dx-cx)*(by-cy)-(dy-cy)*(bx-cx)) < 0)
EndFunction
EDIT:

@VesQ: En jaksanut panostaa aluksen liikkumiseen : )

Edit2: Hiirellä ohjattava versio:

Code: Select all

    Global gAmount, gReload as Integer, gX As Float, gY As Float, gSpeed As Float, gAngle As Float, gScore As Integer
    Const MAXASTEROIDS = 30
    gX = 200
    gY = 150
    taim = 2000
    ShowMouse off
    Type BULLETS
        Field x As Float
        Field y As Float
        Field angle As Float
    EndType

    Type ASTEROIDS
        Field x As Float
        Field y As Float
        Field Radius As Float
        Field angle As Float
        Field rotateangle As Float
        Field angles As Integer
        Field AnglePositions
        Field Rotation As Integer
    EndType
    For i = 1 To i + 1
        SetWindow "Pisteet: " + gScore + " - Asteroideja: " + gAmount
        If Timer() - taimer > taim And gAmount < MAXASTEROIDS Then
            taim = max(500,taim - 50)
            taimer = Timer()
            If Rand(1) Then
                xx = Rand(-70,ScreenWidth() + 70)
                If Rand(1) Then yy = -70 Else yy = ScreenHeight() + 70
            Else
                yy = Rand(-70,ScreenHeight() + 70)
                If Rand(1) Then xx = -70 Else xx = Screenwidth() + 70
            EndIf
            SpawnAsteroid(xx,yy,GetAngle(xx,yy,gX,gY) + Rand(-20,20),Rand(20,35))
        EndIf
        If MouseDown(1) And Timer() - gReload > 1000 Then Shoot() : gReload = Timer()
        Crosshair()
        DrawShip()
        Updateship()
        UpdateBullets()
        UpdateAsteroids()
        DrawScreen
    Next i

    Function Crosshair()
        Line MouseX(), MouseY() - 7, MouseX(), MouseY() - 3
        Line MouseX(), MouseY() + 7, MouseX(), MouseY() + 3
        Line MouseX() - 7, MouseY(), MouseX() - 3, MouseY()
        Line MouseX() + 7, MouseY(), MouseX() + 3, MouseY()
    EndFunction

    Function UpdateShip()
        gAngle = GetAngle(gX,gY,MouseX(),MouseY())

        velx# = velx# + (MouseX()-gX)*0.05
        vely# = vely# + (MouseY()-gY)*0.05
       
        velx# = velx# + (-velx#)*0.05
        vely# = vely# + (-vely#)*0.05

        gX = gX + velx# / 3
        gY = gY + vely# / 3
        If outofscreen(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15) Then gSpeed = -gSpeed
        For asteroid.ASTEROIDS = Each ASTEROIDS
            For i = 0 To asteroid\angles - 1
                If i = asteroid\angles - 1 Then
                    If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                Else
                    If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                    If LineSegIsect(gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then MakeError "Hävisit! Sait " + gScore + " pistettä!"
                EndIf
            Next i
        Next asteroid
    EndFunction

    Function DrawShip()
        Line gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15
        Line gx + Cos(gangle) * 15, gy - Sin(gangle) * 15, gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15
        Line gx + Cos(gangle + 140) * 15, gy - Sin(gangle + 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8
        Line gx + Cos(gangle - 140) * 15, gy - Sin(gangle - 140) * 15, gx + Cos(gangle - 180) * 8, gy - Sin(gangle - 180) * 8
    EndFunction

    Function Shoot()
        bullet.BULLETS = New(BULLETS)
        bullet\x = gX + Cos(gAngle) * 15
        bullet\y = gY - Sin(gAngle) * 15
        bullet\angle = gAngle
    EndFunction

    Function UpdateBullets()
        For bullet.BULLETS = Each BULLETS
            Line bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2
            For u = 0 To 2
            bullet\x = bullet\x + Cos(bullet\angle)
            bullet\y = bullet\y - Sin(bullet\angle)
            For asteroid.ASTEROIDS = Each ASTEROIDS
                For i = 0 To asteroid\angles - 1
                    If i = asteroid\angles - 1 Then
                        If LineSegIsect(asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2) Then
                            rad = asteroid\radius / 2
                            x = asteroid\x
                            y = asteroid\y
                            ang = asteroid\angle
                            Delete asteroid
                            If rad > 5 Then
                                For a = 0 To 1
                                    SpawnAsteroid(x,y,ang + a * 180 + Rand(-30,30),rad)
                                Next a
                            EndIf
                            gScore + 100
                            gAmount - 1
                            Delete bullet
                            Goto skip
                        EndIf
                    Else
                        If LineSegIsect(bullet\x, bullet\y, bullet\x + Cos(bullet\angle) * 2, bullet\y - Sin(bullet\angle) * 2, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius) Then
                            rad = asteroid\radius / 2
                            x = asteroid\x
                            y = asteroid\y
                            ang = asteroid\angle
                            Delete asteroid
                            If rad > 5 Then
                                For a = 0 To 1
                                    SpawnAsteroid(x,y,ang + a * 180 + Rand(-30,30),rad)
                                Next a
                            EndIf
                        gScore + 100
                        gAmount - 1
                        Delete bullet
                        Goto skip
                        EndIf
                    EndIf
                Next i
                Next asteroid
            Next u
            If outofscreen(bullet\x,bullet\y) Then Delete bullet
            skip:
        Next bullet
    EndFunction

    Function SpawnAsteroid(x As Float,y As Float,angle As Float,radius As Float)
        asteroid.ASTEROIDS = New(ASTEROIDS)
        asteroid\x = x
        asteroid\y = y
        asteroid\rotation = 1 - Rand(1) * 2
        asteroid\angle = angle
        asteroid\angles = Rand(5,12)
        asteroid\radius = radius
        asteroid\anglepositions = MakeMEMBlock(asteroid\angles * 4)
        For i = 0 To asteroid\angles - 1
            tmp = tmp + rand(360 / asteroid\angles / 4,360 / asteroid\angles * 1.5)
            PokeInt asteroid\anglepositions, i * 4, tmp
        Next i
        gAmount + 1
    EndFunction

    Function UpdateAsteroids()
        For asteroid.ASTEROIDS = Each ASTEROIDS
            asteroid\x = asteroid\x + Cos(asteroid\angle) * 0.7
            asteroid\y = asteroid\y - Sin(asteroid\angle) * 0.7
            asteroid\rotateangle = wrapangle(asteroid\rotateangle + asteroid\rotation)
            For i = 0 To asteroid\angles - 1
                If i = asteroid\angles - 1 Then
                    Line asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, 0)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius
                Else
                    Line asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, i * 4)) * asteroid\radius, asteroid\x + Cos(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius, asteroid\y - Sin(asteroid\rotateangle + PeekInt(asteroid\anglepositions, (i + 1) * 4)) * asteroid\radius
                EndIf
            Next i
            If asteroid\x < -75 Or asteroid\x > ScreenWidth() + 75 Or asteroid\y < -75 Or asteroid\y > ScreenHeight() + 75 Then Delete asteroid : gAmount - 1
        Next asteroid
    EndFunction

    Function Outofscreen(xx As Float,yy As Float)
            Return Not(Not((xx > ScreenWidth()) + (xx < 0) + (yy > ScreenHeight()) + (yy < 0)))
    EndFunction

    Function LineSegIsect(ax#, ay#, bx#, by#, cx#, cy#, dx#, dy#)
       Return (((bx-ax)*(cy-ay)-(by-ay)*(cx-ax))*((bx-ax)*(dy-ay)-(by-ay)*(dx-ax)) < 0)(((dy-cy)*(cx-ax)-(dx-cx)*(cy-ay))*((dx-cx)*(by-cy)-(dy-cy)*(bx-cx)) < 0)
    EndFunction
[/edit]
Last edited by DatsuniG on Sun Feb 21, 2010 1:21 pm, edited 3 times in total.
Hengität nyt manuaalisesti.

User avatar
valscion
Moderator
Moderator
Posts: 1588
Joined: Thu Dec 06, 2007 8:46 pm
Location: Espoo
Contact:

Re: Pikku pelit

Post by valscion » Sat Feb 20, 2010 5:55 pm

DatsuniG wrote:Olipas tylsää ja koodailin (huonon) Asteroids kloonin piirtokomennoilla. Ja kiitokset Spuntelle funktiosta LineSegIsect().
Muuten ihan hyvä, mutta eikös tuossa periaatteessa pelata avaruudessa? Ja mielestäni silloin ei kitka (tai joku muu voima) hidasta aluksen liikettä ja aluksen pitäisi pystyä kääntymään jopa paikallaan. Ihmeellistä, kun avaruusalus liikkuu melkein kuin auto.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com

User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 11:50 pm

Re: Pikku pelit

Post by Knoy » Sat Feb 20, 2010 9:45 pm

DatsuniG tuohon peliisi kannattaisi laittaa maksimi asteroidi määrä. Pelissä on hieman hankala tuhota kaikki asteroidit tuolla aseen nopeudella.

Tein kömpelön effektin tämä on oikeastaan vaan puoliksi peli. Ainakin se näyttää kauniilta... Siistiltä... tai jotain sellasta.

Code: Select all

SCREEN 800,600,16,0
SetWindow "Effect, By Knoy"
Type Effektit
    Field Effekti
    Field NewAngle
    Field angle
EndType

CO=1
LOAD=1

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 1"
Color Cbwhite
Text 0,0,"Loading Image 1"
DrawScreen
Ef1=MakeImage(15,3)
DrawToImage Ef1
    Color 105,0,0
    Box 0,0,13,3
    Color 255,0,0
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 2."
Color Cbwhite
Text 0,0,"Loading Image 2."
DrawScreen
Ef2=MakeImage(15,3)
DrawToImage Ef2
    Color 0,105,0
    Box 0,0,13,3
    Color 0,255,0
    Box 1,1,15,1
DrawToScreen  

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 3.."
Color Cbwhite
Text 0,0,"Loading Image 3.."
DrawScreen
Ef3=MakeImage(15,3)
DrawToImage Ef3
    Color 0,0,105
    Box 0,0,13,3
    Color 0,0,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 4..."
Color Cbwhite
Text 0,0,"Loading Image 4..."
DrawScreen
Ef4=MakeImage(15,3)
DrawToImage Ef4
    Color 0,105,105
    Box 0,0,13,3
    Color 0,255,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 5...."
Color Cbwhite
Text 0,0,"Loading Image 5...."
DrawScreen
Ef5=MakeImage(15,3)
DrawToImage Ef5
    Color 105,105,105
    Box 0,0,13,3
    Color 255,255,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 6....."
Color Cbwhite
Text 0,0,"Loading Image 6....."
DrawScreen
Ef6=MakeImage(15,3)
DrawToImage Ef6
    Color 105,105,0
    Box 0,0,13,3
    Color 255,255,0
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 7......"
Color Cbwhite
Text 0,0,"Loading Image 7......"
DrawScreen
Ef7=MakeImage(15,3)
DrawToImage Ef7
    Color 105,0,105
    Box 0,0,13,3
    Color 255,0,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 8......."
Color Cbwhite
Text 0,0,"Loading Image 8......."
DrawScreen
Kursori=MakeImage(15,15)
DrawToImage kursori
    Color 55,55,55
    Line 4,5,11,5
    Line 4,9,11,9
    Line 5,4,5,11
    Line 9,4,9,11
    Color 105,105,105
    Line 2,6,13,6
    Line 2,8,13,8
    Line 6,2,6,13
    Line 8,2,8,13
    Color 255,255,255
    Line 0,7,15,7
    Line 7,0,7,15
DrawToScreen

ShowMouse OFF

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 1........"
Color Cbwhite
Text 0,0,"Loading Object 1........"
DrawScreen
Eff1=MakeObject(180)
PaintObject Eff1,-Ef1
ShowObject Eff1,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 2........."
Color Cbwhite
Text 0,0,"Loading Object 2........."
DrawScreen
Eff2=MakeObject(180)
PaintObject Eff2,-Ef2
ShowObject Eff2,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 3.........."
Color Cbwhite
Text 0,0,"Loading Object 3.........."
DrawScreen
Eff3=MakeObject(180)
PaintObject Eff3,-Ef3
ShowObject Eff3,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 4..........."
Color Cbwhite
Text 0,0,"Loading Object 4..........."
DrawScreen
Eff4=MakeObject(180)
PaintObject Eff4,-Ef4
ShowObject Eff4,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 5............"
Color Cbwhite
Text 0,0,"Loading Object 5............"
DrawScreen
Eff5=MakeObject(180)
PaintObject Eff5,-Ef5
ShowObject Eff5,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 6............."
Color Cbwhite
Text 0,0,"Loading Object 6............."
DrawScreen
Eff6=MakeObject(180)
PaintObject Eff6,-Ef6
ShowObject Eff6,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 7.............."
Color Cbwhite
Text 0,0,"Loading Object 7.............."
DrawScreen
Eff7=MakeObject(180)
PaintObject Eff7,-Ef7
ShowObject Eff7,OFF 

Hiiri=MakeObject()
PaintObject Hiiri,-kursori

For i = 1 To 200
    DrawGame
    Objects+1
    LOAD+1
    Color 255-LOAD,255-LOAD,255-LOAD
    Box 293,0,LOAD,27
    Color CbDark
    Box 292,-1,217,28,0
    Text 2,2,"Creating Object "+CO+COO$
    Color Cbwhite
    Text 0,0,"Creating Object "+CO+COO$
    DrawScreen
    CO+1
    COO$=String(".",RoundDown((CO-1)/15))
    tikut.effektit=New(Effektit)
    Random=Rand(0,6)
        If Random=0 Then tikut\effekti=CloneObject(Eff1)
        If Random=1 Then tikut\effekti=CloneObject(Eff2)
        If Random=2 Then tikut\effekti=CloneObject(Eff3)
        If Random=3 Then tikut\effekti=CloneObject(Eff4)
        If Random=4 Then tikut\effekti=CloneObject(Eff5)
        If Random=5 Then tikut\effekti=CloneObject(Eff6)
        If Random=6 Then tikut\effekti=CloneObject(Eff7)
    MoveObject Tikut\effekti,Rand(-399,399),Rand(-299,299)
    RotateObject tikut\effekti,Rand(0,359)
Next i

Repeat
    If KulmaNopeus=OFF Then
        If KeyHit(CbKeyReturn) And Odotus=0 Then
            KulmaNopeus=ON
            Locate 0,60
            Odotus=6
        EndIf
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Text 2,62,"Press space to change objects turn speed."
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Text 0,60,"Press space to change objects turn speed."
    Else
        Locate 2,62
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Noop=Input("New object turn speed:")
        Locate 0,60
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Noop=Input("New object turn speed:")
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Text 0,75,"Max turnspeed is 100 and minium is 1"
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Text 0,75,"Max turnspeed is 100 and minium is 1"
        If KeyHit(CbKeyReturn) And Odotus=0 Then
            CloseInput
            KulmaNopeus=OFF
            Odotus=6
        EndIf
    EndIf
    Color CbWhite
    DrawGame
    If RightKey() Then MoveObject Hiiri,7,0
    If LeftKey() Then MoveObject Hiiri,-7,0
    If UpKey() Then MoveObject Hiiri,0,-7
    If DownKey() Then MoveObject Hiiri,0,7
    If ObjectX(hiiri)>400 Then PositionObject Hiiri,-399,ObjectY(Hiiri)
    If ObjectX(hiiri)<-400 Then PositionObject Hiiri,399,ObjectY(Hiiri)
    If ObjectY(hiiri)>300 Then PositionObject Hiiri,ObjectX(Hiiri),-299
    If ObjectY(hiiri)<-300 Then PositionObject Hiiri,ObjectX(Hiiri),299
    If KeyDown(CbKeySpace) And KulmaNopeus=OFF Then Speed=5 Else Speed=0
    If KeyDown(CbKeyLControl) And KulmaNopeus=OFF Then Turn=1 Else Turn=0
    If KeyDown(CbKeyLShift) And KulmaNopeus=OFF And Objects<300 Then
        Odotus=3
        Objects+1
        tikut.effektit=New(Effektit)
            Random=Rand(0,6)
                If Random=0 Then tikut\effekti=CloneObject(Eff1)
                If Random=1 Then tikut\effekti=CloneObject(Eff2)
                If Random=2 Then tikut\effekti=CloneObject(Eff3)
                If Random=3 Then tikut\effekti=CloneObject(Eff4)
                If Random=4 Then tikut\effekti=CloneObject(Eff5)
                If Random=5 Then tikut\effekti=CloneObject(Eff6)
                If Random=6 Then tikut\effekti=CloneObject(Eff7)
                PositionObject Tikut\effekti,ObjectX(hiiri)+Rand(-100,100),ObjectY(hiiri)+Rand(-100,100)
            RotateObject tikut\effekti,Rand(0,359)
    EndIf
    If Odotus>0 Then Odotus-1
    For tikut.effektit = Each effektit
        If turn=1 Then
            tikut\newangle=GetAngle2(tikut\effekti,hiiri)
            tikut\angle=CurveAngle(tikut\newangle,tikut\angle,(Noop+Rand(-10,10)))
            RotateObject tikut\effekti,(tikut\angle+Rand(-1,1))
        EndIf
        'TurnObject tikut\effekti,Rand(-1,1)
        tikut\angle=ObjectAngle(tikut\effekti)
        MoveObject tikut\effekti,(Float(Distance2(tikut\effekti,hiiri))/100)+Rand(0,3)+Speed
        If ObjectX(tikut\effekti)>410 Then PositionObject tikut\effekti,-409,ObjectY(tikut\effekti)
        If ObjectX(tikut\effekti)<-410 Then PositionObject tikut\effekti,409,ObjectY(tikut\effekti)
        If ObjectY(tikut\effekti)>310 Then PositionObject tikut\effekti,ObjectX(tikut\effekti),-309
        If ObjectY(tikut\effekti)<-310 Then PositionObject tikut\effekti,ObjectX(tikut\effekti),309
        If KeyDown(CbKeyZ) And KulmaNopeus=OFF And Odotus=0 And Objects>1 Then
            Odotus=3
            Objects-1
            DeleteObject tikut\effekti
        Delete tikut
    EndIf
    Next tikut
    Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
    Text 2,2, "Use left control to draw objects toward mark."
    Text 2,17, "Use space button to increase object speed."
    Text 2,32, "Use left shift to create new object and Z button delete objects."
    Text 2,47, "Objects:"+Objects+"/300"
    Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
    Text 0,0, "Use left control to draw objects toward mark."
    Text 0,15, "Use space button to increase object speed."
    Text 0,30, "Use left shift to create new object and Z button delete objects."
    Text 0,45, "Objects:"+Objects+"/300"
DrawScreen
Forever
Vauhtiviiva versio:

Code: Select all

SCREEN 800,600,16,0
SetWindow "Effect, By Knoy"
Type Effektit
    Field Effekti
    Field NewAngle
    Field angle
    Field EffX1
    Field EffX2
    Field EffX3    
    Field EffX4
    Field EffX5
    Field EffY1
    Field EffY2
    Field EffY3
    Field EffY4
    Field EffY5
EndType

CO=1
LOAD=1

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 1"
Color Cbwhite
Text 0,0,"Loading Image 1"
DrawScreen
Ef1=MakeImage(15,3)
DrawToImage Ef1
    Color 105,0,0
    Box 0,0,13,3
    Color 255,0,0
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 2."
Color Cbwhite
Text 0,0,"Loading Image 2."
DrawScreen
Ef2=MakeImage(15,3)
DrawToImage Ef2
    Color 0,105,0
    Box 0,0,13,3
    Color 0,255,0
    Box 1,1,15,1
DrawToScreen  

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 3.."
Color Cbwhite
Text 0,0,"Loading Image 3.."
DrawScreen
Ef3=MakeImage(15,3)
DrawToImage Ef3
    Color 0,0,105
    Box 0,0,13,3
    Color 0,0,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 4..."
Color Cbwhite
Text 0,0,"Loading Image 4..."
DrawScreen
Ef4=MakeImage(15,3)
DrawToImage Ef4
    Color 0,105,105
    Box 0,0,13,3
    Color 0,255,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 5...."
Color Cbwhite
Text 0,0,"Loading Image 5...."
DrawScreen
Ef5=MakeImage(15,3)
DrawToImage Ef5
    Color 105,105,105
    Box 0,0,13,3
    Color 255,255,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 6....."
Color Cbwhite
Text 0,0,"Loading Image 6....."
DrawScreen
Ef6=MakeImage(15,3)
DrawToImage Ef6
    Color 105,105,0
    Box 0,0,13,3
    Color 255,255,0
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 7......"
Color Cbwhite
Text 0,0,"Loading Image 7......"
DrawScreen
Ef7=MakeImage(15,3)
DrawToImage Ef7
    Color 105,0,105
    Box 0,0,13,3
    Color 255,0,255
    Box 1,1,15,1
DrawToScreen 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Image 8......."
Color Cbwhite
Text 0,0,"Loading Image 8......."
DrawScreen
Kursori=MakeImage(15,15)
DrawToImage kursori
    Color 55,55,55
    Line 4,5,11,5
    Line 4,9,11,9
    Line 5,4,5,11
    Line 9,4,9,11
    Color 105,105,105
    Line 2,6,13,6
    Line 2,8,13,8
    Line 6,2,6,13
    Line 8,2,8,13
    Color 255,255,255
    Line 0,7,15,7
    Line 7,0,7,15
DrawToScreen

ShowMouse OFF

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 1........"
Color Cbwhite
Text 0,0,"Loading Object 1........"
DrawScreen
Eff1=MakeObject(180)
PaintObject Eff1,-Ef1
ShowObject Eff1,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 2........."
Color Cbwhite
Text 0,0,"Loading Object 2........."
DrawScreen
Eff2=MakeObject(180)
PaintObject Eff2,-Ef2
ShowObject Eff2,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 3.........."
Color Cbwhite
Text 0,0,"Loading Object 3.........."
DrawScreen
Eff3=MakeObject(180)
PaintObject Eff3,-Ef3
ShowObject Eff3,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 4..........."
Color Cbwhite
Text 0,0,"Loading Object 4..........."
DrawScreen
Eff4=MakeObject(180)
PaintObject Eff4,-Ef4
ShowObject Eff4,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 5............"
Color Cbwhite
Text 0,0,"Loading Object 5............"
DrawScreen
Eff5=MakeObject(180)
PaintObject Eff5,-Ef5
ShowObject Eff5,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 6............."
Color Cbwhite
Text 0,0,"Loading Object 6............."
DrawScreen
Eff6=MakeObject(180)
PaintObject Eff6,-Ef6
ShowObject Eff6,OFF 

LOAD+1
Color 255-LOAD,255-LOAD,255-LOAD
Box 293,0,LOAD,27
Color CbDark
Box 292,-1,217,28,0
Text 2,2,"Loading Object 7.............."
Color Cbwhite
Text 0,0,"Loading Object 7.............."
DrawScreen
Eff7=MakeObject(180)
PaintObject Eff7,-Ef7
ShowObject Eff7,OFF 

Hiiri=MakeObject()
PaintObject Hiiri,-kursori

For i = 1 To 200
    DrawGame
    Objects+1
    LOAD+1
    Color 255-LOAD,255-LOAD,255-LOAD
    Box 293,0,LOAD,27
    Color CbDark
    Box 292,-1,217,28,0
    Text 2,2,"Creating Object "+CO+COO$
    Color Cbwhite
    Text 0,0,"Creating Object "+CO+COO$
    DrawScreen
    CO+1
    COO$=String(".",RoundDown((CO-1)/15))
    tikut.effektit=New(Effektit)
    Random=Rand(0,6)
        If Random=0 Then tikut\effekti=CloneObject(Eff1)
        If Random=1 Then tikut\effekti=CloneObject(Eff2)
        If Random=2 Then tikut\effekti=CloneObject(Eff3)
        If Random=3 Then tikut\effekti=CloneObject(Eff4)
        If Random=4 Then tikut\effekti=CloneObject(Eff5)
        If Random=5 Then tikut\effekti=CloneObject(Eff6)
        If Random=6 Then tikut\effekti=CloneObject(Eff7)
    MoveObject Tikut\effekti,Rand(-399,399),Rand(-299,299)
    RotateObject tikut\effekti,Rand(0,359)
Next i

Repeat
    If KulmaNopeus=OFF Then
        If KeyHit(CbKeyReturn) And Odotus=0 Then
            KulmaNopeus=ON
            Locate 0,60
            Odotus=6
        EndIf
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Text 2,62,"Press space to change objects turn speed."
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Text 0,60,"Press space to change objects turn speed."
    Else
        Locate 2,62
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Noop=Input("New object turn speed:")
        Locate 0,60
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Noop=Input("New object turn speed:")
        Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
        Text 0,75,"Max turnspeed is 100 and minium is 1"
        Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
        Text 0,75,"Max turnspeed is 100 and minium is 1"
        If KeyHit(CbKeyReturn) And Odotus=0 Then
            CloseInput
            KulmaNopeus=OFF
            Odotus=6
        EndIf
    EndIf
    Color CbWhite
    If RightKey() Then MoveObject Hiiri,7,0
    If LeftKey() Then MoveObject Hiiri,-7,0
    If UpKey() Then MoveObject Hiiri,0,-7
    If DownKey() Then MoveObject Hiiri,0,7
    If ObjectX(hiiri)>400 Then PositionObject Hiiri,-399,ObjectY(Hiiri)
    If ObjectX(hiiri)<-400 Then PositionObject Hiiri,399,ObjectY(Hiiri)
    If ObjectY(hiiri)>300 Then PositionObject Hiiri,ObjectX(Hiiri),-299
    If ObjectY(hiiri)<-300 Then PositionObject Hiiri,ObjectX(Hiiri),299
    If KeyDown(CbKeySpace) And KulmaNopeus=OFF Then Speed=5 Else Speed=0
    If KeyDown(CbKeyLControl) And KulmaNopeus=OFF Then Turn=1 Else Turn=0
    If KeyDown(CbKeyLShift) And KulmaNopeus=OFF And Objects<300 Then
        Odotus=3
        Objects+1
        tikut.effektit=New(Effektit)
            Random=Rand(0,6)
                If Random=0 Then tikut\effekti=CloneObject(Eff1)
                If Random=1 Then tikut\effekti=CloneObject(Eff2)
                If Random=2 Then tikut\effekti=CloneObject(Eff3)
                If Random=3 Then tikut\effekti=CloneObject(Eff4)
                If Random=4 Then tikut\effekti=CloneObject(Eff5)
                If Random=5 Then tikut\effekti=CloneObject(Eff6)
                If Random=6 Then tikut\effekti=CloneObject(Eff7)
                PositionObject Tikut\effekti,ObjectX(hiiri)+Rand(-100,100),ObjectY(hiiri)+Rand(-100,100)
            RotateObject tikut\effekti,Rand(0,359)
    EndIf
    If Odotus>0 Then Odotus-1
    For tikut.effektit = Each effektit
        tikut\EffX5=tikut\EffX4
        tikut\EffY5=tikut\EffY4
        tikut\EffX4=tikut\EffX3
        tikut\EffY4=tikut\EffY3
        tikut\EffX3=tikut\EffX2
        tikut\EffY3=tikut\EffY2
        tikut\EffX2=tikut\EffX1
        tikut\EffY2=tikut\EffY1
        tikut\EffX1=ObjectX(tikut\effekti)
        tikut\EffY1=ObjectY(tikut\effekti)
        DrawToWorld ON,ON,ON
        If R=255 Then R=0 Else R+1
        If b=255 Then b=0 Else B+1
        If G=255 Then g=0 Else g+1
        Color r,b,g
        If Distance(tikut\EffX1,tikut\EffY1,tikut\EffX2,tikut\EffY2)<20 Then Line tikut\EffX1,tikut\EffY1,tikut\EffX2,tikut\EffY2
        Color r-Rand(-30,30),b-Rand(-30,30),g-Rand(-30,30)
        If Distance(tikut\EffX2,tikut\EffY2,tikut\EffX3,tikut\EffY3)<20 Then Line tikut\EffX2,tikut\EffY2,tikut\EffX3,tikut\EffY3
        Color r-Rand(-60,60),b-Rand(-60,60),g-Rand(-60,60)
        If Distance(tikut\EffX3,tikut\EffY3,tikut\EffX4,tikut\EffY4)<20 Then Line tikut\EffX3,tikut\EffY3,tikut\EffX4,tikut\EffY4
        Color r-Rand(-90,90),b-Rand(-90,90),g-Rand(-90,90)
        If Distance(tikut\EffX4,tikut\EffY4,tikut\EffX5,tikut\EffY5)<20 Then Line tikut\EffX4,tikut\EffY4,tikut\EffX5,tikut\EffY5
        If turn=1 Then
            tikut\newangle=GetAngle2(tikut\effekti,hiiri)
            tikut\angle=CurveAngle(tikut\newangle,tikut\angle,(Noop+Rand(-10,10)))
            RotateObject tikut\effekti,(tikut\angle+Rand(-1,1))
        EndIf
        'TurnObject tikut\effekti,Rand(-1,1)
        tikut\angle=ObjectAngle(tikut\effekti)
        MoveObject tikut\effekti,(Float(Distance2(tikut\effekti,hiiri))/100)+Rand(0,3)+Speed
        If ObjectX(tikut\effekti)>410 Then PositionObject tikut\effekti,-409,ObjectY(tikut\effekti)
        If ObjectX(tikut\effekti)<-410 Then PositionObject tikut\effekti,409,ObjectY(tikut\effekti)
        If ObjectY(tikut\effekti)>310 Then PositionObject tikut\effekti,ObjectX(tikut\effekti),-309
        If ObjectY(tikut\effekti)<-310 Then PositionObject tikut\effekti,ObjectX(tikut\effekti),309
        If KeyDown(CbKeyZ) And KulmaNopeus=OFF And Odotus=0 And Objects>1 Then
            Odotus=3
            Objects-1
            DeleteObject tikut\effekti
        Delete tikut
    EndIf
    Next tikut
    DrawToWorld OFF,OFF,OFF
    Color RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0)),RoundUp((Objects/2)+Rand(-15,0))
    Text 2,2, "Use left control to draw objects toward mark."
    Text 2,17, "Use space button to increase object speed."
    Text 2,32, "Use left shift to create new object and Z button delete objects."
    Text 2,47, "Objects:"+Objects+"/300"
    Color RoundUp((Objects/2)+105),RoundUp((Objects/2)+105),RoundUp((Objects/2)+105)
    Text 0,0, "Use left control to draw objects toward mark."
    Text 0,15, "Use space button to increase object speed."
    Text 0,30, "Use left shift to create new object and Z button delete objects."
    Text 0,45, "Objects:"+Objects+"/300"
DrawScreen
Forever

Edit1: ObjectX() oli vahingossa objectY()
Edit2: Kulman muuttumis nopeuden vaihto lisätty.
Edit3: FullScreen moodi
Edit4: Vauhtiviiva versio

User avatar
ukkeli
Active Member
Posts: 123
Joined: Thu Jan 28, 2010 10:01 pm

Re: Pikku pelit

Post by ukkeli » Wed Feb 24, 2010 7:03 pm

no teinpäs ihan pienen spacen
hakkaus pelin nauttikaa :D

Code: Select all

aika=10

pisteet=0

x=120

y=120

Text 120,120,"paina!"

Repeat

If KeyHit(cbkeyspace) Then pisteet+1 
If aika=0 Then MakeError "sait "+pisteet+" pistettä !!!"

If Timer() - aik > 1000 Then
aik=Timer()
aika-1
End If 

Text 20,20,"aika:"+aika

Text 40,40,"pisteet:"+pisteet

Box x,y,60,20, ON  

Color Rand(1,255),Rand(1,255),Rand(1,255) 

DrawScreen  

Forever 
kommentoikaa

edit: no tein toisen TOSI PIENEN pelin

Code: Select all

x=120
y=120
x2=200
y2=200
x3=100
y3=100
tark=0
aika=0

Repeat 

Text 20,20,"aika:"+aika
Text x,y,"#"
Text x2,y2,"!"
Text x3,y3,"?"

If LeftKey() Then x-1
If RightKey() Then x+1
If DownKey() Then y+1
If UpKey() Then y-1

If x=200 And y=200 Then 
tark+1 
y2=10000
x2=10000
End If

If x=100 And y=100 Then 
tark+1 
y3=10000
x3=10000
End If 

If tark=2 Then 
MakeError "voitit pelin ajassa"+aika
End If 

If Timer() - ai > 1000 Then 
ai=Timer()
aika+1
End If  

DrawScreen 

Forever 

kommentoikaa tästäkin
Last edited by ukkeli on Wed Feb 24, 2010 8:32 pm, edited 2 times in total.
...

User avatar
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Pikku pelit

Post by Viltzu » Wed Feb 24, 2010 7:31 pm

Ensinnäkin, koodia ei ole sisennetty.
Toiseksi, siis vaikka topic on "Pikku pelit", niin ehkäpä noin pieniä ei sentään tarvitse postata
Kolmanneksi, vilkkuvat värit voivat ottaa silmiin.

User avatar
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Pikku pelit

Post by Wingman » Wed Feb 24, 2010 7:33 pm

ukkeli wrote:no teinpäs ihan pienen spacen
hakkaus pelin nauttikaa :D

Code: Select all

aika=10

pisteet=0

x=120

y=120

Text 120,120,"paina!"

Repeat

If KeyHit(cbkeyspace) Then pisteet+1 
If aika=0 Then MakeError "sait "+pisteet+" pistettä !!!"

If Timer() - aik > 1000 Then
aik=Timer()
aika-1
End If 

Text 20,20,"aika:"+aika

Text 40,40,"pisteet:"+pisteet

Box x,y,60,20, ON  

Color Rand(1,255),Rand(1,255),Rand(1,255) 

DrawScreen  

Forever 
kommentoikaa
näpytin 53-58 kertaa, en nähnyt lopputulosta, koska error häipyy spacea painamalla. Ja mikä on sen laatikon tarkoitus?
- - - -

Post Reply