g_threepwood Skrevet 5. april 2013 Del Skrevet 5. april 2013 Vi holder på å programmere et Star Wars-spill. Kort fortalt har vi en Rebel som sloss mot en tilfeldig Imperialist. En Rebel kan ha en samling med items. Oppgaven min går ut på følgende: Det skal legges inn to ulike typer gjenstander i spillet: a) Våpen som en rebell (spiller) kan utruste seg med for å øke skaden som kan utføres. En rebell (spiller) kan kun være utrustet med ett våpen, men kan ha flere våpen liggende i samlingen med gjenstander og rebellen (spilleren) skal kunne bytte mellom disse. Imperialsoldater skal også kunne være utrustet med ett våpen, men skal ikke ha noen samling med items/våpen. b) Helsedrikker som rebellen (spilleren) kan drikke under kamp for å øke helsen sin.Både våpen og helsedrikker skal kunne ligge i rebellens (spillerens) samling med gjenstander. Rebel-klassen har bl.a. følgende metoder: public void setMinDamage(int minDamage) { this.minDamage = minDamage >= 5 ? minDamage : 5; } public void setMaxDamage(int maxDamage) { this.maxDamage = maxDamage <= minDamage ? minDamage+5 : maxDamage; } public int attack(Imperial currentEnemy) { int damage = Utils.random(minDamage, maxDamage+1); currentEnemy.changeHealth(-damage); return damage; } Jeg har en Item-klasse som jeg bruker som superklasse for både Weapon- og Medpack-klassen. Hvordan kan jeg implementere at jeg ønsker at et våpen skal kunne legge til ytterligere 20% av den tilfeldig genererte skaden? Lenke til kommentar
FenrisC0de Skrevet 5. april 2013 Del Skrevet 5. april 2013 (endret) Du burde nesten gå bort fra int, da 20% av et heltall ikke nødvendigvis er et heltall.. Dermed er alt du egentlig trenger å gjøre å gange damage med 0.2 hvis du ønsker en fast 20% økning. Eventuelt kan du generere en tilfeldig float mellom 0.0 og 0.2 hvis du ønsker variabel økning. Endret 5. april 2013 av Untouchab1e Lenke til kommentar
Persn Skrevet 5. april 2013 Del Skrevet 5. april 2013 Hvis du ganger ett tall med 0,2 så kommer du til få 80% redusering, for 20% økning så må tallet ganges med 1,2. Lenke til kommentar
FenrisC0de Skrevet 5. april 2013 Del Skrevet 5. april 2013 Hvis du ganger ett tall med 0,2 så kommer du til få 80% redusering, for 20% økning så må tallet ganges med 1,2. Hah stemmer.. Sliten på fredagsettermiddag Lenke til kommentar
SkoMedHull Skrevet 5. april 2013 Del Skrevet 5. april 2013 Du kunne jo eventuelt lage en klasse for å holde samlingen med gjenstander? La oss kalle den Backpack. Da kan du jo lage metoder i den av typen getTotalDamage(int baseDamage) som kan kalles i attack-metoden din. Tenker da at getTotalDamage skal gjøre noe i de baner av å iterere over alle aktive items, summere opp den prosentvise økningen de forskjellige gir, og returnere baseDamage*(1+totalDamageBoost). Noe i disse baner du tenker, eller har jeg misforstått? Lenke til kommentar
g_threepwood Skrevet 6. april 2013 Forfatter Del Skrevet 6. april 2013 (endret) Jeg har allerede en Item-klasse som jeg skal bruke som superklasse for Weapon og Medpack. Det jeg trenger å vite er hvordan kildekoden i Weapon-klassen bør være. Jeg vil ha det slik at når du oppretter et Weapon-objekt, tar den et parameter for hvor mange prosent av den tilfeldig genererte skaden den skal øke angrepet med. F. eks, jeg oppretter et Weapon-objekt, fyller inn verdier for navn, verdi, beskrivelse osv. og et tall for hvor mange prosent den skal øke skaden med. Rebel-klassen har bl.a. følgende metoder: public void setMinDamage(int minDamage) { this.minDamage = minDamage >= 5 ? minDamage : 5;} public void setMaxDamage(int maxDamage) { this.maxDamage = maxDamage <= minDamage ? minDamage+5 : maxDamage;} public int attack(Imperial currentEnemy) { int damage = Utils.random(minDamage, maxDamage+1); currentEnemy.changeHealth(-damage); return damage;} Endret 6. april 2013 av g_threepwood Lenke til kommentar
Persn Skrevet 6. april 2013 Del Skrevet 6. april 2013 Det høres jo ut som du vet mer enn bra nok hvordan du vil at Weapon-klassen skal være, begynn å sett opp noe etter din egen beskrivelse og post resultatet her med ett konkret spørsmål om hva du ikke får til. Lenke til kommentar
SkoMedHull Skrevet 6. april 2013 Del Skrevet 6. april 2013 Hvordan ser Item-klassen ut da? Lenke til kommentar
g_threepwood Skrevet 7. april 2013 Forfatter Del Skrevet 7. april 2013 Vil denne koden stemme hvis jeg vil øke skaden med 20%? public class Weapon extends Item { private int damage; /** * Constructor for objects of class Weapon */ public Weapon(String name, String description, int price, int weight, String action, int damage) { super(name, description, price, weight, action); setDamage(damage); } /** * */ public void setDamage(int damage) { damage = (int)(damage*1.2 + 0.5); } /** * */ public int getDamage() { return damage; } } Som sagt tidligere, vil jeg at man fyller inn 20 i det man oppretter objektet. Hvordan blir det da? Må jeg ikke ta hensyn til maxDamage og minDamage i Rebel-klassen? Lenke til kommentar
g_threepwood Skrevet 8. april 2013 Forfatter Del Skrevet 8. april 2013 Hvordan vet jeg om en metode bør være private, public eller protected? Hvordan vet jeg om en klasse bør være interface eller abstract? Lenke til kommentar
Persn Skrevet 8. april 2013 Del Skrevet 8. april 2013 Vil denne koden stemme hvis jeg vil øke skaden med 20%? public class Weapon extends Item { private int damage; /** * Constructor for objects of class Weapon */ public Weapon(String name, String description, int price, int weight, String action, int damage) { super(name, description, price, weight, action); setDamage(damage); } /** * */ public void setDamage(int damage) { damage = (int)(damage*1.2 + 0.5); } /** * */ public int getDamage() { return damage; } } Som sagt tidligere, vil jeg at man fyller inn 20 i det man oppretter objektet. Hvordan blir det da? Må jeg ikke ta hensyn til maxDamage og minDamage i Rebel-klassen? Argumentene i konstruktøren er det som bestemmer hva som skal tastes inn det objektet opprettes, lag en objektvariabel private double damageEnhancement; eller noe sånt å sett den i konstruktøren. Lenke til kommentar
The Jackal Skrevet 9. april 2013 Del Skrevet 9. april 2013 Hvordan vet jeg om en metode bør være private, public eller protected? Hvordan vet jeg om en klasse bør være interface eller abstract? private metoder: Metoder som kun brukes av klassen de tilhører protected: Metoder som bruker av klassen og/eller subklasser public: Metoder som kalles fra andre klasser igjen interface: Om du ikke har noen som helst kode implementert, så holder det med et interface. En abstract klasse uten noen som helst kode implementert er i praksis et interface. Lenke til kommentar
g_threepwood Skrevet 9. april 2013 Forfatter Del Skrevet 9. april 2013 (endret) OK, følgende sliter jeg veldig mye med, så her mottas all hjelp med takk. Denne koden er relativt straight-forward: String input = inputReader.getInput().trim(); if(input.equalsIgnoreCase("flee")) { flee(); return false; } else if (input.equalsIgnoreCase("attack")) { return attack();} Sett at Rebel har flere våpen i samlingen. Jeg vil lage et kommandoord for å utruste Rebel med et våpen. Jeg vil f. eks skrive "equip Lightsaber" eller "equip Laser Gun", og så ha det som aktivt våpen. Endret 9. april 2013 av g_threepwood Lenke til kommentar
g_threepwood Skrevet 14. april 2013 Forfatter Del Skrevet 14. april 2013 Ta disse to metodene public int attack(Rebel hero) { int damage = Utils.random(minDamage, maxDamage); if(weapon != null) { damage = damage + weapon.getDamageIncrease(); } hero.changeHealth(-damage); return damage; } public int attack(Imperial currentEnemy) { int damage = Utils.random(minDamage, maxDamage+1); if(weapon != null) { damage = damage + weapon.getDamageIncrease(); } currentEnemy.changeHealth(-damage); return damage; } Hvordan ser koden ut for en felles metode i superklassen Character? Lenke til kommentar
The Jackal Skrevet 15. april 2013 Del Skrevet 15. april 2013 public int attack(Character currentEnemy) { int damage = Utils.random(minDamage, maxDamage+1); if(weapon != null) { damage = damage + weapon.getDamageIncrease(); } currentEnemy.changeHealth(-damage); return damage; } noe slikt du trenger? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå