Avatar billede p_r Nybegynder
09. november 2003 - 21:25 Der er 17 kommentarer og
1 løsning

tekstbaseret spil i java

Vi er et par nybegyndere som sidder og laver et tekstbaseret spil i java. Spillet går ud på at man skal køre rundt i Danmark (hvis du f.eks. er i Odense og giver kommandoen "go south", kommer man til Svendborg.) Når man kører, mister man benzin, men vores problem er så, at vi ikke kan finde ud af, hvordan man mister benzinen og hvad man skal gøre for at fylde benzin på. -Altså hvordan man smartest kan opbygge player-classen med nogle metoder der gør dette.

Vi har 7 klasser:
game
parser
command
city
item
player
commandwords
Avatar billede p_r Nybegynder
09. november 2003 - 21:28 #1
I hver by skal man gennem kommandoen "get gas" få have mulighed for at fylde benzin på. Det er metoden til denne, vi ikke kan gennemskue.
Avatar billede arne_v Ekspert
09. november 2003 - 21:38 #2
Jeres Player klasse (eller Car klasse hvis sådan en er gemt
inde i Player) skal vel have et private member gas, en public
metode getGas til at hente værdien, en metode tank som tæller
den op og så skal move metoderne tælle den ned afhængig af afstanden.

Eller ?
Avatar billede p_r Nybegynder
09. november 2003 - 21:43 #3
det forstår vi ikke helt. Lad os nu sige at bilen max kan køre 3 byer. Hvordan ville man smartest holde styr på hvor meget gas der er i bilen. Er det nødvendigt eller overhovedet muligt med et hashMap? eller er der en bedre løsning?  Kan du komme med et eksempel på en af metoderne hvordan man fx kunne bygge den op? ..  :)
Avatar billede arne_v Ekspert
09. november 2003 - 21:48 #4
Jeg forstår skam heller ikke helt !

Jeg tænker:

public class Player {
    private Position curr;
    private double gas;
    private double usageprkm;
...
    public double getGas() {
      return gas;
    }
...
    public void tank(double fill) {
        gas += fill;
    }
...
    public void move(Position next) {
        gas -= usageprkm * km(curr, next);
        curr = next;
    }
...
}
Avatar billede p_r Nybegynder
09. november 2003 - 22:02 #5
kan jeg egentlig godt forstå...det er nok heller ikke så nemt lige at sætte sig ind i sådan en opgave
men det du har skrevet der ser egentlig meget fornuftigt ud...vi kigger lige på det og så skriver vi igen.
Avatar billede p_r Nybegynder
10. november 2003 - 09:57 #6
public class Player
{
    private String description;
    private int totalweight;
    private int money;
    private int gas;
    private int gasusage;
    private HashMap inventory;
    private int fill;
    private int km;
   

    /**
    * Constructor for objects of class Player
    */
    public Player(String playerDescription, int playerTotalWeight, int playerMoney, int playerGas, int buyGas)
    {
        // initialise instance variables
        description = playerDescription;
        totalweight = playerTotalWeight;
        money = playerMoney;
        gas = playerGas;
        inventory = new HashMap();
        fill = buyGas;
       
       
       
    }

    /**
    * Returns inventory for example Inventory: En sofa
    */
    private String getItemString()
    {
        String returnString = "Inventory:";
        Set keys = inventory.keySet();
        for(Iterator iter = keys.iterator(); iter.hasNext(); )
            returnString += " " + iter.next();
        return returnString;
    }
    public int getMoney()
    {
        return money;
    }
    public void setMoney()
    {
        money -= fill;
    }
    public int getGas()
    {
        return gas;
    }
    public void tankGas()
    {
        gas += fill;
    }
    public void move(Room next)
    {
        gas -= gasusage * km;
    }
}
Avatar billede p_r Nybegynder
10. november 2003 - 09:59 #7
men egentlig behøver det ikke være så kompliceret med kilomter osv.
vi har besluttet at man på en tank bare skal kunne køre 4 byer .. dvs at vær gang kommandoen go west fx bliver brugt skal der være en enhed benzin mindre i tanken ..
Avatar billede p_r Nybegynder
10. november 2003 - 10:02 #8
det ville være super (og 200 point værd) hvis du gad kigge koden her igennem og kommentere og rette fejl (og vi ved der er nogen)
til noget der næsten virker.
Det er meningen at man med en kommando: buy gas. i bestemte byer i hashMappet skal kunne købe 5 enheder benzin eller så noget ..
Håber ikke det er totaluforståeligt .. vi taler ikke helt javasprog endnu kan man vist rolig sige..  :)
Avatar billede arne_v Ekspert
10. november 2003 - 10:49 #9
Der er flere ting jeg ville gøre anderledes.

fill burde være et argument til tankGas ikke en instans variabel. Man
kan sagtens tanke forskelligt.

Burde objektet ikke have en Room variabel der fortæller hvor den er ? Og
så kunne move metoden udregne km odfra den og hvor den skal hen !
Avatar billede arne_v Ekspert
10. november 2003 - 10:51 #10
Jeg ville måske kode getItemString som:

    private String getItemString()
    {
        StringBuffer returnString = new StringBuffer("Inventory:");
        Iterator iter = inventory.keySet().iterator();
        while(iter.hasNext()) {
            returnString.append(" ");
            returnString.append(iter.next());
        }
        return returnString.toString();
    }

men den gør det samme som jeres version, så tænk ikke så meget på det.
Avatar billede arne_v Ekspert
10. november 2003 - 10:54 #11
setMoney skal vel også ændres:

    public void getMoreMoney(int plus)
    {
        money += plus;
    }
    public void spendMoney(int minus)
    {
        money -= minus;
    }
    public void tankGas(int fill)
    {
        gas += fill;
        money -= (price*fill);
    }

for at afspejle virkeligheden.
Avatar billede p_r Nybegynder
13. november 2003 - 11:17 #12
Hej Arne
Undskyld jeg ikke har meldt tilbage .. men vi er lidt pressede..
Hvis du smider et svar så får du points ..
Jeg har et sidste spørgsmål jeg opretter det gerne som et nyt spørgsmål hvis du syntes det er det bedste.
Vi har som tidligere nævnt klasserne game, player og item. Vi vil gerne have sådan at man med kommandoen get Ring  kan samle et item op. Det der skal foregå er at man skal tilføje noget til hashmap inventory i player class og samtidig fjerne det fra Hashmap room i game class .. Hvordan kan man bedste løse dette? altså tage noget fra et hashmap og tilføje det til et andet.

På forhånd mange tak for hjælpen.
Avatar billede arne_v Ekspert
13. november 2003 - 11:24 #13
svar
Avatar billede arne_v Ekspert
13. november 2003 - 11:26 #14
Noget a la:

public movebetweenhashmaps(String key) {
  hashmap1.add(key,hashmap2.remove(key));
}
Avatar billede p_r Nybegynder
13. november 2003 - 11:32 #15
tak for hjælpen
har det ikke noget at sige at hashmaps ligger i 2 forskellige klasser? ..
Avatar billede p_r Nybegynder
13. november 2003 - 11:45 #16
Er det ikke put man skal bruge når det er hashmaps ?
add bliver kun brugt i arraylists eller hvad ?

:D
Avatar billede arne_v Ekspert
13. november 2003 - 11:56 #17
Jo. Sorry. Det gik lige for stærkt.

Pointen var mere den at remove returnerer det objekt den fjerner.
Avatar billede p_r Nybegynder
13. november 2003 - 12:03 #18
tak for hjælpen Arne ..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester