' 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)
EndIfJuu, 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...
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\...
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 taisteluTarkistappa 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.
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
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.
Kokeileppas vaihtaa vielä iskuvalinta muuttuja merkkijono tyyppiseksi ja sitten tuo äskenen neuvoni.
Dim iskuvalinta(0)
->
Dim iskuvalinta$(0)
Juu kiitti ezuli! Nyt se toimii!
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
?
HERRAJUMALA!!! EI!!! MISSÄÄN NIMESSÄ!!!
WTF?
Blaze kirjoitti:
WTF?
Älä muuta sano...
Muuttujatyyppi määritellään CB:ssä lisäämällä nimen perään merkki, esim "dim nimi$" määrittelee nimi -nimisen stringin.
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.
Onhan se, mutta ainakin tuo on kompaktimpi.
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...
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ä?
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.