Panoksien osto toimii vaan pistoolissa?

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Sun May 13, 2012 11:32 am

Olen tekemässä eräänlaista survival -peliä, mutta pieniä mutkia tuli matkaan: panoksien osto toimii vain pistooliin. Kun kävelet aseen kuvan päälle ja sulla on väh. 100€ ja painat x, se ostaa kädessä olevaan aseeseen lisää panoksia.
Jos ostat panokset pistoolin, tulee oikein. Jos ostat haulikkoon, tulee miten sattuu ja sama rynnäkkökiväärissä. Aseet on tehty tyypeillä ja ne siis käyttävät samaa funktiota. Se, missä järjestyksessä aseet luo tyyppeihin, ei vaikuta tähän ongelmaan.
Kiitos, jos voisitte auttaa.

Koodia:

Code: Select all

SCREEN 800, 600, 0, cbFullScreen

ClsColor 255, 255, 255

Type ENEMY
    Field obj
    Field health
End Type

Type BULLET
    Field objekti
End Type

Type ASE
    Field spread As Float
    Field reloadtime Integer
    Field name As String
    Field bulletspershot As Integer 
    Field damage As Float
    Field mag As Integer
    Field changemag As Integer
    Field bulletsleft As Integer
    Field magsize As Integer
    Field leftsize As Integer
End Type

FrameLimit 30


asekauppa = LoadObject ("Media\asekauppa.bmp", 36)
pelaaja = LoadObject ("Media\soldier.bmp", 72)
vastus = LoadObject ("Media\ukkeli.bmp", 72)
panos = LoadObject ("Media\bullet.bmp")
mouseobj = LoadObject ("Media\mouseimg.bmp")





ShowObject panos, OFF
ShowObject vastus, OFF
haulikko.ASE = New (ASE)
haulikko\spread = Rnd (16)
haulikko\reloadtime = 500
haulikko\name = "Spas 12"
haulikko\bulletspershot = 8
haulikko\damage = 1
haulikko\mag = 64
haulikko\changemag = 7000
haulikko\bulletsleft = 128
haulikko\magsize = 64
haulikko\leftsize = 128

pistooli.ASE = New (ASE)
pistooli\spread = Rnd (2)
pistooli\reloadtime = 500
pistooli\name = "USP .45"
pistooli\bulletspershot = 1
pistooli\damage = 10
pistooli\mag = 8
pistooli\changemag = 3000
pistooli\bulletsleft = 32
pistooli\magsize = 8
pistooli\leftsize = 32


sarjatuli.ASE = New (ASE)
sarjatuli\spread = Rnd (2)
sarjatuli\reloadtime = 120
sarjatuli\name = "M4A1 Sopmod"
sarjatuli\bulletspershot = 1
sarjatuli\damage = 2
sarjatuli\mag = 30
sarjatuli\changemag = 4000
sarjatuli\bulletsleft = 60
sarjatuli\magsize = 30
haulikko\leftsize = 60

current.ASE = First (ASE)


tapot = 0
aika = 60
raha = 0
health2 = 100

ClsColor 255, 255, 255

ScreenPositionObject asekauppa, 50, 500


Repeat 

        Gosub Tekstit
        Gosub Makebullet
        Gosub Checkbullets
        Gosub Moveplayer
        Gosub Mouse
        Gosub Makebot
        Gosub Checkbot
        Gosub Chooseweapon
        Gosub CheckMagazine
        Gosub CheckPlayer  
        Gosub Ammunition
        
    DrawScreen

    
Until EscapeKey()





Tekstit:

    Color 0, 0, 0

    Text 20, 20, "Ase: "+current\name
    If current.ASE = haulikko.ASE
    Text 600, 500, "Lipas: "+current\mag / 8
    Else
    Text 600, 500, "Lipas: "+current\mag
    EndIf     
    If current.ASE = haulikko.ASE
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft / 8
    Else
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft
    EndIf 
    Text 20, 80, "Raha: "+raha
    Text 20, 100, "Tapot: "+tapot
    Text 20, 120, "Health: "+health2
    Text 20, 140, "Aikaa jäljellä: "+aika+" sek"
    
Return

Makebullet:

    If MouseDown (1) And current\mag > 0 And Reloading = False Then
    
        For i = 1 To current\bulletspershot
            luoti.BULLET = New (BULLET)
            luoti\objekti = CloneObject (panos)
            current\mag = current\mag - 1
        
                CloneObjectPosition luoti\objekti, pelaaja
                CloneObjectOrientation luoti\objekti, pelaaja
                
                TurnObject luoti\objekti, Rnd(-current\spread, current\spread)
        Next i
        
            Reloading = True 
            Reloadtimer = Timer ()
        
    EndIf
    
    If Reloading = True And Timer () > Reloadtimer + current\reloadtime Then Reloading = False
    
Return

Checkbullets:

    For luoti.BULLET = Each BULLET
        MoveObject luoti\objekti, 15
        
        If ObjectX (luoti\objekti) < -400 Or ObjectX (luoti\objekti) > 400 Or ObjectY (luoti\objekti) < -300 Or ObjectY (luoti\objekti) > 300 Then
        
            DeleteObject luoti\objekti
            Delete luoti
            
        EndIf
    Next luoti
    
Return  

Moveplayer:

    If KeyDown (17) Then MoveObject pelaaja, 6
    If KeyDown (31) Then MoveObject pelaaja, -w6
    
Return

Mouse:

    ScreenPositionObject mouseobj, MouseX (), MouseY ()
    PointObject pelaaja, mouseobj

    
    ShowMouse OFF

Return

Makebot:

    If vihut < 2 Then
    
        botti.ENEMY = New (ENEMY)
        botti\obj = CloneObject (vastus)
        botti\health = 10
        
        PositionObject botti\obj, Rand (-ScreenWidth () / 2, ScreenWidth () / 2), Rand (-ScreenHeight () / 2, ScreenHeight () / 2)
        PointObject botti\obj, pelaaja
        
        vihut = vihut + 1
        
    EndIf
    
Checkbot:

    For botti.ENEMY = Each ENEMY
        PointObject botti\obj, pelaaja
        MoveObject botti\obj, 1
        
        If ObjectsOverlap (botti\obj, pelaaja) Then 
        
            health2 = health2 - 10
            
            DeleteObject botti\obj
            Delete botti
            
            vihut = vihut - 1
        
        EndIf
        
        If botti\health < 1 Then
        
            DeleteObject botti\obj
            Delete botti
            vihut = vihut - 1
            tapot = tapot + 1
            raha = raha + 10
            
        EndIf
        
    Next botti
            
    For botti.ENEMY = Each ENEMY
        For luoti.BULLET = Each BULLET
        
            If ObjectsOverlap (botti\obj, luoti\objekti) Then
            
                botti\health = botti\health - current\damage
            
                DeleteObject luoti\objekti
                Delete luoti
            
         
            EndIf
        
        Next luoti
    Next botti
    
Return

Chooseweapon:

    If KeyHit (cbKeySpace) Then
    
        If current <> Last (ASE) Then
        
            current.ASE = After (current)
        
        Else 
        
            current.ASE = First (ASE)
        
        EndIf
    
    EndIf
    
Return

CheckMagazine:

    If current\mag = 0 And KeyHit (19) Then

        current\bulletsleft = current\bulletsleft - current\magsize
        current\mag = current\magsize
        
    EndIf

Return 

CheckPlayer:

   If health2 < 1 Then Goto loppu
 
    
Return     
    
loppu:

Cls 

Color 0, 0, 0

Repeat 

        Text 20, 20, "Sait tapettua "+tapot+" jotain ihme tyyppiä :DDDD"
        
    DrawScreen

Until EscapeKey()

Ammunition:

    If ObjectsOverlap (pelaaja, asekauppa) Then
    
        Text 20, 180, "Osta ammuksia painamalla x (hinta 100)"
            If KeyHit (45) And raha > 99 Then
            current\bulletsleft = current\leftsize
            current\mag = current\magsize
            raha = raha - 100
            EndIf 
        
        EndIf 
Return 
Alla oleva liite sis. koodin ja mediat jotta voitte testaa.
Attachments
survival.rar
(650.86 KiB) Downloaded 76 times
Last edited by TukeKoodi on Sun May 13, 2012 5:34 pm, edited 2 times in total.
Aloittelija, koodaaja, jotain...
CbFUN :D

User avatar
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Panoksien osto toimii vaan pistoolissa?

Post by Untitled.bmp » Sun May 13, 2012 12:40 pm

Koska en voi ajaa koodia median puutteessa, en tiedä toimiiko seuraava koodinpätkä, mutta korvaapa se aseiden osto koodi tällä:

Code: Select all

        If ObjectsOverlap (pelaaja, asekauppa) Then
       
            Text 20, 180, "Osta ammuksia painamalla x (hinta 100)"
                If KeyHit (45) And raha > 99 Then
                If current.ASE=First(ASE) Then
                    haulikko\bulletsleft=haulikko\leftsize
                    haulikko\mag = haulikko\magsize
                    raha = raha - 100
                ElseIf current.ASE=After(haulikko.ASE) Then
                    pistooli\bulletsleft=pistooli\leftsize
                    pistooli\mag = pistooli\magsize
                    raha = raha - 100
                ElseIf current.ASE=Last(ASE) Then 
                    sarjatuli\bulletsleft=sarjatuli\leftsize
                    sarjatuli\mag=sarjatuli\magsize
                EndIf 
                EndIf
           
            EndIf
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS

User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Re: Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Sun May 13, 2012 1:29 pm

Tuo ei vaikuta pelin toimivuuteen. Ongelma sinänsä on mielenkiintoinen, koska osto toimii pistoolin kohdalla. Olen kokeillut esim. ostaa ensin haulikkoon panokset, ei toimi. Sen jälkeen pistooliin, toimii.
Aloittelija, koodaaja, jotain...
CbFUN :D

User avatar
Untitled.bmp
Member
Posts: 52
Joined: Sat May 12, 2012 7:11 pm
Location: C:/WINDOWS/system32

Re: Panoksien osto toimii vaan pistoolissa?

Post by Untitled.bmp » Sun May 13, 2012 1:37 pm

Kyseessä voi olla Coolbasicin omia temppuja :P Pystytkö muute ees jotenki kommentoimaan tuota koodia ja ehkäpä muuttamaan tyyppien jäsenet yms suomenkielisiksi, olisi silloin helpompi ymmärtää koodia. Ja nyt näin rehellisesti minä en katsonut ollenkaan muuta, kuin tuota ostokoodia ja sitten sieltä alusta niitä jäsenten luonteja yms. :D
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS

User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Re: Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Sun May 13, 2012 2:10 pm

Code: Select all

SCREEN 800, 600

ClsColor 255, 255, 255

Type ENEMY 'vihollinen
    Field obj 'itse vihollinen
    Field health 'vihollisen elämät
End Type

Type BULLET 'luoti
    Field objekti 'itse luoti
End Type

Type ASE
    Field spread As Float 'luotien hajonta
    Field reloadtime as Integer 'latausaika
    Field name As String 'nimi
    Field bulletspershot As Integer 'ammuksia kerralla (haulikossa 8)
    Field damage As Float 'luodin vahinko
    Field mag As Integer 'lipas
    Field changemag As Integer 'lippaan vaihtoaika
    Field bulletsleft As Integer 'luoteja varastossa
    Field magsize As Integer 'lippaan koko
    Field leftsize As Integer 'luotien maksimimäärä varastossa
End Type
Aloittelija, koodaaja, jotain...
CbFUN :D

User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Panoksien osto toimii vaan pistoolissa?

Post by Misthema » Sun May 13, 2012 3:48 pm

Koodi näytti muuten olevan ihan oikein ja sen pitäisi toimia kuten olet koodissa halunnutkin. Korjasin kuitenkin pari kohtaa:

Code: Select all

SCREEN 800, 600, 0, cbFullScreen

ClsColor 255, 255, 255

Type ENEMY
    Field obj
    Field health
End Type

Type BULLET
    Field objekti
End Type

Type ASE
    Field spread As Float
    Field reloadtime Integer
    Field name As String
    Field bulletspershot As Integer 
    Field damage As Float
    Field mag As Integer
    Field changemag As Integer
    Field bulletsleft As Integer
    Field magsize As Integer
    Field leftsize As Integer
End Type

FrameLimit 30


asekauppa = LoadObject ("Media\asekauppa.bmp", 36)
pelaaja = LoadObject ("Media\soldier.bmp", 72)
vastus = LoadObject ("Media\ukkeli.bmp", 72)
panos = LoadObject ("Media\bullet.bmp")
mouseobj = LoadObject ("Media\mouseimg.bmp")





ShowObject panos, OFF
ShowObject vastus, OFF


//*** Nyt kun muuttuja haulikko on dimmattu ASE:ksi, sen perään ei tarvitse laittaa .ASE enää missään.
Dim haulikko.ASE
haulikko = New (ASE)
haulikko\spread = Rnd (16)
haulikko\reloadtime = 500
haulikko\name = "Spas 12"
haulikko\bulletspershot = 8
haulikko\damage = 1
haulikko\mag = 64
haulikko\changemag = 7000
haulikko\bulletsleft = 128
haulikko\magsize = 64
haulikko\leftsize = 128

Dim pistooli.ASE
pistooli = New (ASE)
pistooli\spread = Rnd (2)
pistooli\reloadtime = 500
pistooli\name = "USP .45"
pistooli\bulletspershot = 1
pistooli\damage = 10
pistooli\mag = 8
pistooli\changemag = 3000
pistooli\bulletsleft = 32
pistooli\magsize = 8
pistooli\leftsize = 32

Dim sarjatuli.ASE
sarjatuli = New (ASE)
sarjatuli\spread = Rnd (2)
sarjatuli\reloadtime = 120
sarjatuli\name = "M4A1 Sopmod"
sarjatuli\bulletspershot = 1
sarjatuli\damage = 2
sarjatuli\mag = 30
sarjatuli\changemag = 4000
sarjatuli\bulletsleft = 60
sarjatuli\magsize = 30
haulikko\leftsize = 60

//*** "Validimpi" tapa määritellä tämä muuttuja ja asettaa sille arvo
Dim current.ASE
current = First (ASE)


tapot = 0
aika = 60
raha = 0
health2 = 100

ClsColor 255, 255, 255

ScreenPositionObject asekauppa, 50, 500


Repeat 

        Gosub Tekstit
        Gosub Makebullet
        Gosub Checkbullets
        Gosub Moveplayer
        Gosub Mouse
        Gosub Makebot
        Gosub Checkbot
        Gosub Chooseweapon
        Gosub CheckMagazine
        Gosub CheckPlayer  
        Gosub Ammunition
        
    DrawScreen

    
Until EscapeKey()





Tekstit:

    Color 0, 0, 0

//*** current ja haulikko ei tarvitse määritelmää .ASE, koska ne molemmat ovat jo niitä.

    Text 20, 20, "Ase: "+current\name
    If current = haulikko
    Text 600, 500, "Lipas: "+current\mag / 8
    Else
    Text 600, 500, "Lipas: "+current\mag
    EndIf     
    If current = haulikko
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft / 8
    Else
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft
    EndIf 
    Text 20, 80, "Raha: "+raha
    Text 20, 100, "Tapot: "+tapot
    Text 20, 120, "Health: "+health2
    Text 20, 140, "Aikaa jäljellä: "+aika+" sek"
    
Return

Makebullet:

    If MouseDown (1) And current\mag > 0 And Reloading = False Then
    
        For i = 1 To current\bulletspershot
            luoti.BULLET = New (BULLET)
            luoti\objekti = CloneObject (panos)
            current\mag = current\mag - 1
        
                CloneObjectPosition luoti\objekti, pelaaja
                CloneObjectOrientation luoti\objekti, pelaaja
                
                TurnObject luoti\objekti, Rnd(-current\spread, current\spread)
        Next i
        
            Reloading = True 
            Reloadtimer = Timer ()
        
    EndIf
    
    If Reloading = True And Timer () > Reloadtimer + current\reloadtime Then Reloading = False
    
Return

Checkbullets:

    For luoti.BULLET = Each BULLET
        MoveObject luoti\objekti, 15
        
        If ObjectX (luoti\objekti) < -400 Or ObjectX (luoti\objekti) > 400 Or ObjectY (luoti\objekti) < -300 Or ObjectY (luoti\objekti) > 300 Then
        
            DeleteObject luoti\objekti
            Delete luoti
            
        EndIf
    Next luoti
    
Return  

Moveplayer:

    If KeyDown (17) Then MoveObject pelaaja, 6
    If KeyDown (31) Then MoveObject pelaaja, -w6
    
Return

Mouse:

    ScreenPositionObject mouseobj, MouseX (), MouseY ()
    PointObject pelaaja, mouseobj

    
    ShowMouse OFF

Return

Makebot:

    If vihut < 2 Then
    
        botti.ENEMY = New (ENEMY)
        botti\obj = CloneObject (vastus)
        botti\health = 10
        
        PositionObject botti\obj, Rand (-ScreenWidth () / 2, ScreenWidth () / 2), Rand (-ScreenHeight () / 2, ScreenHeight () / 2)
        PointObject botti\obj, pelaaja
        
        vihut = vihut + 1
        
    EndIf
    
Checkbot:

    For botti.ENEMY = Each ENEMY
        PointObject botti\obj, pelaaja
        MoveObject botti\obj, 1
        
        If ObjectsOverlap (botti\obj, pelaaja) Then 
        
            health2 = health2 - 10
            
            DeleteObject botti\obj
            Delete botti
            
            vihut = vihut - 1
        
        EndIf
        
        If botti\health < 1 Then
        
            DeleteObject botti\obj
            Delete botti
            vihut = vihut - 1
            tapot = tapot + 1
            raha = raha + 10
            
        EndIf
        
    Next botti
            
    For botti.ENEMY = Each ENEMY
        For luoti.BULLET = Each BULLET
        
            If ObjectsOverlap (botti\obj, luoti\objekti) Then
            
                botti\health = botti\health - current\damage
            
                DeleteObject luoti\objekti
                Delete luoti
            
         
            EndIf
        
        Next luoti
    Next botti
    
Return

Chooseweapon:

    If KeyHit (cbKeySpace) Then
    
//*** Täältä otin myös ne turhat .ASE määritelmät pois. Muuttujat on jo määritelty, joten sitä ei tarvitse aina tehdä uudestaan.    
    
        If current <> Last (ASE) Then
        
            current = After (current)
        
        Else 
        
            current = First (ASE)
        
        EndIf
    
    EndIf
    
Return

CheckMagazine:

    If current\mag = 0 And KeyHit (19) Then

        current\bulletsleft = current\bulletsleft - current\magsize
        current\mag = current\magsize
        
    EndIf

Return 

CheckPlayer:

   If health2 < 1 Then Goto loppu
 
    
Return     
    
loppu:

Cls 

Color 0, 0, 0

Repeat 

        Text 20, 20, "Sait tapettua "+tapot+" jotain ihme tyyppiä :DDDD"
        
    DrawScreen

Until EscapeKey()

Ammunition:

    If ObjectsOverlap (pelaaja, asekauppa) Then
    
        Text 20, 180, "Osta ammuksia painamalla x (hinta 100)"
            If KeyHit (45) And raha > 99 Then
            current\bulletsleft = current\leftsize
            current\mag = current\magsize
            raha = raha - 100
            EndIf 
        
        EndIf 
Return
En pystynyt koodia kokeilemaan, mutta toivottavasti ongelma korjaantui. :)
Muutetut kohdat on kommentoitu "//***" aluilla.

User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Re: Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Sun May 13, 2012 5:16 pm

Tuo ei vaikuta mitenkään. Ladatkaa alla oleva .rar joka sisältää koodin ja mediat.
Attachments
survival.rar
(650.86 KiB) Downloaded 70 times
Last edited by TukeKoodi on Sun May 13, 2012 5:35 pm, edited 1 time in total.
Aloittelija, koodaaja, jotain...
CbFUN :D

User avatar
Konstaduck
Advanced Member
Posts: 267
Joined: Sat Dec 17, 2011 4:09 pm
Location: Nurmijärvi, Finland
Contact:

Re: Panoksien osto toimii vaan pistoolissa?

Post by Konstaduck » Sun May 13, 2012 5:20 pm

No jaa, Memory Acces Violationia heittää heti, kun yritän aukaista. Käyttiksenä Windows 7 Home Premium.

Offia: Tomiiko tuo oikeasti: Vastaavanlaista toteutusta en ole nähnyt.
Jaahas, se olis puolentoistasaturaisen paikka =D

Code: Select all

Dim haulikko.Ammus
haulikko = new(Ammus)

Konstaduck.net
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...

User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Re: Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Sun May 13, 2012 5:36 pm

Nyt toimii. (siis linkki, ei peli)
Aloittelija, koodaaja, jotain...
CbFUN :D

User avatar
Misthema
Advanced Member
Posts: 312
Joined: Mon Aug 27, 2007 8:32 pm
Location: Turku, Finland
Contact:

Re: Panoksien osto toimii vaan pistoolissa?

Post by Misthema » Mon May 14, 2012 12:12 pm

TukeKoodi wrote:Tuo ei vaikuta mitenkään. Ladatkaa alla oleva .rar joka sisältää koodin ja mediat.
Jaa ei vaikuta? Mitähän sitten teit tuohon, ennen kuin laitoit meille pakettia, sillä itse sain ostettua haulikkoon pistoolin lisäksi panoksia.. o_O
Kokeilin siis suoraan tuota exeä, sen jälkeen selasin koodiasi ja huomasin, että se sisälsi minun muutokseni. Exe käännetty tuosta, vai sulla jotain säätöjä siinä?
Joka tapauksessa, panoksien osto aseisiin toimii itsellä. Konekivääriin ostamista en kerennyt kokeilemaan, kun rahat meni muihin ja kuolin. :D



Muokkailin ja laitoin eri aseiden panoksille omat hinnat (ajoin tämän koodin ja se toimi juuri niin kuin pitääkin...):

Code: Select all

SCREEN 800, 600, 0, cbFullScreen

ClsColor 255, 255, 255

Type ENEMY
    Field obj
    Field health
End Type

Type BULLET
    Field objekti
End Type

Type ASE
    Field spread As Float
    Field reloadtime Integer
    Field name As String
    Field bulletspershot As Integer 
    Field damage As Float
    Field mag As Integer
    Field changemag As Integer
    Field bulletsleft As Integer
    Field magsize As Integer
    Field leftsize As Integer
    
    Field bulletCost As Integer 'Panoksien hinta aseeseen
End Type

FrameLimit 30


asekauppa = LoadObject ("Media\asekauppa.bmp", 36)
pelaaja = LoadObject ("Media\soldier.bmp", 72)
vastus = LoadObject ("Media\ukkeli.bmp", 72)
panos = LoadObject ("Media\bullet.bmp")
mouseobj = LoadObject ("Media\mouseimg.bmp")





ShowObject panos, OFF
ShowObject vastus, OFF


//*** Nyt kun muuttuja haulikko on dimmattu ASE:ksi, sen perään ei tarvitse laittaa .ASE enää missään.
Dim haulikko.ASE
haulikko = New (ASE)
haulikko\spread = Rnd (16)
haulikko\reloadtime = 500
haulikko\name = "Spas 12"
haulikko\bulletspershot = 8
haulikko\damage = 1
haulikko\mag = 64
haulikko\changemag = 7000
haulikko\bulletsleft = 128
haulikko\magsize = 64
haulikko\leftsize = 128
haulikko\bulletCost = 50 // Asetin aseiden panoksille hinnan

Dim pistooli.ASE
pistooli = New (ASE)
pistooli\spread = Rnd (2)
pistooli\reloadtime = 500
pistooli\name = "USP .45"
pistooli\bulletspershot = 1
pistooli\damage = 10
pistooli\mag = 8
pistooli\changemag = 3000
pistooli\bulletsleft = 32
pistooli\magsize = 8
pistooli\leftsize = 32
pistooli\bulletCost = 20

Dim sarjatuli.ASE
sarjatuli = New (ASE)
sarjatuli\spread = Rnd (2)
sarjatuli\reloadtime = 120
sarjatuli\name = "M4A1 Sopmod"
sarjatuli\bulletspershot = 1
sarjatuli\damage = 2
sarjatuli\mag = 30
sarjatuli\changemag = 4000
sarjatuli\bulletsleft = 60
sarjatuli\magsize = 30
sarjatuli\leftsize = 60
sarjatuli\bulletCost = 75

//*** "Validimpi" tapa määritellä tämä muuttuja ja asettaa sille arvo
Dim current.ASE
current = First (ASE)


tapot = 0
aika = 60
raha = 0
health2 = 100

ClsColor 255, 255, 255

ScreenPositionObject asekauppa, 50, 500


Repeat 

        Gosub Tekstit
        Gosub Makebullet
        Gosub Checkbullets
        Gosub Moveplayer
        Gosub Mouse
        Gosub Makebot
        Gosub Checkbot
        Gosub Chooseweapon
        Gosub CheckMagazine
        Gosub CheckPlayer  
        Gosub Ammunition
        
    DrawScreen

    
Until EscapeKey()





Tekstit:

    Color 0, 0, 0

//*** current ja haulikko ei tarvitse määritelmää .ASE, koska ne molemmat ovat jo niitä.

    Text 20, 20, "Ase: "+current\name
    If current = haulikko
    Text 600, 500, "Lipas: "+current\mag / 8
    Else
    Text 600, 500, "Lipas: "+current\mag
    EndIf     
    If current = haulikko
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft / 8
    Else
    Text 600, 520, "Panoksia jäljellä: "+current\bulletsleft
    EndIf 
    Text 20, 80, "Raha: "+raha
    Text 20, 100, "Tapot: "+tapot
    Text 20, 120, "Health: "+health2
    Text 20, 140, "Aikaa jäljellä: "+aika+" sek"
    
Return

Makebullet:

    If MouseDown (1) And current\mag > 0 And Reloading = False Then
    
        For i = 1 To current\bulletspershot
            luoti.BULLET = New (BULLET)
            luoti\objekti = CloneObject (panos)
            current\mag = current\mag - 1
        
                CloneObjectPosition luoti\objekti, pelaaja
                CloneObjectOrientation luoti\objekti, pelaaja
                
                TurnObject luoti\objekti, Rnd(-current\spread, current\spread)
        Next i
        
            Reloading = True 
            Reloadtimer = Timer ()
        
    EndIf
    
    If Reloading = True And Timer () > Reloadtimer + current\reloadtime Then Reloading = False
    
Return

Checkbullets:

    For luoti.BULLET = Each BULLET
        MoveObject luoti\objekti, 15
        
        If ObjectX (luoti\objekti) < -400 Or ObjectX (luoti\objekti) > 400 Or ObjectY (luoti\objekti) < -300 Or ObjectY (luoti\objekti) > 300 Then
        
            DeleteObject luoti\objekti
            Delete luoti
            
        EndIf
    Next luoti
    
Return  

Moveplayer:

    If KeyDown (17) Then MoveObject pelaaja, 6
    If KeyDown (31) Then MoveObject pelaaja, -w6
    
Return

Mouse:

    ScreenPositionObject mouseobj, MouseX (), MouseY ()
    PointObject pelaaja, mouseobj

    
    ShowMouse OFF

Return

Makebot:

    If vihut < 2 Then
    
        botti.ENEMY = New (ENEMY)
        botti\obj = CloneObject (vastus)
        botti\health = 10
        
        PositionObject botti\obj, Rand (-ScreenWidth () / 2, ScreenWidth () / 2), Rand (-ScreenHeight () / 2, ScreenHeight () / 2)
        PointObject botti\obj, pelaaja
        
        vihut = vihut + 1
        
    EndIf
    
Checkbot:

    For botti.ENEMY = Each ENEMY
        PointObject botti\obj, pelaaja
        MoveObject botti\obj, 1
        
        If ObjectsOverlap (botti\obj, pelaaja) Then 
        
            health2 = health2 - 10
            
            DeleteObject botti\obj
            Delete botti
            
            vihut = vihut - 1
        
        EndIf
        
        If botti\health < 1 Then
        
            DeleteObject botti\obj
            Delete botti
            vihut = vihut - 1
            tapot = tapot + 1
            raha = raha + 10
            
        EndIf
        
    Next botti
            
    For botti.ENEMY = Each ENEMY
        For luoti.BULLET = Each BULLET
        
            If ObjectsOverlap (botti\obj, luoti\objekti) Then
            
                botti\health = botti\health - current\damage
            
                DeleteObject luoti\objekti
                Delete luoti
            
         
            EndIf
        
        Next luoti
    Next botti
    
Return

Chooseweapon:

    If KeyHit (cbKeySpace) Then
    
//*** Täältä otin myös ne turhat .ASE määritelmät pois. Muuttujat on jo määritelty, joten sitä ei tarvitse aina tehdä uudestaan.    
    
        If current <> Last (ASE) Then
        
            current = After (current)
        
        Else 
        
            current = First (ASE)
        
        EndIf
    
    EndIf
    
Return

CheckMagazine:

    If current\mag = 0 And KeyHit (19) Then

        current\bulletsleft = current\bulletsleft - current\magsize
        current\mag = current\magsize
        
    EndIf

Return 

CheckPlayer:

   If health2 < 1 Then Goto loppu
 
    
Return     
    
loppu:

Cls 

Color 0, 0, 0

Repeat 

        Text 20, 20, "Sait tapettua "+tapot+" jotain ihme tyyppiä :DDDD"
        
    DrawScreen

Until EscapeKey()

Ammunition:

    If ObjectsOverlap (pelaaja, asekauppa) Then
    
        // Tulostetaan paljonko panokset maksavat
        Text 20, 180, "Osta ammuksia painamalla x (hinta "+current\bulletCost+")"
        
        // Tänne myös muutin vakiohinnan tilalle aseiden omat panoksien hinnat
        If KeyHit (45) And raha >= current\bulletCost Then
            current\bulletsleft = current\leftsize
            current\mag = current\magsize
            raha = raha - current\bulletCost
        EndIf 
        
    EndIf 
Return

User avatar
TukeKoodi
Active Member
Posts: 142
Joined: Thu Feb 03, 2011 8:40 pm
Location: C:\Työpöytä

Re: Panoksien osto toimii vaan pistoolissa?

Post by TukeKoodi » Mon May 14, 2012 3:55 pm

Ei toimi. Katsos kun haulikkoon ostaa panoksia, pitäisi tulla lippaaseen 8 ja varastoon 16. Sen sijaan tässä tulee vaan lippaseen 8 ja varastoon 7. Rynnäkkökivääriin tulee 0 lippaaseen ja 30 varastoon.
EDIT:

Oho, minun paketillani ei toimi, mutta sinun toimii. Koodi on sama siltä osin... Outoa, mutta kiits :D

Aloittelija, koodaaja, jotain...
CbFUN :D

Post Reply