Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi »

Code: Select all

riveja=2

Dim kentta(riveja,riveja,3)
'kuva
'x
'y
'vapaako

ClsColor 56,30,30

kentta(0,0,1)=50
kentta(1,0,1)=80
kentta(2,0,1)=110

kentta(0,1,1)=50
kentta(1,1,1)=80
kentta(2,1,1)=110

kentta(0,2,1)=50
kentta(1,2,1)=80
kentta(2,2,1)=110

kentta(0,0,2)=50
kentta(1,0,2)=50
kentta(2,0,2)=50

kentta(0,1,2)=80
kentta(1,1,2)=80
kentta(2,1,2)=80

kentta(0,2,2)=110
kentta(1,2,2)=110
kentta(2,2,2)=110


DefaultMask ON,cbmagenta
tyhja=LoadImage("media\tyhja.png")
risti=LoadImage("media\risti.png")
nolla=LoadImage("media\nolla.png")



For s=0 To riveja
For g=0 To riveja

kentta(s,g,0)=tyhja

Next g
Next s


vuoro=1

hiiri=MakeImage(1,1)

Repeat
For s=0 To 2
For g=0 To 2

If kentta(s,g,3)=1 Then kentta(s,g,0)=risti
If kentta(s,g,3)=2 Then kentta(s,g,0)=nolla
DrawImage kentta(s,g,0),kentta(s,g,1),kentta(s,g,2)


If  ImagesOverlap(hiiri,MouseX(),MouseY(),kentta(s,g,0),kentta(s,g,1),kentta(s,g,2)) And MouseHit(1) Then

kentta(s,g,3)=vuoro

If vuoro=1 Then
 vuoro=2
Else
vuoro=1
EndIf
ClearMouse
EndIf


For d=1 To 2
If kentta(s,g,3)=d And kentta(s+1,g,3)=d And kentta(s+2,g,3)=d Then voittaja=d 'vaaka
If kentta(s,g,3)=d And kentta(s,g+1,3)=d And kentta(s,g+2,3)=d Then voittaja=d 'pysty

If g>1 then 
If kentta(s,g,3)=d And kentta(s+1,g-1,3)=d And kentta(s+2,g-2,3)=d Then voittaja=d 'vino1
EndIf


If kentta(s,g,3)=d And kentta(s+1,g+1,3)=d And kentta(s+2,g+2,3)=d Then voittaja=d 'vino2


Next d


Next g
Next s

If voittaja<>0 Then 
Text 0,0,"Voittaja pelaaja "+voittaja

EndIf

DrawScreen

Forever

Elikkäs tuossa koodissa jonka olisi tarkoitus olla ristinollapeli, on semmonen ropleema että tuo pystyrivi hommeli kusee sen verran että tietyssä tapauksessa se antaa voittajan, vaikka ei pitäisi:

#X#
#X#
X##

Elikkä tuolla lailla kun on merkit asetettu (X:t siis merkkejä) niin koodi luulee tuon olevan pystyrivi, vaikka niin ei tietystikään ole. Osaisiko joku auttaa?
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Tyhmät kysymykset

Post by valscion »

Sepi wrote:

Code: Select all

...koodia...
Elikkäs tuossa koodissa jonka olisi tarkoitus olla ristinollapeli, on semmonen ropleema että tuo pystyrivi hommeli kusee sen verran että tietyssä tapauksessa se antaa voittajan, vaikka ei pitäisi:

#X#
#X#
X##

Elikkä tuolla lailla kun on merkit asetettu (X:t siis merkkejä) niin koodi luulee tuon olevan pystyrivi, vaikka niin ei tietystikään ole. Osaisiko joku auttaa?
Jos haluat nopeasti vastauksen, niin tee nämä:
  • Sisennä koodisi. Kaikkia raivostuttaa yrittää ottaa selvää toisen sisentämättömästä koodista
  • Käytä mediaa, jota muutkin voivat käyttää. Muuten auttaja joutuu ensiksi muokkaamaan koodiasi, että voi sitä testata.
  • KOMMENTOI! Kerro, missä kohtaa koodiasi tulisi tehdä mitäkin, jotta muut ymmärtäisivät helpommin miten koodisi toimii.
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
Sepi
Member
Posts: 84
Joined: Thu Jun 05, 2008 1:38 pm

Re: Tyhmät kysymykset

Post by Sepi »

Njoo.. Postasin tämän vain nopeasti tänne jos joku vaikka nopealla vilkaisulla sattuisi löytämään virheen. Mediaa en jaksanut lähteä muuttamaan sillä tuon koodin ajamisesta ei oikeastaan hyötyisi mitään eikä kukaan varmaan saisi siltikään siitä selvää jos ruudukon tilalla olisi vaikkapa tatti ja nollan tilalla vaikkapa car2.bmp. Mutta ei tämä niin elintärkeä koodinpätkä ole.
Character
Active Member
Posts: 113
Joined: Thu Nov 27, 2008 2:16 pm

Re: Tyhmät kysymykset

Post by Character »

Miten saan peliini samanlaisen taskulampun kuin esim. tässä :shock:
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

CB:n voimat ei tuollaiseen riitä. Tollanen valo juttu on taidettu joskus tehdä, mutta se oli niin raskas homma että FPS oli 5-10 suurinpiirtein ja isoin FPS oli joku 15 ja sekin aniharvoin.
Image
uapo7
Newcomer
Posts: 10
Joined: Sat Feb 07, 2009 12:51 pm

Jaettu ruutu

Post by uapo7 »

Haluaisin tehdä split screenin Coolbasic sdk:n cooltowniin, mutta en saa sitä toimimaan. Otin split screeniin koodin cbvirtulascreen paketista. Ongelmana on, että jos split screen toimii nii kaupunki jää sen alle eikä näy. Jos taas kaupunki näkyy niin split screen ei toimi. Voisiko joku auttaa?

Voisikohan split screeniä toteuttaa millään toisella keinolla kuin tolla cbVirtualScreenillä?

Muuta tässä kuitenkin pelini koodi:

Code: Select all

//EXAMPLE

SCREEN 800, 600

Include "C:\CoolBasic\cbVirtualScreen\cbVirtualScreen.cb"
Include "C:\CoolBasic\SDK\include\cbMap.cb"
Include "C:\CoolBasic\SDK\include\cbMotion.cb"
MapLoad("C:\CoolBasic\SDK\media\cooltown.til", "C:\CoolBasic\SDK\media\cooltown.png")
ukko1 = LoadObject("Media\car.bmp", 72)
ukko2 = LoadObject("Media\car2.bmp", 72)
SetupCollision ukko1, gCurrentMap, 2, 4, 2
SetupCollision ukko2, gCurrentMap, 2, 4, 2


// Ladataan tekstuurit
wall1 = LoadImage("C:\CoolBasic\SDK\media\wall1.png")
wall2 = LoadImage("C:\CoolBasic\SDK\media\wall2.png")
wall3 = LoadImage("C:\CoolBasic\SDK\media\wall3.png")
roof1 = LoadImage("C:\CoolBasic\SDK\media\roof1.png")
roof2 = LoadImage("C:\CoolBasic\SDK\media\roof2.png")

// Luodaan rakennukset
b1 = CreateBuilding(11, 11, 0, 6, 6, 5)
SetTexture(b1, TX_ROOF, roof1)
SetTexture(b1, TX_LEFT, wall1)
SetTexture(b1, TX_RIGHT, wall1)
SetTexture(b1, TX_FRONT, wall1)
SetTexture(b1, TX_BACK, wall1)

b2 = CreateBuilding(26, 11, 0, 6, 6, 9)
SetTexture(b2, TX_ROOF, roof2)
SetTexture(b2, TX_LEFT, wall2)
SetTexture(b2, TX_RIGHT, wall2)
SetTexture(b2, TX_FRONT, wall2)
SetTexture(b2, TX_BACK, wall2)

// Tehdään vielä 3 samanlaista taloa kaupungin reunalle
For i = 0 To 2
    b = CreateBuilding(i * 11 + 5, -3, 0, 10, 5, 4)
    SetTexture(b, TX_ROOF, roof1)
    SetTexture(b, TX_FRONT, wall3)
    SetTexture(b, TX_LEFT, wall3)
    SetTexture(b, TX_RIGHT, wall3)
    // BACk-tekstuuria ei tarvita koska rakennuksen taakse ei koskaan pääse.
Next i


SAFEEXIT OFF




s1 = VSCreate(800, 300)
s2 = VSCreate(800, 300)

VSCameraFollow(s1, ukko1, 50)
VSCameraFollow(s2, ukko2, 50)




Repeat
    
    
    If LeftKey() Then TurnObject ukko1,5
    If RightKey() Then TurnObject ukko1,-5
    If UpKey() Then MoveObject ukko1,5
    If DownKey() Then MoveObject ukko1,-5

    'Ukon 2 ohjaus
    If KeyDown(cbKeyA) Then TurnObject ukko2,5
    If KeyDown(cbKeyD) Then TurnObject ukko2,-5
    If KeyDown(cbKeyW) Then MoveObject ukko2,5
    If KeyDown(cbKeyS) Then MoveObject ukko2,-5
    
    
    


     
    
    DrawGame
    Draw3DMap()
    
   

    VSUpdateAll()
   
   VSDrawScreen(s1,0,0)
    VSDrawScreen(s2,0,305)

    
    
    DrawScreen
    
    Until KeyHit(cbKeyEsc)






// Lopussa vapautetaan varattu muisti
ReleaseTextures()
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Onkos funktiota jolla saan objektin paikan kartassa tileinä? En löytänyt CBKK:sta(tai en etsinyt tarpeeksi hyvin...)
Image
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: Tyhmät kysymykset

Post by zHelmet »

phons wrote:Onkos funktiota jolla saan objektin paikan kartassa tileinä? En löytänyt CBKK:sta(tai en etsinyt tarpeeksi hyvin...)
Marcoderin karttakomennoista tuo löytyy

Code: Select all

//================================================================================
// Selvitetään maailmankoordinaattien mukainen tilen x-paikka.
// Parametrit:
// _x       - X-koordinatti pikseleinä. 
//================================================================================
Function GetTileX(_x)
    mapX# = (ObjectSizeX(karttasi_globaalina) / 2.0) - ObjectX(karttasi_globaalina)
    Return RoundUp((_x + mapX) / gTileWidth)
EndFunction


//================================================================================
// Selvitetään maailmankoordinaattien mukainen tilen y-paikka
// Parametrit:
// _y       - Y-koordinatti pikseleinä. 
//================================================================================
Function GetTileY(_y)
    mapY# = ObjectY(karttasi_globaalina) + (ObjectSizeY(karttasi_globaalina) / 2.0)
    Return RoundUp((mapY - _y) / gTileHeight)
EndFunction
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

Kuten tuossa sanotaan:
Selvitetään maailmankoordinaattien mukainen tilen x-paikka.

Ja halusin:
Selvitetään objektin sijainti kartassa tileinä.
Lukuvirhe?? :roll:

Edit:ahaa, joo, nyt tajusin miten se toimii...
Last edited by phons on Thu Feb 12, 2009 6:55 pm, edited 1 time in total.
Image
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: Tyhmät kysymykset

Post by zHelmet »

phons wrote:Kuten tuossa sanotaan:
Selvitetään maailmankoordinaattien mukainen tilen x-paikka.

Ja halusin:
Selvitetään objektin sijainti kartassa tileinä.
Lukuvirhe?? :roll:
No Laitat tohon funktioon parametriksi ObjectX(Ukkelisi) Niin saat ukon sijainnin tileinä
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons »

teen siinä koodissa näin

Code: Select all

        EditMap map,2,GetTileX(ObjectX(uk)),GetTileY(ObjectY(uk)),22
        EditMap map,2,GetTileX(ObjectX(uk)),GetTileY(ObjectY(uk)),1
Mutta se valittaa että EditMap failed...
Eli tuo ei ole hakemani funktio?

Edit: Heh heh molemmat palauttavat tuossa -2147483648
Image
zHelmet
Member
Posts: 73
Joined: Mon Nov 10, 2008 3:55 pm

Re: Tyhmät kysymykset

Post by zHelmet »

phons wrote:teen siinä koodissa näin

Code: Select all

        EditMap map,2,GetTileX(ObjectX(uk)),GetTileY(ObjectY(uk)),22
        EditMap map,2,GetTileX(ObjectX(uk)),GetTileY(ObjectY(uk)),1
Mutta se valittaa että EditMap failed...
Eli tuo ei ole hakemani funktio?

Edit: Heh heh molemmat palauttavat tuossa -2147483648
No mutta kuitenkin se heittää tuohon sinuun ekaan riviisi mavin koska yrität muakata törmäyskerrosta ja törmäyskerrokseen laitetaan joko 1(seinä) tai 0(ei mitään).
EDIT:

Ja niin tuohon funktioon tarvitaan myös kartan tilenleveys ja tilenkorkeus globaalina tuossa koodissa se on gTileWidth ja gTileHeight

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

Re: Tyhmät kysymykset

Post by phons »

Yks: toi nyt tuli vahingossa sen ekan pitää olla siihen ala kerrokseen mutta tuli nyt kirjoitus virhe.
Kaks: Luulin sen gtileWidth:n olevan joku "vakio" joka löytyy suoraan CB:stä... :oops:

Edit: Jee, toimii!! Kiitos zHelmet:lle.

Edit2: Haluan löytää tietyn tilen data kerroksen mukaan. Olen löytänyt sen mutta miten saan sen tilen x:n ja y:n tileinä?
Image
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

ei toimi äänet pyssyissä..
pistoolissa on mousehit ja konepistoolissa mousedown ihan tarkoituksella.

apua

Code: Select all

peli:
AddText "Ladattu...0%"
DrawScreen
Wait 1000
ClearText
AddText "Ladattu...15%"
DrawScreen
Wait 1000
ClearText
AddText "Ladattu...30%"
DrawScreen
Wait 2000
ClearText
AddText "Ladattu..60%"
DrawScreen
Wait 1500
ClearText
AddText "Ladattu...80%"
DrawScreen
Wait 3000
ClearText
AddText "Ladattu...99%"
DrawScreen
Wait 1000
ClearText
Wait 500
SCREEN 800,600
FrameLimit 40

//tehdään tyypit
Type BULLETS
    Field obj
    Field hp
    Field dmg
    Field speed
    Field id
End Type

Type vihut
  Field obj
  Field id
  Field hp
  Field dmg
  Field score
EndType


//pelin maasto
grass=MakeObjectFloor()
lawn=LoadImage("metsä.png")
PaintObject grass,lawn
PositionObject grass,0,0, -2


//ladataan kaikki pelin objectit


////pelaajan jutut////
hiiri = LoadObject   ("tähtäin.png")

pelaaja = LoadObject ("ukkopistooli.png",72)
miekkaukko = LoadObject ("miekkaukko.png",72) : ShowObject miekkaukko,OFF
pistooliukko = LoadObject ("ukkopistooli.png",72) :ShowObject pistooliukko,OFF
konepistooliukko = LoadObject ("konepistooli.png",72) :ShowObject konepistooliukko,OFF
pati=LoadObject("luoti.png")
ShowObject pati,OFF
miekkaase = LoadObject ("miekka.png",72)

////vihollisen jutut////
vihollinen1 = loadobject ("monsteri1.png",72)
vihollinen2 = loadobject ("monsteri2.png",72)
ShowObject vihollinen1,OFF
ShowObject vihollinen2,OFF

//ladataan musiikit ja äänet
pistooli = LoadSound      ("sword.ogg")
konepistooli = LoadSound  ("machinegun.ogg")
miekka = LoadSound        ("sword.ogg")
lyöminen = LoadSound      ("bulletbody.ogg")
osui  = LoadSound         ("bulletbody.ogg")
vihollinen = LoadSound    ("snorker 1.ogg")


yläpalkki = LoadImage ("yläpalkki.png")
osuma  = LoadAnimObject("osuma.png",40,40,0,4)
ruumis = LoadObject    ("ruumis.png")
kuolit = LoadObject ("ruumis.png")
ShowObject kuolit,OFF 
ShowObject ruumis, OFF

//laitetaan pelaajan hp , voima ,  kaikkea..

hp=100
voima=5
ammukset = 20

//tapot sekä pisteet

tapot=0
tapotpisteet=1000

//ASEET

pistooli=1
konepistooli=0
miekka=0



Repeat////


ObjectOrder pelaaja,1
ObjectOrder osuma,1







    //pelaajan ohjaus
PointObject pelaaja, hiiri
PositionObject hiiri,MouseWX(),MouseWY()
ShowMouse OFF

    If LeftKey() Then TurnObject pelaaja,5
    If RightKey() Then TurnObject pelaaja,-5
    If UpKey() Then MoveObject pelaaja,2
    If DownKey() Then MoveObject pelaaja,-2   
   
    'katso myös komento mousedown(1)
    If pistooli=1 And MouseHit (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
       PlaySound pistooli,50
       reload=8



    EndIf
    
        If konepistooli=1 And  MouseDown (1) And reload=0 And ammukset>0 Then 'pitää olla ammuksia ampuakseen
        newBullet.BULLETS= New(BULLETS)
        newBullet\obj=CloneObject(pati)
        newbullet\dmg=voima
        newbullet\speed=speedupg
        ammukset - 1
        CloneObjectPosition newBullet\obj,pelaaja
        CloneObjectOrientation newbullet\obj,pelaaja
        MoveObject newBullet\obj,24
        PlaySound konepistooli,50
        reload=8
       EndIf 











    If reload>0 Then reload-1 // vähennetään vain kun on realoadia...
   

    ////aseen vaihto
   
    //käytä elselauseita kun mahdollista
    If KeyHit (cbkey1)
        PaintObject pelaaja,pistooliukko
        pistooli=1
        konepistooli=0
        miekka=0
    ElseIf KeyHit (cbkey2)
        PaintObject pelaaja,konepistooliukko
        konepistooli=1
        pistooli=0
        miekka=0
    ElseIf KeyHit (cbkey3)
        PaintObject pelaaja,miekkaukko
        miekka=1
        pistooli=0
        konepistooli=0
    EndIf

If miekka=0  Then ShowObject miekkaase,OFF Else  ShowObject miekkaase,ON 


 If  KeyDown(17) Then MoveObject pelaaja,4' 17 = W
 If KeyDown(31) Then MoveObject pelaaja,-3
    
        If miekka=1 Then CloneObjectPosition miekkaase,pelaaja
         RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
    
      If miekka=1 And KeyDown(cbkeyA) Then miekkaangle = WrapAngle(miekkaangle + 10)
      If miekka=1 And KeyDown(cbkeyD) Then miekkaangle = WrapAngle(miekkaangle - 10)

    //ALIENIT
    If luo>80
        newAlien.vihut= New(vihut)
        newAlien\obj=CloneObject(vihollinen1)
        PositionObject newAlien\obj,Rand(-1600,1000),Rand(1600,-1000)
       
        newAlien\id=Rand(1,2)
        Select newAlien\id  'käytä mielummin selectiä on selvempi
            Case 1
                newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
            Case 2
                PaintObject newAlien\obj,vihollinen2
                newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
            Default
                MakeError "Annetulle IDlle ei ole asetettu toimintoa"
        EndSelect

        luo=0         
    EndIf
   
    luo+1
               
    For iAlien.vihut= Each vihut'Aloitetaan zombien läpikäynti
   
        If iAlien\ID>0 Then ' jos on elossa
       
            sidle=Rand(-20,20)
       
            If CountCollisions(iAlien\obj) Then MoveObject iAlien\obj,0,sidle
            If ObjectSight (iAlien\obj,pelaaja) Then MoveObject iAlien\obj,1 Else MoveObject iAlien\obj,0
            PointObject iAlien\obj,pelaaja'zombi tähtää pelaajaan
            If ObjectsOverlap(iAlien\obj,pelaaja) Then hp-iAlien\dmg
       
            For ibullet.bullets=Each bullets
                If ObjectsOverlap(ibullet\obj,iAlien\obj) Then
                    PlaySound osui,50
                    iAlien\hp-ibullet\dmg
                EndIf
            Next ibullet
                   
            If ObjectsOverlap (pelaaja,iAlien\obj) Then iAlien\hp-4
       
            If iAlien\hp<0 Then 'jos zombin energiat loppuu, niin tapetaan se ja annetaan pisteet
                tapotpisteet+1
                tapot+1
           
           If ObjectsOverlap (pelaaja,Ialien\obj) Then 
           CloneObjectPosition osuma,pelaaja
           PlaySound vihollinen,250
           PlayObject osuma,2,11,0.25

           EndIf 
           
   
           
           
                /////////////////////////////////
                ////////// RUUMIIN TEKO /////////
                /////////////////////////////////
               
                xx=ObjectX(iAlien\obj)
                yy=ObjectY(iAlien\obj)
                ShowObject iAlien\obj, OFF
           
                iAlien\obj = CloneObject(ruumis)
                PositionObject iAlien\obj,xx,yy
                ShowObject iAlien\obj, ON
                ObjectOrder iAlien\obj,1
                iAlien\ID=-1 ' estetään toiminnot
                ObjectLife iAlien\obj,300 'poistetaan tietyn ajan kuluttua
                ObjectOrder ruumis,-1
               
            EndIf
        EndIf
    Next iAlien
               
    For iBullet.BULLETS= Each BULLETS
        If CountCollisions(ibullet\obj) Then ibullet\hp-32
        MoveObject iBullet\obj,6'llikutetaan luotia
        If Distance2(iBullet\obj,pelaaja)>600 Or ibullet\hp<0 Then 'jos...niin tuhotaan ammus
            DeleteObject iBullet\obj
            Delete iBullet
        EndIf
    Next iBullet

  DrawGame
 
  DrawImage yläpalkki ,0,0 : Text 10,10,"PISTEITÄ :"+tapotpisteet : Text 200,10,"TAPOT :"+tapot


 
Text 20,30,"LISÄÄ HP(4) +50hp -30p"
Text 20,45,"HP nyt ="+hp
    If KeyHit(cbkey4) And tapotpisteet>29 Then
      hp+50
      tapotpisteet-30
      if Not tapotpisteet=30 Then
        hp-0
        tapotpisteet-0
      EndIf
    EndIf
   
Text 250,30,"LISÄÄ VOIMAA(5) +5voima -20p"
Text 250,45,"VOIMA nyt ="+voima
  If KeyHit(cbkey5) And tapotpisteet>19 Then
      voima+5
      tapotpisteet-20
      if Not tapotpisteet=20 Then
        voima-0
        tapotpisteet-0
      EndIf
    EndIf

Text 500,30,"LISÄÄ AMMUKSIA(6) +25ammusta -10p"
Text 500,45,"AMMUKSIA nyt ="+ammukset
   If KeyHit(cbkey6) And tapotpisteet>9 Then
      ammukset+25
      tapotpisteet-10
      if Not tapotpisteet=10 Then
        voima-0
        tapotpisteet-0
      EndIf
    EndIf

   
CloneCameraPosition pelaaja


If KeyHit(cbkeyf12) Then SCREENSHOT "C:\capture.bmp"////screenshot-komento

DrawScreen
Forever

Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Tyhmät kysymykset

Post by Jonhu »

rami123 wrote:ei toimi äänet pyssyissä..
pistoolissa on mousehit ja konepistoolissa mousedown ihan tarkoituksella.

apua

Code: Select all

 koodia...
No en tiedä vastasiko tämä tuohon ongelmaan, mutta tarkastamalla muuttujien nimet todennäköisesti saat ne toimimaan.

En jaksanut asettaa kuvia sellaisiksi, jotka toimisivat, joten koodissa voi olla huomattavasti pilkkuvirheitä jne., kun en voinut tarkistaa sitä... Kuitenkin koodi on mielestäni nyt paljon selveämpää ja vähemmän purkkaa.

Tässä siistittynä ja kommentoituna koodisi:

Code: Select all

peli:

While luku<100
    Print "Ladattu... "+luku+"%"
    luku = Min( luku+Rand(1,30), 100) // lisätään lukuun randomisti ja rajoitetaan se 100:aan
    Wait Rand(500,1500)
Wend

// näytetään vielä lopuksi 100%
Print "Ladattu... "+luku+"%"
Wait 500

SCREEN 800,600
FrameLimit 40

//tehdään tyypit
Type BULLETS
    Field obj
    // Field hp ' et tarvitse hp:ta ammukselle 
    Field dmg
    Field speed
    Field id
End Type

Type vihut
  Field obj
  Field id
  Field hp
  Field dmg
  Field score
EndType


//pelin maasto
grass=MakeObjectFloor()
lawn=LoadImage("metsä.png")
PaintObject grass,lawn
PositionObject grass,0,0, -2


//ladataan kaikki pelin objectit


////pelaajan jutut////
hiiri = LoadObject   ("tähtäin.png")

pelaaja = LoadObject ("ukkopistooli.png",72)
miekkaukko = LoadObject ("miekkaukko.png",72) : ShowObject miekkaukko,OFF
pistooliukko = LoadObject ("ukkopistooli.png",72) :ShowObject pistooliukko,OFF
konepistooliukko = LoadObject ("konepistooli.png",72) :ShowObject konepistooliukko,OFF
pati=LoadObject("luoti.png")
ShowObject pati,OFF
miekkaase = LoadObject ("miekka.png",72)

////vihollisen jutut////
vihollinen1 = loadobject ("monsteri1.png",72)
vihollinen2 = loadobject ("monsteri2.png",72)
ShowObject vihollinen1,OFF
ShowObject vihollinen2,OFF

//ladataan musiikit ja äänet
pistooli = LoadSound      ("sword.ogg")
konepistooli = LoadSound  ("machinegun.ogg")
miekka = LoadSound        ("sword.ogg")
lyöminen = LoadSound      ("bulletbody.ogg")
osui  = LoadSound         ("bulletbody.ogg")
vihollinen = LoadSound    ("snorker 1.ogg")


yläpalkki = LoadImage ("yläpalkki.png")
osuma  = LoadAnimObject("osuma.png",40,40,0,4)
ruumis = LoadObject    ("ruumis.png")
kuolit = LoadObject ("ruumis.png")
ShowObject kuolit,OFF 
ShowObject ruumis, OFF

//laitetaan pelaajan hp , voima ,  kaikkea..
hp = 100
voima = 5
ammukset = 20
tapot = 0
tapotpisteet = 1000

//ASEET

// MÄÄRITELLÄÄN YHDELLÄ MUUTTUJALLA KAIKKI ASEET
// Aseen voimat yms. Voitaisiin tallentaa taulukkoon / tekstifileen

ase = 1

'miekka=0
'pistooli=1
'konepistooli=2

ShowMouse OFF // tätä ei tarvitse määritellä joka kierros uudestaan..

Repeat////

    // todennäköisesti turhia määritellä joka kierros
    ObjectOrder pelaaja,1
    ObjectOrder osuma,1

    //pelaajan ohjaus
    
    PositionObject hiiri,MouseWX(),MouseWY() 
    // TÄMÄ ennen alempaa riviä, koska alempi rivi tarkastelee hiiren sijaintia,
    // muuten lukee sijainnin vasta kierroksen jäljessä olevasta sijainnista
    
    PointObject pelaaja, hiiri
    

   ' If LeftKey() Then TurnObject pelaaja,5
   ' If RightKey() Then TurnObject pelaaja,-5
   ' If UpKey() Then MoveObject pelaaja,2
   ' If DownKey() Then MoveObject pelaaja,-2  
   
    // Pelaaja osoittaa jo valmiiksi objektiin, niin sivusuunnassa ei voi liikkua..
    // Yksinkertaisemaa kirjoittaa ainakin mielestäni näin yhdelle riville
    // MoveObject pelaaja, (UpKey()-DownKey() ) * nopeus
    
    MoveObject pelaaja, (UpKey()+KeyDown(cbkeyW)-KeyDown(cbkeyS)-DownKey() ) * 2
    
    
    ///////////////////////
    ////// AMPUMINEN //////
    ///////////////////////
    
    // Alkuperäinen oli hirveää copypastea, joten muutin vähäsen..
    If reload = 0 And ammukset>0 Then
    
        // jos ollaan jo ammuttu ja ase on pistooli, niin esto on päällä ja nollataan ammuttu
        If ammuttu = 1 And ase = 1 Then esto=ON 
        
        If MouseDown(1) And esto=OFF Then
        
            newBullet.BULLETS= New(BULLETS)
            newBullet\obj    = CloneObject(pati)
            newbullet\dmg    = voima
            newbullet\speed  = speedupg
            
            CloneObjectPosition newBullet\obj,pelaaja
            CloneObjectOrientation newbullet\obj,pelaaja
            MoveObject newBullet\obj,24
            ammukset - 1
            
            Select ase
                Case 0 ' Nyrkki
                    ammukset + 1 ' lisätään ammuksia yksi, jos halutaan, että nyrkkiä voi käyttää loputtomasti
                Case 1 ' Pistooli
                    PlaySound pistooli, 50
                    reload = 8
                Case 2 ' Konekiväri
                    PlaySound konepistooli,50
                    reload = 8
            EndSelect
            ammuttu = 1
        EndIf
    EndIf    
    
    // kun hiiri nousee, niin poistetaan esto (jos sitä on edes ollut)
    If MouseUp(1) Then esto=OFF : ammuttu = 0
    If reload>0 Then reload-1 // vähennetään vain kun on realoadia...
   
    ////aseen vaihto
   
    //käytä elselauseita kun mahdollista
    If KeyHit (cbkey1)
        PaintObject pelaaja,pistooliukko
        ShowObject miekkaase,OFF 
        ase = 1
        
    ElseIf KeyHit (cbkey2)
        PaintObject pelaaja,konepistooliukko
        ShowObject miekkaase,OFF 
        ase = 2
        
    ElseIf KeyHit (cbkey3)
        PaintObject pelaaja,miekkaukko
        ShowObject miekkaase,ON  // Showobject komennon määrittämistä ei tarvitse tehdä joka kierros..
        ase = 0
    EndIf
    
  // Ohjaukset siirretty ylös
  // miksi näissä oli eri nopeudet kuin aikaisemmissa??
  '  If KeyDown(cbKeyW) Then MoveObject pelaaja,4' 17 = W 
  '  If KeyDown(cbKeyS) Then MoveObject pelaaja,-3
    
    If ase=0  Then     
        miekkaangle = WrapAngle(miekkaangle + (KeyDown(cbkeyA)-KeyDown(cbkeyD)) * 10 )
        RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
        // ensin ylempi rivi, koska alempirivi tarvitsee sitä, että tarkistus ei mene kierrosta jäljessä.
    EndIf

 '    If miekka=1 Then CloneObjectPosition miekkaase,pelaaja
 '     RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
 '     If miekka=1 And KeyDown(cbkeyA) Then miekkaangle = WrapAngle(miekkaangle + 10)
 '     If miekka=1 And KeyDown(cbkeyD) Then miekkaangle = WrapAngle(miekkaangle - 10)

    //ALIENIT
    
    // timeria käyttämällä voisi olla tasaisempaa alieneiden luontinopeus eri tietokoneilla
    If luo>80
        newAlien.vihut= New(vihut)
        PositionObject newAlien\obj,Rand(-1600,1000),Rand(1600,-1000)
       
        newAlien\id=Rand(1,2)
        Select newAlien\id  'käytä mielummin selectiä on selvempi
            Case 1
                newAlien\obj=CloneObject(vihollinen1)
                newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
            Case 2
                newAlien\obj=CloneObject(vihollinen2)
                newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
            Default
                MakeError "Annetulle IDlle ei ole asetettu toimintoa"
        EndSelect
        luo=0         
    EndIf
   
    luo+1
               
    For iAlien.vihut= Each vihut'Aloitetaan zombien läpikäynti
   
        If iAlien\ID>0 Then ' jos on elossa
            
            ' Jos muuttujaa ei käytetä kuin kerran kannattaa muuttujan arvo kirjoittaa
            ' suoraan tarvittavaan paikkaan.. MoveObject iAlien\obj,0,Rand(-20,20)
            ' sidle=Rand(-20,20) 
            
            // Ensin kannattaa tähdätä ja sitten vasta liikkua...
            PointObject iAlien\obj, pelaaja 'zombi tähtää pelaajaan
            
            // liikkuminen tähtäyksen jälkeen, jos ei ole osumia ja näkee pelaajan
            If ObjectSight (iAlien\obj,pelaaja) And CountCollisions(iAlien\obj)=0 Then 
                MoveObject iAlien\obj,1 
            Else 
                MoveObject iAlien\obj,0,Rand(-20,20)
            EndIf
            
            // vähennetään ukon energiaa, kun alien ja pelaaja ovat päällekkäin
            If ObjectsOverlap(iAlien\obj,pelaaja) Then hp-iAlien\dmg : iAlien\hp-4
            
           // samaa if-lausetta ei tarvitse kirjoittaa uudestaan, vaan voit lisätä 
           // seuraukset aijempaan samaan if-lauseeseen
           ' If ObjectsOverlap (pelaaja,iAlien\obj) Then iAlien\hp-4
           
            // tämän tarkistuksen voisi tehdä ammusten tarkistus silmukassa, mutta tässäkin kohtaa menettelee
            For ibullet.bullets=Each bullets
                If ObjectsOverlap(ibullet\obj,iAlien\obj) Then
                    PlaySound osui,50
                    iAlien\hp-ibullet\dmg
                EndIf
            Next ibullet

            // jos pelaajaan osutaan, niin soitetaan ääni
            // tätä pitää tarkistaa muulloinkin kuin kuollessa..
            If ObjectsOverlap (pelaaja,Ialien\obj) Then 
                CloneObjectPosition osuma,pelaaja
                PlaySound vihollinen, 100 ' 250 ei ole mahdollinen voimakkuus. 100% on kuitenkin maksimi
                PlayObject osuma,2,11,0.25 ' onko osuma sijoitettu oikeaan paikkaan, kun se käynnistetään??
            EndIf 
            
            // Zombin kuolema
            If iAlien\hp<0 Then 'jos zombin energiat loppuu, niin tapetaan se ja annetaan pisteet
                tapotpisteet+1
                tapot+1
              // Alempi koodi tulisi tarkistaa kokoajan, eikä vain zombin kuollessa!!
              // siirretty ylemmäs
              
             '   If ObjectsOverlap (pelaaja,Ialien\obj) Then 
             '       CloneObjectPosition osuma,pelaaja
             '       PlaySound vihollinen, 250 
             '       PlayObject osuma,2,11,0.25 
             '   EndIf 
                
                xx=ObjectX(iAlien\obj)
                yy=ObjectY(iAlien\obj)
                ShowObject iAlien\obj, OFF
           
                iAlien\obj = CloneObject(ruumis)
                PositionObject iAlien\obj,xx,yy
                ShowObject iAlien\obj, ON
                ObjectOrder iAlien\obj,1
                
                iAlien\ID=-1 ' estetään toiminnot
                ObjectLife iAlien\obj,300 'poistetaan tietyn ajan kuluttua
                ObjectOrder ruumis,-1
               
            EndIf
        EndIf
    Next iAlien
               
    For iBullet.BULLETS= Each BULLETS
       ' If CountCollisions(ibullet\obj) Then ibullet\hp-32
       ' miksi ammuksella pitäisi olla hp. Tarkistukseen voi suoraan istää councollisions..
       
        MoveObject iBullet\obj,6'llikutetaan luotia
        If Distance2(iBullet\obj,pelaaja)>600 Or CountCollisions(ibullet\obj)>0 Then 'jos...niin tuhotaan ammus
            DeleteObject iBullet\obj
            Delete iBullet
        EndIf
    Next iBullet

    DrawGame

    // Valikko
    
    DrawImage yläpalkki ,0,0 
    Text 10,10,"PISTEITÄ :"+tapotpisteet 
    Text 200,10,"TAPOT :"+tapot
    
    Text 20,30, "LISÄÄ HP(4) + 50hp - 30p"
    Text 20,45, "HP nyt = "+hp
    Text 250,30,"LISÄÄ VOIMAA(5) + 5 voima - 20p"
    Text 250,45,"VOIMA nyt = "+voima
    Text 500,30,"LISÄÄ AMMUKSIA(6) + 25 ammusta - 10p"
    Text 500,45,"AMMUKSIA nyt = "+ammukset
    
    '  tapotpisteet <> 30 tarkoittaa samaa kuin Not tapotpisteet=30
    
    // voit muuttaa nämä normaaleiksi if-lauseiksi jos haluat painaa napeja yhtäaikaa
    If KeyHit(cbkey4) And tapotpisteet>30 Then
        hp+50
        tapotpisteet-30
    ElseIf KeyHit(cbkey5) And tapotpisteet>20 Then
        voima+5
        tapotpisteet-20
    ElseIf KeyHit(cbkey6) And tapotpisteet>10 Then
        ammukset+25
        tapotpisteet-10
    EndIf
    
    // näistä ei ole mitään hyötyä!!!
    // välttääksesi koko homman kirjoitat vain tapotpisteet>30
  '    If Not tapotpisteet=30 Then 
  '      hp-0
  '      tapotpisteet-0
  '    EndIf
  
    // Tässä kohtaa kannattaa käyttää Updategame- komentoa, koska muuten kuva tökkii reinään törmätessä
    UpdateGame
    
    CloneCameraPosition pelaaja

    DrawScreen

    // tämä Drawscreenin jälkeen, niin tulee ajankohtainen kuva, eikä edelliseltä kierrokselta..
    If KeyHit(cbkeyf12) Then ScreenShot "C:\capture.bmp"////screenshot-komento
Forever
Tekeillä pikkupelejä ja ohjelmia :)
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

tuosta korjatusta koodista tulee mavi :?
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: Tyhmät kysymykset

Post by Dande »

rami123 wrote:tuosta korjatusta koodista tulee mavi :?
Mahdollisesti joku kirjoitusvirhe muuttujassa, tai sitten Print-komennon käyttö. Print-komento saattaa johtaa joskus ihan kummallisiin bugeihin. Huomasin sen kerran kun käytin sitä debuggaukseen. (Ja sanotaanhan manuaalissakin, että sitä ei kannata käyttää)

Mutta omasta koodistasi: Lataat äänen pistooli-muuttujaan ja käytät myöhemmin pistooli-muuttujaa ilmaisemaan onko ks. ase käytössä. Koodissasihan asetat pistooli-muuttujan omakätisesti ykköseksi, jolloin siinä ei tietenkään enää mitään ääntä ole. Konepistoolille teet käytännössä saman, sillä asetat sen nollaan, jolloin sekään ei enää osoita mihinkään ääneen.

Suosittelisin nimeämään nuo äänet vaikkpa tyyliin sndPistooli, tai pistooli_snd, tai jotenkin vastaavasti.

Ja ihan näin pikku kysymyksenä: Mitä ihmeen järkeä on laittaa käyttäjä ensin odottamaan pseudo-latausruudussa, joka ei tee mitään ja laittaa sen jälkeen käyttäjä odottamaan varsinaista latausta?
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

Kiitos jonhu nyt toimii tuo .:D Mutta miksi miekalla voi ampua?
Jonhu__

Re: Tyhmät kysymykset

Post by Jonhu__ »

rami123 wrote:Kiitos jonhu nyt toimii tuo .:D Mutta miksi miekalla voi ampua?
Joo no pieni ajatusvirhe siinä kohtaa :D
Korjautuu, kun lisäät ehtoon, että "If reload = 0 And ammukset>0 And ase<>0 Then"

Edellisestä unohtui pari kohtaa, niin tässä vielä vähäsen päivitettynä. Kun olet älynnyt, mitä nuo koodirivit tekevät, niin voit harventaa runsasta kommentointiani sekä vanhoja koodipätkiä...

Tässäkin voi olla joitain pieniä virheitä, mutta toivottavasti löydät ne ;)

Code: Select all

peli:

While luku<100
    AddText "Ladattu... "+luku+"%"
    luku = Min( luku+Rand(1,30), 100) // lisätään lukuun randomisti ja rajoitetaan se 100:aan
    DrawScreen
    Wait Rand(500,1500)
Wend

// näytetään vielä lopuksi 100%
AddText "Ladattu... "+luku+"%"
DrawScreen
Wait 500

SCREEN 800,600
FrameLimit 40

//tehdään tyypit
Type BULLETS
    Field obj
    // Field hp ' et tarvitse hp:ta ammukselle 
    Field dmg
    Field speed // tätäkin käytit vain yhdessä kohdassa, mutta jatkossa voit tarvita,
                // jos teet ammuksen nopeudesta riippuvaisen aseesta
    // Field id ' ID:tä en huomannut missään
End Type

Type vihut
  Field obj
  Field id
  Field hp
  Field dmg
  Field score
EndType


//pelin maasto
grass=MakeObjectFloor()
lawn=LoadImage("metsä.png")
PaintObject grass,lawn
PositionObject grass,0,0, -2

//ladataan kaikki pelin objectit

pati = LoadObject("luoti.png")
hiiri = LoadObject   ("tähtäin.png")
pelaaja = LoadObject ("ukkopistooli.png",72)
miekkaase = LoadObject ("miekka.png",72)
miekkaukko = LoadObject ("miekkaukko.png",72) 
pistooliukko = LoadObject ("ukkopistooli.png",72) 
konepistooliukko = LoadObject ("konepistooli.png",72) 
osuma  = LoadAnimObject("osuma.png",40,40,0,4)

ShowObject pati,OFF
ShowObject miekkaukko,OFF
ShowObject pistooliukko,OFF
ShowObject konepistooliukko,OFF

////vihollisen jutut////
vihollinen1 = LoadObject ("monsteri1.png",72)
vihollinen2 = LoadObject ("monsteri2.png",72)
ShowObject vihollinen1,OFF
ShowObject vihollinen2,OFF

//ladataan musiikit ja äänet
pistooli     = LoadSound ("sword.ogg")
konepistooli = LoadSound ("machinegun.ogg")
miekka       = LoadSound ("sword.ogg")
lyöminen     = LoadSound ("bulletbody.ogg")
osui         = LoadSound ("bulletbody.ogg")
vihollinen   = LoadSound ("snorker 1.ogg")


yläpalkki = LoadImage ("yläpalkki.png")
ruumis = LoadObject    ("ruumis.png")
kuolit = LoadObject ("ruumis.png")

ShowObject kuolit,OFF 
ShowObject ruumis, OFF

//laitetaan pelaajan hp , voima ,  kaikkea..
hp = 100
voima = 5
ammukset = 20
tapot = 0
tapotpisteet = 1000

//ASEET

// MÄÄRITELLÄÄN YHDELLÄ MUUTTUJALLA KAIKKI ASEET
// Aseen voimat yms. Voitaisiin tallentaa taulukkoon / tekstifileen

ase = 1

'miekka=0
'pistooli=1
'konepistooli=2

ShowMouse OFF // tätä ei tarvitse määritellä joka kierros uudestaan..

Repeat////

    // todennäköisesti turhia määritellä joka kierros
   ' ObjectOrder pelaaja,1
   ' ObjectOrder osuma,1

    //pelaajan ohjaus
    
    PositionObject hiiri,MouseWX(),MouseWY() 
    // TÄMÄ ennen alempaa riviä, koska alempi rivi tarkastelee hiiren sijaintia,
    // muuten lukee sijainnin vasta kierroksen jäljessä olevasta sijainnista
    
    PointObject pelaaja, hiiri
    

   ' If LeftKey() Then TurnObject pelaaja,5
   ' If RightKey() Then TurnObject pelaaja,-5
   ' If UpKey() Then MoveObject pelaaja,2
   ' If DownKey() Then MoveObject pelaaja,-2  
   
    // Pelaaja osoittaa jo valmiiksi objektiin, niin sivusuunnassa ei voi liikkua..
    // Yksinkertaisemaa kirjoittaa ainakin mielestäni näin yhdelle riville
    // MoveObject pelaaja, (UpKey()-DownKey() ) * nopeus
    
    MoveObject pelaaja, (UpKey()+KeyDown(cbkeyW)-KeyDown(cbkeyS)-DownKey() ) * 2
    
    
    ///////////////////////
    ////// AMPUMINEN //////
    ///////////////////////
    
    // Alkuperäinen oli hirveää copypastea, joten muutin vähäsen..
    If reload = 0 And ammukset>0 And ase<>0 Then
    
        // jos ollaan jo ammuttu ja ase on pistooli, niin esto on päällä ja nollataan ammuttu
        If ammuttu = 1 And ase = 1 Then esto=ON 
        
        If MouseDown(1) And esto=OFF Then
        
            newBullet.BULLETS= New(BULLETS)
            newBullet\obj    = CloneObject(pati)
            newbullet\dmg    = voima
            newbullet\speed  = speedupg 
            ' HUOM et ole määritellyt speedupg-muuttujaa missään
            ' mieluiten määrittele nopeus ase kohtaisesti ;)
            
            CloneObjectPosition newBullet\obj,pelaaja
            CloneObjectOrientation newbullet\obj,pelaaja
            MoveObject newBullet\obj,24
            ammukset - 1
            
            Select ase
                // Jos ei sittenkään ammuta miekalla
                'Case 0  Nyrkki
                '    ammukset + 1  lisätään ammuksia yksi, jos halutaan, että nyrkkiä voi käyttää loputtomasti
                Case 1 ' Pistooli
                    PlaySound pistooli, 50
                    reload = 8
                Case 2 ' Konekiväri
                    PlaySound konepistooli,50
                    reload = 8
            EndSelect
            ammuttu = 1
        EndIf
    EndIf    
    
    // kun hiiri nousee, niin poistetaan esto (jos sitä on edes ollut)
    If MouseUp(1) Then esto=OFF : ammuttu = 0
    If reload>0 Then reload-1 // vähennetään vain kun on realoadia...
   
    ////aseen vaihto
   
    //käytä elselauseita kun mahdollista
    If KeyHit (cbkey1)
        PaintObject pelaaja,pistooliukko
        ShowObject miekkaase,OFF 
        ase = 1
        
    ElseIf KeyHit (cbkey2)
        PaintObject pelaaja,konepistooliukko
        ShowObject miekkaase,OFF 
        ase = 2
        
    ElseIf KeyHit (cbkey3)
        PaintObject pelaaja,miekkaukko
        ShowObject miekkaase,ON  // Showobject komennon määrittämistä ei tarvitse tehdä joka kierros..
        ase = 0
    EndIf
    
  // Ohjaukset siirretty ylös
  // miksi näissä oli eri nopeudet kuin aikaisemmissa??
  '  If KeyDown(cbKeyW) Then MoveObject pelaaja,4' 17 = W 
  '  If KeyDown(cbKeyS) Then MoveObject pelaaja,-3
    
    If ase=0  Then     
        CloneObjectPosition miekkaase,pelaaja
        miekkaangle = WrapAngle(miekkaangle + (KeyDown(cbkeyA)-KeyDown(cbkeyD)) * 10 )
        RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
        // ensin ylempi rivi, koska alempirivi tarvitsee sitä, että tarkistus ei mene kierrosta jäljessä.
    EndIf

 '    If miekka=1 Then CloneObjectPosition miekkaase,pelaaja
 '     RotateObject miekkaase, miekkaangle + ObjectAngle(pelaaja)
 '     If miekka=1 And KeyDown(cbkeyA) Then miekkaangle = WrapAngle(miekkaangle + 10)
 '     If miekka=1 And KeyDown(cbkeyD) Then miekkaangle = WrapAngle(miekkaangle - 10)

    //ALIENIT
    
    // timeria käyttämällä voisi olla tasaisempaa alieneiden luontinopeus eri tietokoneilla
    If luo>80
        newAlien.vihut= New(vihut)
        PositionObject newAlien\obj,Rand(-1600,1000),Rand(1600,-1000)
       
        newAlien\id=Rand(1,2)
        Select newAlien\id  'käytä mielummin selectiä on selvempi
            Case 1
                newAlien\obj=CloneObject(vihollinen1)
                newAlien\hp=Rand(130,190):newAlien\dmg=Rand(2,5):newAlien\score=Rand(10,30)
            Case 2
                newAlien\obj=CloneObject(vihollinen2)
                newAlien\hp=Rand(300,320):newAlien\dmg=Rand(5,8):newAlien\score=Rand(15,35)
            Default
                MakeError "Annetulle IDlle ei ole asetettu toimintoa"
        EndSelect
        luo=0         
    EndIf
   
    luo+1
               
    For iAlien.vihut= Each vihut'Aloitetaan zombien läpikäynti
   
        If iAlien\ID>0 Then ' jos on elossa
            
            ' Jos muuttujaa ei käytetä kuin kerran kannattaa muuttujan arvo kirjoittaa
            ' suoraan tarvittavaan paikkaan.. MoveObject iAlien\obj,0,Rand(-20,20)
            ' sidle=Rand(-20,20) 
            
            // Ensin kannattaa tähdätä ja sitten vasta liikkua...
            PointObject iAlien\obj, pelaaja 'zombi tähtää pelaajaan
            
            // liikkuminen tähtäyksen jälkeen, jos ei ole osumia ja näkee pelaajan
            If ObjectSight (iAlien\obj,pelaaja) And CountCollisions(iAlien\obj)=0 Then 
                MoveObject iAlien\obj,1 
            Else 
                MoveObject iAlien\obj,0,Rand(-20,20)
            EndIf
            
            // vähennetään ukon energiaa, kun alien ja pelaaja ovat päällekkäin
            If ObjectsOverlap(iAlien\obj,pelaaja) Then hp-iAlien\dmg : iAlien\hp-4
            
           // samaa if-lausetta ei tarvitse kirjoittaa uudestaan, vaan voit lisätä 
           // seuraukset aijempaan samaan if-lauseeseen
           ' If ObjectsOverlap (pelaaja,iAlien\obj) Then iAlien\hp-4
           
            // tämän tarkistuksen voisi tehdä ammusten tarkistus silmukassa, mutta tässäkin kohtaa menettelee
            For ibullet.bullets=Each bullets
                If ObjectsOverlap(ibullet\obj,iAlien\obj) Then
                    PlaySound osui,50
                    iAlien\hp-ibullet\dmg
                EndIf
            Next ibullet

            // jos pelaajaan osutaan, niin soitetaan ääni
            // tätä pitää tarkistaa muulloinkin kuin kuollessa..
            If ObjectsOverlap (pelaaja,Ialien\obj) Then 
                CloneObjectPosition osuma,pelaaja
                PlaySound vihollinen, 100 ' 250 ei ole mahdollinen voimakkuus. 100% on kuitenkin maksimi
                PlayObject osuma,2,11,0.25 ' onko osuma sijoitettu oikeaan paikkaan, kun se käynnistetään??
            EndIf 
            
            // Zombin kuolema
            If iAlien\hp<0 Then 'jos zombin energiat loppuu, niin tapetaan se ja annetaan pisteet
                tapotpisteet+1
                tapot+1
              // Alempi koodi tulisi tarkistaa kokoajan, eikä vain zombin kuollessa!!
              // siirretty ylemmäs
              
             '   If ObjectsOverlap (pelaaja,Ialien\obj) Then 
             '       CloneObjectPosition osuma,pelaaja
             '       PlaySound vihollinen, 250 
             '       PlayObject osuma,2,11,0.25 
             '   EndIf 
                
                xx=ObjectX(iAlien\obj)
                yy=ObjectY(iAlien\obj)
                ShowObject iAlien\obj, OFF
           
                iAlien\obj = CloneObject(ruumis)
                PositionObject iAlien\obj,xx,yy
                ShowObject iAlien\obj, ON
                ObjectOrder iAlien\obj,1
                
                iAlien\ID=-1 ' estetään toiminnot
                ObjectLife iAlien\obj,300 'poistetaan tietyn ajan kuluttua
                ObjectOrder ruumis,-1
               
            EndIf
        EndIf
    Next iAlien
               
    For iBullet.BULLETS= Each BULLETS
       ' If CountCollisions(ibullet\obj) Then ibullet\hp-32
       ' miksi ammuksella pitäisi olla hp. Tarkistukseen voi suoraan istää councollisions..
       
        MoveObject iBullet\obj,6 'voisit muuttaa MoveObject iBullet\obj,iBullet\speed
        If Distance2(iBullet\obj,pelaaja)>600 Or CountCollisions(ibullet\obj)>0 Then 'jos...niin tuhotaan ammus
            DeleteObject iBullet\obj
            Delete iBullet
        EndIf
    Next iBullet

    DrawGame

    // Valikko
    
    DrawImage yläpalkki ,0,0 
    Text 10,10,"PISTEITÄ :"+tapotpisteet 
    Text 200,10,"TAPOT :"+tapot
    
    Text 20,30, "LISÄÄ HP(4) + 50hp - 30p"
    Text 20,45, "HP nyt = "+hp
    Text 250,30,"LISÄÄ VOIMAA(5) + 5 voima - 20p"
    Text 250,45,"VOIMA nyt = "+voima
    Text 500,30,"LISÄÄ AMMUKSIA(6) + 25 ammusta - 10p"
    Text 500,45,"AMMUKSIA nyt = "+ammukset
    
    '  tapotpisteet <> 30 tarkoittaa samaa kuin Not tapotpisteet=30
    
    // voit muuttaa nämä normaaleiksi if-lauseiksi jos haluat painaa napeja yhtäaikaa
    If KeyHit(cbkey4) And tapotpisteet>30
        hp+50
        tapotpisteet-30
    ElseIf KeyHit(cbkey5) And tapotpisteet>20 
        voima+5
        tapotpisteet-20
    ElseIf KeyHit(cbkey6) And tapotpisteet>10 
        ammukset+25
        tapotpisteet-10
    EndIf
    
    // näistä ei ole mitään hyötyä!!!
    // välttääksesi koko homman kirjoitat vain tapotpisteet>30
  '    If Not tapotpisteet=30 Then 
  '      hp-0
  '      tapotpisteet-0
  '    EndIf
  
    // Tässä kohtaa kannattaa käyttää Updategame- komentoa, koska muuten kuva tökkii reinään törmätessä
    UpdateGame
    
    CloneCameraPosition pelaaja

    DrawScreen

    // tämä Drawscreenin jälkeen, niin tulee ajankohtainen kuva, eikä edelliseltä kierrokselta..
    If KeyHit(cbkeyf12) Then ScreenShot "C:\capture.bmp"////screenshot-komento
Forever
rami123
Advanced Member
Posts: 354
Joined: Mon Jun 23, 2008 8:20 pm
Location: Kittilä

Re: Tyhmät kysymykset

Post by rami123 »

mav tulee heti kun aloittaa..
Locked