Gå til innhold

Trenger hjelp med en oppgave


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Untouchab1e
Lenke til kommentar

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

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 av g_threepwood
Lenke til kommentar

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

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

 

 

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

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

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 av g_threepwood
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...