# [Anfang] Aufbauspiel



## Allgrind (6. Feb 2010)

Hey Ho,

ich habe eben mal angefangen ein bissle mit Java zu spielen, da kam mir die Idee eine Art SimCity nach zubauen, aber erstmal nur Konsolenorientiert,..

Soweit klappt auch alles ganz super,..nur ich möchte alles in die Konsole eingeben,...
und nicht wie es jetzt ist,...jetzt gebe ich alle befehler nur im Java-Editor ein,...

Besteht die möglichkeit das ich diese Befehle wie " Baue ein Haus" eintippe und er führt dann den Befehl aus stadt.get...

usw.








[Java]
public class spielfäche {

  public static void main(String[] args) {

   wirtschaft stadt = new wirtschaft ();

   System.out.println("Spielfeld:");
   System.out.println();
   System.out.println();

   stadt.setEuro(10050);
   stadt.setMiete(20);
   stadt.getBaueKraftwerk();


   stadt.getEuro();
   stadt.getHäuser();
   stadt.getKraftwerk();
   stadt.getMenschen();
   stadt.getMiete();
   stadt.getStrom();

   System.out.println("-----------------------");

   stadt.getBauen();

   System.out.println("-----------------------");

   stadt.getEuro();
   stadt.getHäuser();
   stadt.getKraftwerk();
   stadt.getMenschen();
   stadt.getMiete();
   stadt.getStrom();
  }
}
[/Java]

[Java]
public class wirtschaft {

  // Anfang Attribute
  private int Menschen;
  private int Häuser;
  private int Euro;
  private int bauen;
  private int miete;
  private int strom;
  private int Kraftwerk;
  private int baueKraftwerk;
  // Ende Attribute



  wirtschaft (){

  }

  public wirtschaft (int Menschen, int Euro, int Häuser, int miete){
    this.Menschen=Menschen;
    this.Euro=Euro;
    this.Häuser=Häuser;
    this.miete=miete;

  }


  public int getMenschen() {
    System.out.println("Menschen   "+Menschen);
    return Menschen;
  }
  public void setMenschen(int Menschen) {
    this.Menschen = Menschen;
  }



  public int getHäuser() {
    System.out.println("Häuser     "+Häuser);
    return Häuser;
  }
  public void setHäuser(int Häuser) {
    this.Häuser = Häuser;
  }


  public int getEuro() {
    System.out.println("Euro       "+Euro+" Euro");
    return Euro;
  }
  public void setEuro(int Euro) {
    this.Euro = Euro;
  }


  public int getBauen() {

    if ( (Euro >=1000) & (strom>=50)){
     Häuser=Häuser+1;
     Menschen=Menschen+5;
     Euro=Euro-1000;
     strom=strom-50;
     System.out.println("Es ist ein Haus gebaut wurden");
    }


    else{
      System.out.println("Es konnte kein Haus gebaut werden");
    }
    return bauen;
  }


  public int getMiete() {
    System.out.println("Miete      "+miete+" Euro");
    return miete;
  }

  public void setMiete(int miete) {
    this.miete = miete;
  }


  public int getStrom() {
     System.out.println("Strom:     "+ strom+" KW");

    return strom;
  }




  public int getKraftwerk() {
   System.out.println("Kraftwerk  "+Kraftwerk);

    return Kraftwerk;
  }


  public int getBaueKraftwerk() {
    Kraftwerk=Kraftwerk+1;
    Euro=Euro-5000;
    strom=strom+500;
    return baueKraftwerk;
  }

}
[/Java]



viele Grüße

Joe


----------



## Empire Phoenix (6. Feb 2010)

nen Scanner aus System.in liefert die it read next line, das zuletzt eingegebene inner console (blockt aber bis eine enngabe erfolgt ist)


----------



## Allgrind (6. Feb 2010)

Empire Phoenix hat gesagt.:


> nen Scanner aus System.in liefert die it read next line, das zuletzt eingegebene inner console (blockt aber bis eine enngabe erfolgt ist)



Morgen

meinst du das so?

[Jave]
import java.util.Scanner;

    Scanner scanner = new Scanner(System.in);
    int eingabe = scanner.nextInt();
[/Java]

klappt auch soweit nur wenn ich die befehle eintippe, kommt eine Fehlermeldung,...!!!

viele grüße


----------



## eRaaaa (6. Feb 2010)

Naja du liest ein Integer ein, da kannst du dann schlecht "baue ein Haus" eingeben 
Wieso machst du dir nicht eine Art Menü?


```
1) Bauen
2) Kontostand
3) usw.
```

Evtl. mit Untermenüs ?


----------



## Allgrind (6. Feb 2010)

eRaaaa hat gesagt.:


> Naja du liest ein Integer ein, da kannst du dann schlecht "baue ein Haus" eingeben
> Wieso machst du dir nicht eine Art Menü?
> 
> 
> ...



Hey
das hört sich gut an,...habe aber noch nie was von einem "art-menü" gehört ^^

das muss ich jetzt mal suchen,...und mir angucken,...!!
Gibt es dazu gute Anleitungen!?

viele grüße


----------



## eRaaaa (6. Feb 2010)

Naja, ich meinte etwas in der Art wie:


```
public void menu() {
	System.out.println("Wähle:");
	System.out.println("1.) Baue");
	System.out.println("2.) ....");
	System.out.println("3.) ....");
	System.out.println("4.) Beenden");
	menuAuswahl(scanner.nextInt());
    }

    private void menuAuswahl(int auswahl) {
	switch (auswahl) {
	case 1:
	    System.out.println("es wird ein Haus gebaut"); // hier halt ein entsprechender Methodenaufruf
	    break;
	case 2:
	    System.out.println("....");
	    break;
	default:
	    System.out.println("Falsche Wahl...zurück ins Menu");
	    break;
	}
	menu();
    }
```

Ob es dafür ne Anleitung gibt bezweifele ich , aber man weiß ja nie


----------



## Allgrind (6. Feb 2010)

eRaaaa hat gesagt.:


> Naja, ich meinte etwas in der Art wie:
> 
> 
> ```
> ...



Hey,

wo müsste ich das denn einbauen?

Eigentlich in die Spieldatei,...aber das klappt nicht so wie ich das will ./


[Java]
    public void menu() {
	System.out.println("Wähle:");
	System.out.println("1.) stadt.getBaue");  //<-wäre das so richtig
[/Java]

unten beim Switch gibt der ja nur dazu eine Antwort...

viele grüße


----------



## Steev (6. Feb 2010)

Moin,

vieleicht suchst du so etwas?

[Java]/**
 * @version 1.0
 * @author Steev
 */
public final class IOTools {
    private static void handleException(Exception e) {
        System.out.println("An error occurs while consoleinput:\n" + e);
        System.out.print("Please retry the input: ");
    }

    public static char readChar() {
        return readChar("");
    }

    public static char readChar(String output) {
        System.out.print(output);
        char c = 0;
        try {
            c = (char) System.in.read();
        } catch (Exception e) {
            handleException(e);
            return readChar();
        }
        return c;
    }

    public static String readString() {
        return readString("");
    }

    public static String readString(String output) {
        System.out.print(output);
        char c = 0;
        String line = "";
        while (c != '\n') {
            c = readChar();
            if (c != '\n' && c != '\r')
                line = line.concat("" + c);
        }
        return line;
    }

    public static double readDouble() {
        return readDouble("");
    }

    public static double readDouble(String output) {
        String s = readString(output);
        double d = 0.;
        try {
            d = Double.parseDouble(s);
        } catch (Exception e) {
            handleException(e);
            return readDouble();
        }
        return d;
    }

    public static int readInteger() {
        return readInteger("");
    }

    public static int readInteger(String output) {
        String s = readString(output);
        int n = 0;
        try {
            n = Integer.parseInt(s);
        } catch (Exception e) {
            handleException(e);
            return readInteger();
        }
        return n;
    }

    public static float readFloat() {
        return readFloat("");
    }

    public static float readFloat(String output) {
        String s = readString(output);
        float f = 0.f;
        try {
            f = Float.parseFloat(s);
        } catch (Exception e) {
            handleException(e);
            return readFloat();
        }
        return f;
    }

    public static long readLong() {
        return readLong("");
    }

    public static long readLong(String output) {
        String s = readString(output);
        long l = 0l;
        try {
            l = Long.parseLong(s);
        } catch (Exception e) {
            handleException(e);
            return readLong();
        }
        return l;
    }

    public static short readShort() {
        return readShort("");
    }

    public static short readShort(String output) {
        String s = readString(output);
        short h = 0;
        try {
            h = Short.parseShort(s);
        } catch (Exception e) {
            handleException(e);
            return readShort();
        }
        return h;
    }

    public static byte readByte() {
        return readByte("");
    }

    public static byte readByte(String output) {
        String s = readString(output);
        byte b = 0;
        try {
            b = Byte.parseByte(s);
        } catch (Exception e) {
            handleException(e);
            return readByte();
        }
        return b;
    }

    public static boolean readBoolean() {
        return readBoolean("");
    }

    public static boolean readBoolean(String output) {
        String s = readString(output);
        boolean b = false;
        try {
            b = Boolean.parseBoolean(s);
        } catch (Exception e) {
            handleException(e);
            return readBoolean();
        }
        return b;
    }
}[/Java]

Jedermann darf es verwenden, ich gebe das Programm zur Vereinfachung an (Nachhilfe-)schüler aus.

Verwenden kannst du es für dein Problem so:
[Java]
System.out.println("Was soll gebaut werden?");
System.out.println("A: Haus");
System.out.println("B: Fabrik");
System.out.println("C: Straße");

char c = IOTools.readChar("Bitte eingeben: ");

switch (c) {
  case 'A':
  case 'a':
    buildHouse();
  break;
  case 'B':
  case 'b':
    // usw...
  break;
}
[/Java]

PS:


> System.out.println("1.) stadt.getBaue");  //<-wäre das so richtig



Nein:
[Java]System.out.println("1.) " + stadt.getBaue());  // Das ist richtig!

Gruß
Steev


----------



## Allgrind (6. Feb 2010)

Steev hat gesagt.:


> Moin,
> 
> vieleicht suchst du so etwas?
> 
> ...



wunderbar danke das klappt 

Edit:

Wie kann ich einstellen das ich nicht nur a oder b bei dem Case einstellen kann sondern Haus ,..das ich in der Konsole Haus eintippe und er baut mir ein Haus?

Ich würde das gerne in einer Schleife spielen,...

heißt,...
Informationen
Bauen
Informationen
...
...

aber durch das Break; im switch kann ich keine Schleife benutzen :/

viele grüße


----------



## rogerbuecker (26. Mrz 2010)

Hey bin total neu  ( hier und im Thema Java Programmierung) 

Finde die Idee hier super und habe mir mal erlaubt ein bischen was zu verändern bzw. zu erweitern

Mein neues Hauptmenü :

Was soll gebaut werden?
1: Haus
2: Name
3: Status

1 Baut ein Haus
2 Gibt den von mir neu eingefügten StadtNamen aus
3 Zeigt eine Übersicht 

außerdem kommt man nach jeder Aktion wieder ins Hauptmenü....

Falls jemand Interesse hat mit mir zusammen weiter zu Programmieren ist meine Email Adresse roger.buecker@googlemail.com 

Und jetzt mein veränderter Quellcode

spielfläche.java

```
import java.io.*;

public class spielfäche {
 
  public static void main(String[] args) throws IOException {
 
   wirtschaft stadt = new wirtschaft ();
 
   System.out.println("Spielfeld:");
   System.out.println();
   System.out.println();
   
   stadt.setEuro(10050);
   stadt.setMiete(20);
   stadt.getBaueKraftwerk();
   stadt.setName("Rogerhausen");
 
   int x;
   x=1;  
   while (x <= 100) {   

   System.out.println();
   System.out.println("Was soll gebaut werden?");
   System.out.println("1: Haus");
   System.out.println("2: Name");
   System.out.println("3: Status");
    
   BufferedReader bin = new BufferedReader(
           new InputStreamReader(System.in));

   int eingabe = bin.read();
   
  
   switch (eingabe) {
   case '1':
	   System.out.println("-----------------------");
	   stadt.getBauen();
	   System.out.println("-----------------------");
   break;
   
   case '2':
	   System.out.println("-----------------------");
	   stadt.getName();
	   System.out.println("-----------------------");
   break;
   
   case '3':
	   System.out.println("-----------------------");
	   stadt.status();
	   System.out.println("-----------------------");
   break;
 }
   
   }
    
  }
}
```
wirtschaft.java

```
public class wirtschaft {
 
  // Anfang Attribute
  private int Menschen;
  private int Häuser;
  private int Euro;
  private int bauen;
  private int miete;
  private int strom;
  private int Kraftwerk;
  private int baueKraftwerk;
  private String StadtName;
  // Ende Attribute
 
 
 
  wirtschaft (){
 
  }
  
  public wirtschaft (int Menschen, int Euro, int Häuser, int miete){
    this.Menschen=Menschen;
    this.Euro=Euro;
    this.Häuser=Häuser;
    this.miete=miete;
 
  }
 
 
  public int getMenschen() {
    System.out.println("Menschen   "+Menschen);
    return Menschen;
  }
  
  public String getName() {
	    System.out.println("Stadtname   "+StadtName);
	    return StadtName;
	  }

  public void setName(String Name) {
	    this.StadtName = Name;
	  }
  
  
  public void setMenschen(int Menschen) {
    this.Menschen = Menschen;
  }
  
 
 
  public int getHäuser() {
    System.out.println("Häuser     "+Häuser);
    return Häuser;
  }
  public void setHäuser(int Häuser) {
    this.Häuser = Häuser;
  }
 
 
  public int getEuro() {
    System.out.println("Euro       "+Euro+" Euro");
    return Euro;
  }
  public void setEuro(int Euro) {
    this.Euro = Euro;
  }
 
 
  public int getBauen() {
 
    if ( (Euro >=1000) & (strom>=50)){
     Häuser=Häuser+1;
     Menschen=Menschen+5;
     Euro=Euro-1000;
     strom=strom-50;
     System.out.println("Es ist ein Haus gebaut wurden");
    }
 
    
    else{
      System.out.println("Es konnte kein Haus gebaut werden");
    }
    return bauen;
  }
 
 
  public int getMiete() {
    System.out.println("Miete      "+miete+" Euro");
    return miete;
  }
 
  public void setMiete(int miete) {
    this.miete = miete;
  }
 
 
  public int getStrom() {
     System.out.println("Strom:     "+ strom+" KW");
 
    return strom;
  }
 

  public int getKraftwerk() {
   System.out.println("Kraftwerk  "+Kraftwerk);
  
    return Kraftwerk;
  }
 
 
  public int getBaueKraftwerk() {
    Kraftwerk=Kraftwerk+1;
    Euro=Euro-5000;
    strom=strom+500;
    return baueKraftwerk;
  }
  
  public void status() {
	   this.getEuro();
	   this.getHäuser();
	   this.getKraftwerk();
	   this.getMenschen();
	   this.getMiete();
	   this.getStrom();
	  }
 
}
```


----------



## ARadauer (26. Mrz 2010)

Ich werf das mal ein: Klassen schreibt man groß und Variablen klein.


----------



## rogerbuecker (26. Mrz 2010)

@ ARadauer: Da hast du natürlich recht wie gesagt bin totaler anfänger und mache sowas NOCH nicht automatisch  


werde die Tage weiter Updates posten....


----------



## hdi (26. Mrz 2010)

Ich schieb gleich noch ne ähnlich geartete Anmerkung hinterher 


```
public int getBaueKraftwerk() {
    Kraftwerk=Kraftwerk+1;
    Euro=Euro-5000;
    strom=strom+500;
    return baueKraftwerk;
  }
```

Das ist gar nicht schön. Ein Getter liefert per Definition nur etwas zurück und führt keine Seiteneffekte aus. Durch sowas baut man sich (wenn es dann später etwas komplexer wird) sehr schnell Bugs ein.
Also mach ne Methode void baueKraftwerk() und eine andere Methode int getKraftwerk().
(Wobei ich auch diesen Namen etwas seltsam finde, gemeint ist doch eig. eher getKraftwerkAnzahl() oder?)


----------



## eRaaaa (26. Mrz 2010)

Dann mach ich mal direkt weiter *g*



rogerbuecker hat gesagt.:


> außerdem kommt man nach jeder Aktion wieder ins Hauptmenü....



Wieso hast du das Menü in eine while-Schleife (x <=100 ) verpackt? Auf den ersten Blick wusste ich gar nicht was du damit machen willst, wollte schon antworten, dass das Menü dann aber nur maximal 100 mal angezeigt wird, habe dann gesehen dass du x gar nicht erhöhst, was man ja so nicht erwarten würde...( bei while(true) würde man es direkt erkennen, ist aber evtl. auch unschön..kannst ja nen boolean anlegen oder so und dann im Menü noch einen Punkt "Beenden" einführen, wo dann der boolean gesetzt/verändert wird...oder irgendwie so ähnlich ^^
In jedem Schleifendurchgang einen neuen Reader zu erstellen muss auch nicht unbedingt sein.


----------



## rogerbuecker (29. Mrz 2010)

Hey allerseits erstmal danke für die guten Tipps, 

das mit dem getKraftwerk() und so habe ich vom ersteller übernommen,
habe aber mitlerweile schon so viele neue Methoden hinzugefügt das ich mir auch um die benennung einmal gedanken machen sollte.

Und das mit dem boolean zum beenden finde ich so gut das ich das jetzt direkt einmal einbauen werde.

Werde nicht jede änderung hier posten aber immer mal wieder ein Update machen.

LG Roger


----------

