' 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...
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 taistelu
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.
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.