Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: taistelu roolipeliin

Sivun loppuun

Cybeet [23.01.2012 17:35:24]

#

Olen koodaamassa Python 2.7.2:lla tekstipohjaista roolipeliä. Muuten toimii tähän asti ihan hyvin, mutta minun pitäisi saada taistelutilanteessa peli toimimaan siten, että vastustaja menettää jonkinlaisen määrän HP:ta, riippuen käytössä olevasta aseesta. Olin tehnyt sen kirjoittamalla tälläisen koodin:

ase = kirves
if ase == "kirves":
   hyokkaus == "3"
if ase == "miekka":
   hyokkaus == "4"

sitten taistelussa:

vihollinenhp -= hyokkaus/"hyokkaus"

Mutta tuo ei toiminut, joten miten saisin tehtyä vastaavanlaisen, mutta toimivan systeemin?

Toivottavasti tajusitte tuosta jotakin.

Mod. lisäsi kooditagit!

Macro [23.01.2012 17:43:34]

#

1. Älä aseta numeroarvoja lainausmerkkien sisään. Nyt ne ovat merkkijonoja ja niillä ei voi laskea (Vai voiko Pythonissa?).
2. Laita merkkijonot lainausmerkkeihin.
3. Älä jaa merkkijonolla. Nyt jaat muuttujan hyokkaus merkkijonolla hyokkaus.
4. Muuttujien arvot asetetaan =-operaattorilla, == on vertailuun.

ase = "kirves"

if ase == "kirves":
   hyokkaus = 3
if ase == "miekka":
   hyokkaus = 4

vihollinenhp -= hyokkaus

Muokkaus. -tossu-:n antama koodi on varmasti kätevämpi, jos aseita on useampia. Muuten joudut toistamaan samaa if-lausetta jokaisen aseen kohdalla.

-tossu- [23.01.2012 17:46:33]

#

Nykyisessä koodissasi ei ole paljoa järkeä, enkä edes tajua täysin, miten olet koittanut ongelmaa ratkaista. Kokeile kuitenkin jotain tällaista:

aseiden_tehot = {
	"kirves" : 3,
	"miekka" : 4
}

#taistelussa:
vihollinenhp -= aseiden_tehot [ase]

Mikäli vihollisia on useampia, tai vihollisella on HP:n lisäksi muutamaa enemmän ominaisuuksia, kannattaa niiden tiedot tallentaa taulukkoon.

Chiman [23.01.2012 20:30:35]

#

Macro kirjoitti:

... Nyt ne ovat merkkijonoja ja niillä ei voi laskea (Vai voiko Pythonissa?).

Ei voi laskea siten kuin tässä on tarkoitus. Merkkijonon voi kertoa kokonaisluvulla, mutta se on eri asia. Esim. "ha" * 3 tuottaa "hahaha"

Itse ongelmaan tossun ratkaisu on hyvä.

Lebe80 [24.01.2012 14:04:46]

#

Lisäksi saat variaatiota aseen tehoon, kun laitat aseille myös minimi "tehon", ja arvot (miten se Pythonissa meneekään) luvun minimin ja maksimin väliltä.

Esim. kirves 1-5, miekka 3-4.

Cybeet [24.01.2012 17:48:51]

#

En tiedä mikä nyt ei toimi, mutta kirjoitin kaiken -tossu-n antaman ohjeen mukaan, mutta Python valittaa siitä, ettei aseiden_tehot ole määritelty. :(

Mizou [24.01.2012 19:11:44]

#

Annahan koodia sillä ei tuosta voi oikein sanoa missä se virhe on. Jos veikkamaan lähdetään niin olisiko kirjoitusvirhe jossain?

Lebe80 kirjoitti:

Lisäksi saat variaatiota aseen tehoon, kun laitat aseille myös minimi "tehon", ja arvot (miten se Pythonissa meneekään) luvun minimin ja maksimin väliltä.

Esim. kirves 1-5, miekka 3-4.

Tässä yksi mahdollinen tapa:

import random

aseiden_tehot = {
    "kirves" : [1, 5]
}
vihollinenhp -= random.randint(*aseiden_tehot["kirves"])

Macro [24.01.2012 20:08:52]

#

Vai laitotkohan taulukon määrittelyn liian myöhään?


Sivun alkuun

Vastaus

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

Tietoa sivustosta