Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 1371
Hei, holder på med en oppgave som går ut på å lage et enkelt RPG. Foreløbig er klassene Player, Item og Game opprettet. Holder på med en ArrayList i klassen Player som skal kunne inneholde items og bl.a. ha en metode kalt buyItem som legger inn et item i listen og reduserer spillerens gullbeholdning med gjenstandens verdi, kun hvis totalvekten av Items etter å legge til en ny Item ikke overskrider spillerens kapasitet og spillerens gullbeholdning er større eller lik verdien til gjenstanden. Tror jeg har et greit grunnlag for buyItem men sitter fast og er på utkikk etter tips som kan peke meg i riktig retning.

Item :

Kode

/**
 * A class for defining and creating various items.
 * 
 * @Trygve 
 * @24.02.2013
 */
public class Item
{
    // fields
    private String name;
    private String description;
    private int value;
    private int weight;
    private String action;
    
    /**
     * @param setName the items name
     * @param setDescription the items description
     * @param setValue the items value in gold
     * @param setWeight the items weight in kg
     * @param itemAction the items action
     */
    public Item(String name, String description, int value, int weight, String itemAction)
    {        
        setName(name);
        setDescription(description);
        setValue(value);
        setWeight(weight);
        action = itemAction;
    }
   
    /**
     * Prints info about the item
     */
    public void print() {
        System.out.println("Name: " + name + " Description: " + description + " Value: " + value + " Weight: " + weight);
    }
   
    /**          
     * @return the item name
     */
    public String getName() {            
        return name;    
    }
    
    /**
     * @param name
     */
    public void setName(String newName) {
        if (newName == "") {
	    name = "UNSPECIFIED";
	   } else {
	       name = newName;
	}        
    }
   
    /**
     * @return the item description
     */
    public String getDescription() {
        return description;
    }
    
    /**
     * @param description
     */
    public void setDescription(String newDescription) {
        if (newDescription == "") {
	    description = "UNSPECIFIED";
	   } else {
	       description = newDescription;
	}        
    }
    
    /**
     * @return the value
     */
    public int getValue() {
        return value;
    }
    
    /**
     * @param value
     */
    public void setValue(int newValue) {
        if (newValue >= 0) {
	        value = newValue;
	    } else {
	        value = 0;
	        System.out.println("ERROR! Value can not be less than 0");
	       }	        
    }
    
    /**
     * @return the weight
     */
    public int getWeight() {
        return weight;
    }
    
    /**
     * @param weight
     */
    public void setWeight(int newWeight) {
        if (newWeight >= 0) {
	        weight = newWeight;
	    } else {
	        weight = 0;
	        System.out.println("ERROR! Weight can not be less than 0");
	       }	         
    }
    
    /**
     * @return the items action
     */
    public String getAction() {
        return action;
    }
    
    /**
     * @param action
     */
    public void setAction(String newAction) {
        if (newAction == "") {
	    action = "UNSPECIFIED";
	   } else {
	       action = newAction;
	}
    }
    }
Player :

Kode

import java.util.ArrayList; 

/**
 * Oblig 2 
 * This class represents a Player in a role-playing game.
 * 
 * @author Trygve 
 * @version 0.2
 * 25.02.13
 *
 */
public class Player {

	//fields
	private ArrayList<Item> item;
	private String nick;
	private String type;
	private int health;
	private int balance;
	 
	/**
	 * @param playerNick the players nick
	 * @param setType the players type(valid types are "warrior", "rogue", "mage" and "ranger", lower-case)
	 * @param setBalance the amount of gold a player has(can not be a negative number)
	 */
	public Player(String playerNick, String type, int balance) {
		item = new ArrayList<Item>();
	    nick = playerNick;
		setType(type);
		health = 100;
		setBalance(balance);
	}
	/**
	 * Add an item to the player
	 * @param name for the item to be added
	 */
	public void buyItem(Item itemToBuy) {
	  int value = item.getValue();
	  int weight = item.getWeight();
	  if(value <= balance && weight <= capacity) {
	      item.add(itemToBuy);
	      balance = balance - value;
	      capacity = capacity - weight;
	  } else {
	      System.out.prinln("Insufficient Funds/Not enough capacity");
	  }
	  }
	
	/**
	 * @return true if the player is alive
	 */
	public boolean isAlive() {
		if(health > 0 && health <= 100) {
			return true;
		} else {
		    return false;
		}
	}
	
	/**
	 * Changes the players health
	 * The health can not be less than 0 or exceed 100.
	 * @param healthPoints
	 */
	public void changeHealth(int healthPoints) {
		int temp = health + healthPoints;
		if(temp > 100) {
			health = 100;
		} else if (temp <= 0) {
			health = 0;
		} else {
			health = temp;
		}
	}
	
	/**
	 * Prints info about the player
	 */
	public void print() {
		System.out.println("Nick: " + nick + " Type: " + type);
		System.out.println("Items: " + item);
		if(isAlive()){
			System.out.println("Is alive with health: " + health);
		} else {
			System.out.println("Is dead. Game Over");
		}
	}
	
	/**
	 * @return the players nick
	 */
	public String getNick() {
		return nick;
	}
	
	/**
	 * @param nick
	 */
	public void setNick(String newNick) {
		if (newNick == "") {
	    nick = "UNSPECIFIED";
	   } else {
	       nick = newNick;
	}
   }
	
	/**
	 * @return the players type
	 */
	public String getType() {		
	    return type;
	}
	
	/**
	 * @param new type(valid types are "warrior", "rogue", "mage" and "ranger", lower-case)
	 */
	public void setType(String newType) {
		if(newType == "warrior") {
		    type = newType;
		  } else if (newType == "rogue") {
		      type = newType;
		  } else if (newType == "mage") {
		      type = newType;
		  } else if (newType == "ranger") {
		      type = newType;
		  } else {
		        type = "UNSPECIFIED";
	 }
    }

	/**
	 * @return the players health
	 */
	public int getHealth() {
		return health;
	}
	
	/**
	 * @return the balance
	 */
	public int getBalance() {
	    return balance;
	}
	
	/**
	 * @param set balance
	 */
	public void setBalance(int newBalance) {
	    if (newBalance >= 0) {
	        balance = newBalance;
	    } else {
	        balance = 0;
	       }		
    }
}
sindre@puse.cat:~$
Synderen's Avatar
Det er ikke deklarert noe field som heter capacity. Utenom det ser det ut som metoden skal fungere.
Hei, stemmer at jeg ikke har ordnet capacity enda(glemte å nevne at det ikke var problemet). Det er method getValue(cannot find symbol) jeg får comp error på
med fruktkjøtt.
Tias's Avatar
Crew
I buyItem har du kalt parameteret for itemToBuy, mens du referer til item i metodekroppen. Endre parameteret til "item".
Hei og takk for svar Tias, burde sett den selv. Etter endringene får jeg samme comp error på item.add linjen, noe tips til hva som er galt/mangler der?
edit : glemte å nevne at det står (item) og ikke (itemToBuy) lengre i item.add linjen
Sist endret av keikoburger; 1. mars 2013 kl. 16:16.
Arraylisten din bør hete items, og ikke item. Det er en samling av items, ikke et item. Bare å legge til seg gode programmeringsvaner med en gang

Har du oppdatert koden?

Du prøver: item.getValue(), men item er ikke et item, det er en arraylist. Er problemet at du skal skrive itemToBuy.getValue() og itemToBuy.getWeight()?

Var litt kjapp...

Dette bør funke(så lenge capacity finnes):

Skift navn på arraylisten til items først.

public void buyItem(Item itemToBuy) {
int value = itemToBuy.getValue();
int weight = itemToBuy.getWeight();
if(value <= balance && weight <= capacity) {
items.add(itemToBuy);


Hvis det gjør det

Der ble visst to poster slått sammen til en...

Dette er det du trenger fra posten over:

Dette bør funke(så lenge capacity finnes):

Skift navn på arraylisten til items først.

public void buyItem(Item itemToBuy) {
int value = itemToBuy.getValue();
int weight = itemToBuy.getWeight();
if(value <= balance && weight <= capacity) {
this.items.add(itemToBuy);
Sist endret av yeah00; 1. mars 2013 kl. 16:30.
Hei yeah00, koden ser slik ut nå, uten comp error :

Kode

public class Player {

	//fields
	private ArrayList<Item> items;
	private String nick;
	private String type;
	private int health;
	private int balance;
	 
	/**
	 * @param playerNick the players nick
	 * @param setType the players type(valid types are "warrior", "rogue", "mage" and "ranger", lower-case)
	 * @param setBalance the amount of gold a player has(can not be a negative number)
	 */
	public Player(String playerNick, String type, int balance) {
		items = new ArrayList<Item>();
	    nick = playerNick;
		setType(type);
		health = 100;
		setBalance(balance);
	}
	/**
	 * Add an item to the player
	 * @param name for the item to be added
	 */
	public void buyItem(Item item) {
	  int capacity = 50;
	  int value = item.getValue();
	  int weight = item.getWeight();	  
	  if(value <= balance && weight <= capacity) {
	      items.add(item);
	      balance = balance - value;
	      capacity = capacity - weight;
	  } else {
	      System.out.println("Insufficient Funds/Not enough capacity");
	  }
	  }
edit : postet før jeg så det siste svaret ditt
Sist endret av keikoburger; 1. mars 2013 kl. 16:46.