# Reset bei einem Spiel



## Bengaltiger (23. Apr 2011)

hallo

ich möchte den Spieler zu ermöglichen mitten im spiel wieder neu anzufangen.
doch ich bekomms net ganz hin. es wird zwar resettet, doch das lvl geht weiter wo es aufgehört hat...


hier einige methoden:


```
public static void main(String[] args){
     galaxy.show();
     galaxy.preload();
     galaxy.mainmenu();
     while(playerID==0){}
     Levels();
 }

-----------------------------------------
static void Levels(){
    while(level==0){}
    if(level==1){
    galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
    galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);}}
------------------------------------------
 public void Rockets(int Typ, int Number, int Life, int Act, int Shoot, int Route, int Delay, int Item, boolean Random, int x, int y){
     double generate;
     liferockets=Life;
     at=Act;
     bt=Shoot;
     route=Route;
     items=Item;
     Location loc;
     if(life>0){
     Rockets[] rocket = new Rockets[Number];
     for(n=0; n<rocket.length;n++){
     if(life>0){
     while(galaxy.isPaused()){}
     if(Random==false){
     loc= new Location(x,y);}
     else {
     loc= new Location((int)(x*Math.random()+y),0);}
     rocket[n] = new Rockets("sprites/rocket"+Typ+".gif");
     generate = System.nanoTime() + (Delay*Math.pow(10, 9));
     addActor(rocket[n], new Location(loc));
     rocket[n].hide();
     while(!(System.nanoTime() > generate)){
     rocket[n].show();}}}}
                                                              }
```

betrachten wir mal diese methode

```
static void Levels(){
    while(level==0){}
    if(level==1){
    galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
    galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);}}
```

wenn das spiel mit

```
galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
```
fertig ist und genau da resettet

geht das spiel

```
galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);
```
da weiter :S

hat einer da ne ahnung was man machen könnte???


Danke im vorraus


----------



## Volvagia (23. Apr 2011)

Ist ja ganz normal. Egal was du dort machst wo resettet wird, du musst den momentanen Thread sagen, dass er aufhören soll, sonst fährt er einfach fort. Er weiß ja nichts davon. Du kannst wärend dem ein Haus unter deiner Aufsicht gebaut wird auch nicht zu dir sagen "jetzt fangen wir von vorne an". Wenn du den Arbeitern nichts sagst, wird da nicht viel passieren. 


```
boolean reset;

static void Levels(){
while(level==0){} //TimeUnit.xxx.sleep(xxxL)/Thread.yield() ?
if(level==1){
	do
	{
		reset = false;
		galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
		if(reset)
			continue; //Zurück zur Auswertung.
		galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);
	}
	while(reset);
}
}
```

Das ist aber nur ein simpler Vorschlag, unter den Code kann ich mir nicht viel vorstellen. :noe:


----------



## bengaltiger[m] (24. Apr 2011)

ich kann mir darunter auch kaum was vorstellen, klappt auch net^^

andere vorschläge???


----------



## Quaxli (25. Apr 2011)

Einfach ausgedrückt, mußt Du doch nur alle relevanten Werte auf einen Initial-Status zurück setzen.
Welche das sind, solltest Du als Autor besser wissen als wir.


----------



## Bengaltiger (25. Apr 2011)

ja das weis ich, hab ich ja auch gemacht

aber eine mehode kann man schlecht zurücksetzen oder???


----------



## Gast2 (25. Apr 2011)

Warum willst du eine Methode zurücksetzen ???:L 
Wenn du dein Spiel sauber programmiert hast dann wirst du irgendwo deine Spiellogik haben und dazu ein GameModel das den Status des spiels enthält.
Um dein Spiel zu resetten musst du dann lediglich das GameModel gegen ein neues "leeres" austauschen.


----------



## Bengaltiger (25. Apr 2011)

naja hab es anders gelöst..^^

noch ne frage


```
static void Levels(){
    while(level==0){}
    if(level==1){
    galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
    galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);}}
```

ist es möglich vor den aufruf von


```
galaxy.Rockets(1,6,8,5,5,1,5,3,true,500,50);
    galaxy.Rockets(2,6,4,5,5,2,2,1,false,0,0);
```
die summe der zahlen z.B. an der 2ten Stelle zu bekommen???


----------



## Gast2 (25. Apr 2011)

Da die zahlen hardcodiert sind ist die Summe immer 12 :joke:


----------



## bengaltiger (25. Apr 2011)

eikeb bin von deiner
intelligenz überwältigt-.-
dann stell mal vor du
hast davon 1000 zeilen und du weist net welche zahl da reinkommt


----------



## Volvagia (25. Apr 2011)

Wenn du die Zeile 1000 mal mit anderen Parametern im Source hast solltest du dein Design vielleicht ein ganz klein wenig überdenken.


----------



## Bengaltiger (25. Apr 2011)

kurz gesagt es geht  nicht oder
dann mach ich es auf die altmodische art
mit den 1000zeilen war nur spaß^^


----------



## Volvagia (25. Apr 2011)

Ich finde sowieso, du (und keiner sonst) solltest soetwas hardcoden.
Schreib es doch in ein eine Textdatei, getrennt durch ein Trennzeichen, z. B. ";".
Dann kannst du es sehr viel leichter ändern, und nach dem Lesen hast du ein 2D-Array oder List<String[]> (oder was auch immer du bevorzugst), und kannst damit problemlos rechnen.


----------



## Bengaltiger (25. Apr 2011)

ähhhhhhhm ich check nix bin noch anfänger >.<


----------



## Gast2 (25. Apr 2011)

> eikeb bin von deiner
> intelligenz überwältigt


Ah danke danke, endlich einer der mein genius zu schätzen weiß :applaus:

btt:
Die Zahlen müssen doch irgend ne bedeutung haben. Hast du da mehr zeilen von als die zwei?
Dann is in deinem Design irgendwas ziemlich schief gelaufen 
In der regel hast du in deinem Code keine zahlen außer -1, 0 und 1. Alles andere sind entweder konstanten oder daten die du aus einer externen quelle ließt.


----------



## Bengaltiger (25. Apr 2011)

ja die zahlen haben ne bedeutung..
die an der 2ten stelle steht ist zuständig für erstellen von actors
die zahl gibt an wie viele erstellt werden sollen
diese zahl wird dann ein der for-schleife in dieser methode übergegben

```
public void Rockets(int Typ, int Number, int Life, int Act, int Shoot, int Route, int Delay, int Item, boolean Random, int x, int y){
     double generate;
     liferockets=Life;
     at=Act;
     bt=Shoot;
     route=Route;
     items=Item;
     Location loc;
     if(life>0){
     Rockets[] rocket = new Rockets[Number];
     for(n=0; n<rocket.length;n++){
     if(life>0){
     while(galaxy.isPaused()){}
     if(Random==false){
     loc= new Location(x,y);}
     else {
     loc= new Location((int)(x*Math.random()+y),0);}
     rocket[n] = new Rockets("sprites/rocket"+Typ+".gif");
     generate = System.nanoTime() + (Delay*Math.pow(10, 9));
     addActor(rocket[n], new Location(loc));
     rocket[n].hide();
     while(!(System.nanoTime() > generate)){
     rocket[n].show();}}}}
                                                              }
```

wozu ich die summe vorher brauche?
damit ich so eine fortschritt anzeige machen kann..


----------



## Volvagia (25. Apr 2011)

EikeB hat gesagt.:


> Ah danke danke, endlich einer der mein genius zu schätzen weiß :applaus:


Aber aber, das wissen wir doch alle. 

Sag bloß, du kommst damit klar. ???:L Setz doch ein paar Tabulatoren und mache Leerzeilen.

Du kannst auf einen Wert natürlich erst zugreifen, wenn du eine Variable hast. Das wäre in Rockets der Fall, dort kannst du aber nicht auf dem Wert aus der anderen Methode zugreifen. Deshalb leg es am Besten in Konstanten oder einer externen Datenquelle (Textdatei am einfachsten) ab, dann kannst du schon vorher darauf zugreifen.


----------



## Bengaltiger (25. Apr 2011)

naja schwamm drüber 

wär nett wenn einer von euch mich in icq oder msn adden würden

falls ich iwann weitere fragen hab^^

635591086
bengaltiger@live.de


----------

