ZUFALLSFUNKTION in Minesweeper (6x6)?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Ich muss das Spiel Minesweeper (6x6) programmieren und komme eigentlich auch recht gut zurecht. Ich habe vorher XXO programmiert und wandle, so weit es geht, den Quelltext so um, wie ich es gern habe.

Nun gibts zwei Probleme, die mir sehr zu schaffen machen...

(a) 18 Buchstabenpaar sind zu finden, also gibt es A-R Buchstabenpaare. Diese sollen mittels ZUFALLSFUNKTION :? verstreut werden...

(b) Wird ein Paar gefunde, wird dieses aufgedeckt (und bleibt aufgedeckt), ansonsten wirds wieder zugeklappt...

oh gott!

Kann mir vielleicht etwas unter die Arme greifen... :bahnhof:

Code:
import java.io.*; // wird von der Eingabe benötigt 

public class Mines { 
    //Eigenschaften 
    private Kaestchen[][] feld; 
    private static BufferedReader in; // Eingabe 
    
    
 	public static void main(String args[]) {
    Mines spielfeld = new Mines(); 
    spielfeld.spieleEineRunde(); 
    }
    
    
    //Konstruktor 
    
    public Mines() { 
        feld = new Kaestchen[6][6]; 
        for (int i=0;i<6;i++){// senkrecht 
            for (int j=0;j<6;j++){// waagerecht 
                feld[j][i]=new Kaestchen(); 
            } 
        } 
        
        // Vorbereitung für die Eingabe 
        in = new BufferedReader(new InputStreamReader(System.in)); 
                              
    } 
    
    //Methoden 
    public void setzeSpielstein(int x, int y, String stein){ 
        feld[x][y].setzeStein(stein); 
    } 
    
    public void gibSpielAus(){ 
        System.out.println("\n  012345"); 
        for (int i=0;i<6;i++){ 
            System.out.print(i+" "); 
            for (int j=0;j<6;j++){ 
                System.out.print(feld[j][i].getZeichen()); 	
            } 
            System.out.println(); 	// 
        } 
        
    } 

    
	boolean paerchen() 
   {
   
   // ???
   
   }
   
    public void spieleEineRunde(){ 
        
        int x,y; 
        while (!paerchen())
    
        { 
            gibSpielAus(); 
            System.out.println();
            
	do
    {
	System.out.print("\nSpieler X bitte die X-Koordinate (0-5) "); 
           
    try { 				// X-Koordinate
    x=liesInt(); 
        } 
    catch(IOException e) { 
    x=-1; 
            			 }
    }
    while (x!=0 & x!=1 & x!=2 & x!=3 & x!=4 & x!=5);         
    System.out.println();
    
    do
    {
    System.out.print("Spieler X bitte die Y-Koordinate (0-5) "); 

    try { 				// Y-Koordinate
    y=liesInt(); 
    } 
    catch(IOException e) { 
    y=-1; 
    					}
	}
     while (y!=0 & y!=1 & y!=2 & y!=3 & y!=4 & y!=5);
            
     setzeSpielstein(x, y, "X");			// X von Spieler X wird gesetzt.
     gibSpielAus(); 
     System.out.println();
     
     
	do
    {
	System.out.print("\nSpieler O bitte die X-Koordinate (0-5) "); 
           
    try { 				// X-Koordinate
    x=liesInt(); 
        } 
    catch(IOException e) { 
    x=-1; 
            			 }
    }
    while (x!=0 & x!=1 & x!=2 & x!=3 & x!=4 & x!=5);         
    System.out.println();
    
    do
    {
    System.out.print("Spieler O bitte die Y-Koordinate (0-5) "); 

    try { 				// Y-Koordinate
    y=liesInt(); 
    	} 
    catch(IOException e) { 
    y=-1; 
    					}
	}
    while (y!=0 & y!=1 & y!=2 & y!=3 & y!=4 & y!=5);
    setzeSpielstein(x, y, "O"); 
        } 
    } 
    
    // Methode für die Eingabe 
    public int liesInt() throws IOException { 
        try { 
        return Integer.parseInt(in.readLine()); 
        } 
        catch(IOException e) { 
          return (-1); 
        } 
    } 
}

danke!
 

bugatti_1001

Mitglied
ich habe soeben folgendes gefunden:

Code:
List<Character> list = new ArrayList<Character>(); 
      for( int i = 0; i < 18; ++i ) 
      { 
         list.add( (char)('A' + i ) ); // A - R 
         list.add( (char)('Z' - i ) ); // R - A 
      } 
      for( ;list.size() > 0; ) 
      { 
         Collections.shuffle( list ); 
         System.out.println( list.remove( 0 ) ); 
      }

und das der buchstabe mittels String buchstabe = (String)list.remove( index ); rausgefischt(?!) wird...

das ist schonmal ganz schön! nur wie kann ich den quelltext implementieren, so dass das Programm läuft... :bahnhof:
 
S

SlaterB

Gast
was da rauskommt ist übrigens ein char/ Character

und nur ganz vorsorglich, bevor die Frage aufkommt:
nein, ich zumindest werde dir das nicht fertig programmieren ;)
 

jPat

Bekanntes Mitglied
Mach dir 2 forschleifen ineinander geschachtelt, die beide von 0 bis 5 laufen, und in den for schleifen füllst du an der stelle, wo du grad bist ein element aus deiner geschuffelten liste ein. Dann ist dein spielfeld schonmal generiert.
 
S

SlaterB

Gast
Tipp: verwende ein Array oder eine Liste

im Ernst, so funktioniert das hier nicht,
mit Tipps werden spezifische Probleme nicht gelöst,
sondern mit konkreten Fragen und vorallem Problembeschreibungen,

im ganzen Topic wurde bisher nichts anderes gesagt als '18 Karten zufällig verteilen',
mehr als Random + Collections.shuffle() kann man dazu allgemein nicht antworten,
so funktioniert ein Gespräch nicht (siehe wieder oben ;) ),
man geht ja auch nicht zum Supermarkt und sagt 'ich will essen'
 

sliwalker

Top Contributor
Hoi,

das sieht mir auch schwer nach einem Grundgerüst von einer Schule oder Uni aus.

So ein kleines bisschen selbst tun musst Du auch. Einer der einfachsten Methoden ist Math.random(). Die irgendwo rein zu implementieren, sollte doch möglich sein, wenn man sich das einmal anguckt.

Und Collections.shuffle(9 nimmt Dir ebenfalls die ganze Arbeit ab.

Ich kann mich meinen Vorredner nur anschließen...

greetz
SLi
 
G

Guest

Gast
servus. beteilige mich hier jetzt auch mal!
habe das ähnliche problem. habe ebenfalls ein 2-d array, dessen einzelnen Punkte, Felder, Koordinaten (wie auch immer) die eben durch die vorher erstellte, zufällige random-liste "gefüllt werden" müssen.
ob ein char aus dem obigen rauskommt ist primär erstmal irrelevant. es geht darum wie einzelnen stellen, punkte, orte des 2-d arrays die werte aus der random-liste implementieren können!


jPat hat gesagt.:
Mach dir 2 forschleifen ineinander geschachtelt, die beide von 0 bis 5 laufen, und in den for schleifen füllst du an der stelle, wo du grad bist ein element aus deiner geschuffelten liste ein. Dann ist dein spielfeld schonmal generiert.

also, dat kriegn wa schon irjendwie hieh!!

cheers kks
 

madboy

Top Contributor
Erstellen und Mischen einer Liste:
Code:
       ArrayList<String> list = new ArrayList<String>();
        list.add("A");
        list.add("B");
        Collections.shuffle(list);

Füllen des 2D-Arrays mit 2 geschachtelten for-Schleifen wie bereits mehrfach erwähnt
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben