Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: CoolBasic: coola basic muuttujaongelma

Sivun loppuun

ttuoppi [24.07.2004 20:30:31]

#

' Määritellään monia pelissä tarvittavia muuttujia

Dim nimi$(20)  ' Nimien määrittelemiseen
Dim oma_isku(3)  ' Omien iskujen voimakkuuden määrittelemiseen
Dim vihollisen_isku(3)  ' Vihollisen... ks edellinen
Dim kehitys(1)  ' Määrittelee kuinka paljon tarvitaan pisteitä että tulee yksi taso lisää
Dim taso(1)  ' Määrittelee henkilöiden tason
Dim oma_hp(1)  ' Oma energia
Dim vihollisen_hp(1)   ' Vihollisen energia
Dim maxhp(1)  ' Maksimimäärä mikä voi omilla henkilöillä olla energiaa
Dim iskuvalinta(0)  ' iskun valitsemiseen
Dim taistelupisteet(1)  ' Määrittelee kuinka paljon saa pisteitä tason kohottamiseen taistelussa

kehitys(0) = 500
kehitys(1) = 550

oma_isku(0) = 30
oma_isku(1) = 25
oma_isku(2) = 35
oma_isku(3) = 20

vihollisen_isku(0) = 20
vihollisen_isku(1) = 30
vihollisen_isku(2) = 15
vihollisen_isku(3) = 20

maxhp(0) = 150
maxhp(1) = 135

taso(0) = 1
taso(1) = 1

oma_hp(0) = 150
oma_hp(1) = 135

vihollisen_hp(0) = 100
vihollisen_hp(1) = 80

' Kysytään päähenkilöiden nimejä

nimi(0) = Input ("Kirjoita päähenkilön nimi: ")
Cls
nimi(1) = Input ("kirjoita toisen päähenkilön nimi: ")
Cls
volume=0
Sync

' Taistelu järjestelmä johon palataan aina taisteluissa (paitsi pomo taisteluissa)

PlayMusic "C:\Documents and Settings\Tuomas\Omat tiedostot\Ohjelmointi\Media\music\final.mid"
Cls
Print ""
Print "  Taistelu!"
WaitKey

Taistelu:

' Oman 1. pelaajan vuoro

Cls
Sync
Print ""
Print "  Energia " + nimi(0) + ":" + oma_hp(0) + "/" + maxhp(0)
Print "  Energia " + nimi(1) + ":" + oma_hp(1) + "/" + maxhp(1)
Print ""
Print "  Vihollisen energia: " + vihollisen_hp(0)
Print ""
Print "  " + nimi(0)
Print ""
Print "  1)     Isku 1"
Print "  2)     Isku 2"
Print ""
Sync

' Kysytään mitä iskua pelaaja haluaa käyttää

iskuvalinta(0) = Input ("Valinta: ")

' Määritellään mitä tapahtuu jos iskuvalinta on 1

If iskuvalinta(0) = 1 Then
    vihollisen_hp(0) = (vihollisen_hp(0) - oma_isku(0))
    taistelupisteet(0) = (taistelupisteet(0) + 15)
EndIf

' Määritellään mitä tapahtuu jos iskuvalinta on 2

If iskuvalinta(0) = 2 Then

    vihollisen_hp(0) = (vihollisen_hp(0) - oma_isku(1))
    taistelupisteet(0) = (taistelupisteet(0) + 10)
EndIf

Juu, tuossa on pätkä cool basicilla tehtyä peliäni. Tuon pätkän jälkeen tulee vielä toisen pelaajan vuoro ja vihollisen vuoro ja sitten palataan alkuun (jos kaikki henkilöt ovat hengissä).

Ongelma on siinä että

Print "  Vihollisen energia: " + vihollisen_hp(0)

tuo tulostaa aina sata vaikka vihollisen_hp(0):sta vähennetään melkein joka vuoro jotain. olen omasta mielestäni tarkastanut koodin huolella läpi mutta katsokaa jos löydätte jonkin virheen...

EDIT: Otsikkoon tuli yksi liika kirjain...

Antti Laaksonen [24.07.2004 21:03:07]

#

En huomannut tuossa koodissa mitään, mutta varma tapa vian löytämiseen on tutkia vihollisen_hp(0) muuttujan arvoa koodin eri osissa (esim. tulostamalla se ikkunaan). Joko muuttujaa ei muuteta ollenkaan tai sitten sen arvo jostain syystä palautuu ennen uutta kierrosta.

PS. Et voi määrittää musiikin sijaintia noin, koska joka koneella musiikki tuskin on hakemistossa C:\Documents and Settings\Tuomas\...

ttuoppi [24.07.2004 21:14:59]

#

Juu, minä kokeilin tutkia vihollisen_hp(0):n arvoa eri paikoissa ja se on aina sata. Sitä ilmeisesti ei edes muuteta koska se on sata ennen uuden kierroksen alkuakin joka kohdassa. Kummallista...

PS.Tiedän kyllä että musiikin sijaintia ei voi määrittää noin sitten kun laitan tämän levitykseen. Mutta siihen on vielä aikaa joten...

EDIT: Ja tässä tämä loppupätkäkin (pelaajan 2. vuoro uupuu mutta se on joitain muuttujia lukuunottamatta samanlainen kuin ensimmäinen vuoro) taistelu systeemistä (se on vielä kesken, siitä puuttuu vielä esim. esineet ja reagointi siihen jos joku kuolee jne...).

' Määritellään vihollisen hyökkäys

If oma_hp(0) > oma_hp(1) Then

    Randomize Timer()

      If Rand(1, 100) < 50 Then

      Print ""
      Print "  " + nimi(0) + " menetti energiaa " + vihollisen_isku(0) + "Hp!"
      oma_hp(0) = (oma_hp(0) - vihollisen_isku(0))
      WaitKey
      Cls
      Sync

      Else

      Print ""
      Print "  " + nimi(0) + " menetti energiaa " + vihollisen_isku(1) + "Hp!"
      oma_hp(0) = (oma_hp(0) - vihollisen_isku(1))
      WaitKey
      Cls
      Sync

    EndIf

ElseIf oma_hp(0) < oma_hp(1) Then

    Randomize Timer()

        If Rand(1, 100) < 50 Then

        Print ""
        Print "  " + nimi(1) + " menetti energiaa " + vihollisen_isku(0) + "Hp!"
        oma_hp(1) = (oma_hp(1) - vihollisen_isku(0))
        WaitKey
        Cls
        Sync

        Else

        Print ""
        Print "  " + nimi(1) + " menetti energiaa " + vihollisen_isku(1) + "Hp!"
        oma_hp(0) = (oma_hp(1) - vihollisen_isku(1))
        WaitKey
        Cls
        Sync

      EndIf

Else

     Randomize Timer()

        If Rand(1, 100) < 50 Then

        Print ""
        Print "  " + nimi(1) + " menetti energiaa " + vihollisen_isku(0) + "Hp!"
        oma_hp(1) = (oma_hp(1) - vihollisen_isku(0))
        WaitKey
        Cls
        Sync

        Else

        Print ""
        Print "  " + nimi(1) + " menetti energiaa " + vihollisen_isku(1) + "Hp!"
        oma_hp(0) = (oma_hp(1) - vihollisen_isku(1))
        WaitKey
        Cls
        Sync

      EndIf

EndIf

taistelupisteet(0) = (taistelupisteet(0) + 20)

Goto taistelu

Gaxx [24.07.2004 22:11:23]

#

Tarkistappa tuon iskuvalinta(0):n arvo! Epäilen pahasti sitä. Tuossa kun ei tapahdu mitään, jos sen arvo on jokin muu kuin 1 tai 2.

Eli siis input lukee/palauttaa merkkejä, joten joudut muuttamaan ne numeroiksi. En ole käyttänyt CB:tä, joten en osaa sanoa varmanpäälle.

ezuli [24.07.2004 22:43:28]

#

Itselläni oli joskuaika sitten samantapainen ongelma omassa pelissäni.
(Se oli kyllä C:llä, eikä CoolBasicilla)
Se ratkesi tosiaan, kuten Gaxx totesikin, muuttamalla if-tarkistuksen arvo
integeristä stringiksi:

If iskuvalinta(0) = 1 Then
Pitää muuttaa muotoon
If iskuvalinta(0) = "1" Then

ttuoppi [25.07.2004 10:59:42]

#

ezuli kirjoitti:

If iskuvalinta(0) = 1 Then
Pitää muuttaa muotoon
If iskuvalinta(0) = "1" Then

Kokeilin mutta valitti erroria. Kumma juttu koska kyllähän tuossa toimii

oma_hp(0) = (oma_hp(1) - vihollisen_isku(1))

tuokin. Miksei se toimi toisinpäin?

EDIT: Tuossa on yksi pikku vika: oma_hp(0)!!! Mutta olen korjannut sen nyt oma_hp(1)deksi.

ezuli [25.07.2004 11:58:29]

#

Kokeileppas vaihtaa vielä iskuvalinta muuttuja merkkijono tyyppiseksi ja sitten tuo äskenen neuvoni.
Dim iskuvalinta(0)
->
Dim iskuvalinta$(0)

ttuoppi [25.07.2004 13:51:44]

#

Juu kiitti ezuli! Nyt se toimii!

hunajavohveli [26.07.2004 10:20:09]

#

ezuli kirjoitti:

Kokeileppas vaihtaa vielä iskuvalinta muuttuja merkkijono tyyppiseksi ja sitten tuo äskenen neuvoni.
Dim iskuvalinta(0)
->
Dim iskuvalinta$(0)

CoolBasicissako ei siis saa

Dim iskuvalinta(0) As String

?

ttuoppi [26.07.2004 21:58:27]

#

HERRAJUMALA!!! EI!!! MISSÄÄN NIMESSÄ!!!

Blaze [26.07.2004 22:30:11]

#

WTF?

hunajavohveli [27.07.2004 11:24:11]

#

Blaze kirjoitti:

WTF?

Älä muuta sano...

ezuli [27.07.2004 17:33:47]

#

Muuttujatyyppi määritellään CB:ssä lisäämällä nimen perään merkki, esim "dim nimi$" määrittelee nimi -nimisen stringin.

hunajavohveli [27.07.2004 18:11:54]

#

ezuli kirjoitti:

Muuttujatyyppi määritellään CB:ssä lisäämällä nimen perään merkki, esim "dim nimi$" määrittelee nimi -nimisen stringin.

Jooh, toimiihan se noinkin myös QB:ssä ja VB:ssä, mutta oletin nyt myös tuon toisenkin määrittelytavan löytyvän CB:stä.
Edit: Joka on mielestäni muuten paljon selkeämpi kuin tuo merkkitapa.

Juice [27.07.2004 19:55:13]

#

Onhan se, mutta ainakin tuo on kompaktimpi.

hunajavohveli [28.07.2004 13:13:13]

#

Testasinpa vähän enemmän tuota CoolBasicia, ja tulin siihen tulokseen, että se on vielä paikoin todella keskeneräinen. Esimerkiksi TYPE-lauseke, ja monia matemaattisia operaattoreita puuttuu, elleivät ne sitten satu olemaan jollain toisella nimellä. Enpä kyllä ryhtyisi mitään suurempaa projektia tuolla tekemään.

Edit: Näkyy lisäksi häviävän nopeudessa QBasicille...

ttuoppi [28.07.2004 13:40:06]

#

On kai se keskeneräinen mutta minusta kumminkin mukavempi kuin qBasic jolla ei saa mitään kunnollista aikaan. ja onneton on kyllä qbasicin ohjelmointiympäristö...

Ps: Hunajavohveli, päätin kompromissina cbasicin ja qbasicin väliltä tehdä sen fantasiapelin Visualbasicilla!

EDIT: Okei, myönnän että qB:llä saa kunnollisiakin ohjelmia aikaan jos osaa mutta periaatteessa VB:llä saa saman kuin qb:llä mutta myös paljon enemmän. Taidan ruveta opiskeleen kunnolla VB:tä...

EDIT: Onkos muuten olemassa mitään uudempaa (ja ilmaista) VB:tä kuin 3 jolla voi tehdä exe:jä?

Blaze [28.07.2004 14:21:20]

#

ttuoppi kirjoitti:

EDIT: Onkos muuten olemassa mitään uudempaa (ja ilmaista) VB:tä kuin 3 jolla voi tehdä exe:jä?

VB3 ei ole ilmainen. Eikä sillä kyllä mitään (opettelua lukuunottamatta) teekkään, kun sillä ei pääse 32-bittiseen WinApiin käsiksi.

Mutta vastatakseni itse kysymykseen: ei ole.

Latska [29.07.2004 18:07:12]

#

ttuoppi kirjoitti:

EDIT: Onkos muuten olemassa mitään uudempaa (ja ilmaista) VB:tä kuin 3 jolla voi tehdä exe:jä?

Niinkuin Blaze jo totesikin, niin ei ole. Sinun on marssittava tietokoneliikkeeseen noin 600 euroa kukkarossa. Sitten voit ehkä saada jonkun uudehkon kääntäjän.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta