Level per Zufall erstellen

  • 5 Antworten
  • Letztes Antwortdatum
Q

qweqwe21

Erfahrenes Mitglied
8
Hi ich möchte ein Spiel entwickeln aber ich hab ne Frage man kann ja mit Text dateien das Level gestalten also z.B wo TileTop, TileDirt und so ist wie bei dem Tutorial von Basteldroid (siehe Anhang map2).

Meine Frage nun kann man es so einstellen das die Welt zufällig gemacht wird z.B. (siehe Anhang map3)

Das sozusagen das mein Spielraum ist und in Zeile 1 gibt es Leere Felder und A Felder per zufall und ab Zeile 5 gibt es Leere Felder und B Felder und in den Letzten zwei Zeilen kann der Schatz S sein und Leere Felder und B Felder aber alles mehrmals in allen Zeilen außer den Schatz S gibt es nur einmal.

Bitte helft mir bin 17 Jahre alt und lerne gerade Programmieren.
 

Anhänge

  • map2.txt
    2,1 KB · Aufrufe: 120
  • map3.txt
    492 Bytes · Aufrufe: 115
Code:
Math.random()
Gibt dir einen zufälligen Doublewert von 0 bis 1, wobei 0 vorkommen kann, 1 aber nicht.
Und daraus kansnt du dir dann deinen Level-generator zusammenbasteln.

Code:
(int)(Math.random()*maxZahl)+1
gibt dir dann beispielsweise eine zufällige Zahl von 1 bis maxZahl.

Mit if-else-Kontrukten kansnt du dann noch bestimmte wahrscheinlichkeiten reinbringen.

Code:
int maxZahl = 10;
int zahl = (int)(Math.random()*maxZahl)+1 

if(zahl<8) {
    macheDasEine();
}
else if (zahl>7 && zahl<9) {
   macheDasAndere();
}
else {
   macheDasGanzAndere();
}
In diesem Fall wäre es eine 7 : 2 : 1 - Verteilung. Musst dir das dann einfach passend zusammenbasteln, so wie du es haben möchtest.

Und was den Schatz angeht würde ich da einfach eine boolsche Variable mitlaufen lassen und den Scahtz mit einer geringen wahrscheinlichkeit versehen. Sobald es dann generiert wird wird die variable auf falsch gesetzt und ab da kann er nichtmehr generiert werden.
 
  • Danke
Reaktionen: qweqwe21
Okay danke muss ich dafür eine neue Klasse erstellen oder in die samplegame.Class

Und brauch ich da kein Textdokument mehr oder muss im das Textdokument nur das rein:
1-5 Brown
6 green ... Nur als Beispiel.

Also wird mit der if Anweisung festgelegt was passiert wenn die Zahl x ist.
Angenommen Zahl ist 5 was muss ich dann machen damit im level das Feld z.b wie bild1 aussieht.

Da müsste dann doch das stehen:

Code:
Int maxZahl = 10;
int zahl = (int)(Math.random()*maxZahl)+1 

if(zahl<8) {
macheDasEine();        //hier soll ein braunes Bild hin
}.                                    //also von Nr.1-7 oder? Und was für 
                                      //ein code muss dort hin.
else if (zahl>7 && zahl<9) {
macheDasAndere();
}
else {
macheDasGanzAndere();
}

Und die letzte Frage wäre wenn es eine neue Klasse ist wo sollte sie rein ins ganz normale package, framework package oder ins framework.implementation.
 
Zuletzt bearbeitet:
Okay danke muss ich dafür eine neue Klasse erstellen oder in die samplegame.Class
Ich weiß ja nicht wie bei dir das Level generiert wird..So wie das verstanden habe erzeugst du von Hand Text-Datein, die werden dann eingelesen und daraus wird dann irgendwie das Level erstellt.

Ich würde dann am besten eine Klasse LevelGenerator baue, der dann einfach genau dort verwendet wird, wo du normal aus der Textdatei auslesen würdest. Also du ließt aus keiner Textdatei mehr, sondern lässt dir die Daten vom LevelGenerator liefern. (Beispielsweise als String-Array, wobei dann jeder String für eine Waagerechte Ebene steht).

Code:
String levelData[] = LevelGenerator.getRandomLevel();

/*
* hier werden die Daten dann ganz normal zu einem richtigen Level geniert
*/
Und in der Klasse LevelGenerator dann:

Code:
public static char[][] getRandomLevel() {

    char[][] level;

    //generiere ein zufälliges Level

    return char[][];
}
Und dann gehst du mir Schleifen einfach dein Spielfeld durch und erzeugst zufällig irgendwie Berge und was auch immer du drin haben willst. Musst eben aber wirklich noch was einbauen, dass es zusammenhängende Berge gibt und nicht irgendwo kreuz und quer Bruchstücke verteilt sind^^

Genau kann ich dir das aber auch nicht beschreiben. Ich programmiere selbst erst seit einem monat in Android und hab sowas noch nie erstellt. :D

Und was für ein code muss dort hin.
Das ist dein eigene Aufgabe :D
Das Forum hier ist dazu da, dabei zu helfen Probleme zu lösen, nicht deine programme zu schreiben :)

Probiere am besten einfach mal ein bisschen herum, du bejkommst das schon irgendwie hin^^
 
  • Danke
Reaktionen: qweqwe21
Okay danke ich Versuch es mal.
 
Ich schaffe es nicht wenn ich den code einfüge kommt diese Fehlermeldung bei der LevelGenerator Klasse:

Code:
java.lang.Error: Unresolved compilation problems: 
    This method must return a result of type char[][]
    Syntax error on tokens, delete these tokens
    Syntax error, insert ";" to complete ReturnStatement

    at basteldroid.LevelGenerator.getRandomLevel(LevelGenerator.java:10)
    at basteldroid.StartingClass.start(StartingClass.java:105)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
und diese bei der StartingClass Klasse:
Code:
java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from char[][] to String[]

    at basteldroid.StartingClass.start(StartingClass.java:105)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Und wie soll man überhaupt angeben was es für Feld möglichkeiten gibt wie bild1, bild2 usw.

Ich hab alle Vorschläge von eclipse probiert aber nichts hilft.

Ich hab bei Android developer gelesen das man ein XML Datei erstellen muss für die string array stimmt das?
 
Zuletzt bearbeitet:

Ähnliche Themen

Jennywise
Antworten
2
Aufrufe
658
Jennywise
Jennywise
Zurück
Oben Unten