Karten ziehen

Asgar13

Bekanntes Mitglied
Hallo,

habe den Quellcode selbst geschrieben, damit man auf einer Datei "deck.txt" sich Karten ziehen kann, ohne dass doppelte Zahlen kommen.

Kann man diesen so lassen, oder soll man den noch ändern?

Java:
		zufall.addListener(SWT.Selection, new Listener() {
		      public void handleEvent(Event e) {
		        switch (e.type) {
		        case SWT.Selection:
		    		String[] deck = new String[100];
		    		int[] doppelt = new int[5];
		    		int i=0,karte=0,a=0,g=0;
		        	
		    		ausgabe.removeAll();
		        	 try{
		        		 
		    			BufferedReader in = new BufferedReader(new FileReader(file));
		    			

		    			if (!file.exists()){
		    				ausgabe.add("Die angegbene Datei existiert nicht");
		    			}
		    				
		    			if (!file.isFile()){
		    				ausgabe.add("Der angegebene Pfad ist keine Datei");
		    			}
		    				
		    			if(!file.canRead()) {
		    				ausgabe.add("Die angegebene Datei kann nicht gelesen werden");
		    			}
		    			for (String deckbuffer;(deckbuffer = in.readLine()) != null;)
		        		 {
		        			 deck[i]=deckbuffer.toString();
		        			 i++;
		        		 }
		    			in.close();
		        	 }
	                    catch(IOException ioexp){
	                    ausgabe.add("Fehler bei dem IOExecption");
	                    }
	                    catch(Exception exp){
	                    ausgabe.add("Fehler bei dem Execption");}
	                    
		    				for(karte=0;karte<5;karte++){
		    					int random = (int) (Math.random()*i); //Erzeugt Zufallszahl
		    					doppelt[karte]=random; //Speichert die Zufallszahlen in einen Array
		    					for(g=0;g<5;g++){
		    						if(doppelt[karte] != doppelt[g] && karte != g){//Wenn Zahl nicht da war, dann ... 
		    							a++;
		    						}
		    					}
		    					if(a==4){
			    					ausgabe.add(deck[random]);//Fehler x, dann 1,1,1,1
		    					}
		    					else{
		    						karte=0;
		    					}
		    					a=0;
	                    }
		          break;
		        }
		      }
		    });
 

Michael...

Top Contributor
Kann man diesen so lassen, oder soll man den noch ändern?
Lassen kann man das schon, nur funktioniert das dann nicht so wie gewünscht ;-) (Ausser ich hab die "Sollfunktion" nicht verstanden)
Hier mal ein paar Anmerkungen:
- Zunächst mal die drei
Code:
if(!file....
Was nutzt es wenn ausgegeben wird, dass die Datei nicht existiert usw. wenn danach der Code normal weiter läuft?
- Mal abgesehen davon, dass - falls eine der drei Bedingungen zutreffen würde - vorher schon eine Exception beim Erzeugen des BufferedReaders geworfen werden würde.
- Dann in Zeile 28 deckbuffer ist ein String warum noch das toString()
- Ist denn sichergestellt, dass die Datei nicht mehr als 100 Zeilen hat? Falls nein, kann Dir da eine ArrayOutOfBoundsException fliegen.
- Deine Ziehen Methode funktioniert nicht. Der Index 0 kann nicht gezogen werden
- Wenn eine bereits "gezogene" Karte bzw. deren Index nochmal gezogen wird, wird keine neue Karte in ausgabe hinzugefügt, die for-Schleife aber weiter fortgesetzt (oder müssen nicht immer fünf Karten gezogen werden?)

Denke das sollte für's erste mal reichen.
 

Asgar13

Bekanntes Mitglied
Danke für die Antwort, die ersten 3 Punkte werde ich bearbeiten.

Zu Punkt 4, ich kenne keine Kartenspiele, wo man ohne Doppeldecks über 100 Karten hat.
(Lasse den User in seiner eigenen Dummheit sterben) vorgesehen sind zwischen 40-60 Karten

Punkt 5 und 6 teste ich erst mal.
(Müssen immer 5 Karten sein).
 

Landei

Top Contributor
Das ist grauenvoll. Und davon abgesehen: Warum das Rad nochmal erfinden?

Karten in eine Liste einlesen, [c]Collections.shuffle(list);[/c] aufrufen und dann einfach mit [c]String karte = list.remove(0)[/c] von vorn Karten "ziehen".
 

Michael...

Top Contributor
Zu Punkt 4, ich kenne keine Kartenspiele, wo man ohne Doppeldecks über 100 Karten hat.
(Lasse den User in seiner eigenen Dummheit sterben) vorgesehen sind zwischen 40-60 Karten
Der Hintergrund der Anmerkung war eigentlich, dass es z.B. findige User gibt, die solche Dateien editieren und eh man sich versieht sind da ein paar leere Zeilenumbrüche usw. drin. Sowas könnte man ja abfangen - ohne, dass das komplette Programm abstürtzt.
 

muckelzwerg

Bekanntes Mitglied
Ich weiß nicht, was für Spiele Du damit spielen willst. Munchkin hat zum Beispiel fast 200 Karten in einem Set, aber um sowas geht es Dir wohl nicht.
Trotzdem wäre es doch gut, wenn die Größe dynamisch wäre.
 

Asgar13

Bekanntes Mitglied
So sieht der Quellcode jetzt aus:

Problem: String karte = list.remove(0) gibt keinen String zurück sondern ein void.


COMMIT: muss noch die Exceptions abfangen!
Code:
type mismatch: cannot convert from void to int

Irgendwelche Ideen?
Java:
	//Events
		zufall.addListener(SWT.Selection, new Listener() {
		      public void handleEvent(Event e) {
		        switch (e.type) {
		        case SWT.Selection:
		    		int a=0;
		    		String karte;
		    		List intern = new List(shell, SWT.NONE);
		        	
		    		ausgabe.removeAll();
		        	 try{
		        		 
		    			BufferedReader in = new BufferedReader(new FileReader(file));
		    			

		    			if (!file.exists()){
		    				ausgabe.add("Die angegbene Datei existiert nicht");
		    			}
		    			
		    			else{	
		    			
		    				if (!file.isFile()){
		    					ausgabe.add("Der angegebene Pfad ist keine Datei");
		    				}
		    			
		    				else{	
		    					if(!file.canRead()) {
		    						ausgabe.add("Die angegebene Datei kann nicht gelesen werden");
		    					}
		    					else{
		    						for (String deckbuffer;(deckbuffer = in.readLine()) != null;)
		    						{
		    							intern.add(deckbuffer);
		    						}
		    						in.close();
	                    
		    						Collections.shuffle((java.util.List<?>) intern);
	                    
		    						for(a=0;a<5;a++)
		    						{
		    							karte = intern.remove(a);//Fehler void to String
		    							ausgabe.add(karte);
		    						}
		    					}
		    				}
		    			}
		    		}
		        	catch(IOException ioexp){
		        		 ausgabe.add("Fehler bei dem IOExecption");
	                }
	                catch(Exception exp){
	                	ausgabe.add("Fehler bei dem Execption");
	                }
	                break;
		        }
		      }
		    });
 
Zuletzt bearbeitet:

Landei

Top Contributor
Der Code sieht immer noch grauenhaft aus. Mal ein Formatierungs-Tipp: Statt...

Java:
if (gruen) {
   fahre();
} else {
   if (gelb) {
       fahreSchneller();
   } else {
      if (rot) {
          bremse();
      } else { 
          ampelIstAus();
      }
   }
}
...kannst du viel übersichtlicher schreiben:
Java:
if (gruen) {
   fahre();
} else if (gelb) {
    fahreSchneller();
} else if (rot) {
    bremse();
} else {
    ampelIstAus();
}
 

Asgar13

Bekanntes Mitglied
Ok, werde ich machen :)

Das Kartenziehen gebe ich nur in kleinen Kreis weiter und denen erkläre ich auch das mit der Textdatei.

Weißt du auch wie man das Problem von oben Lösen kann, Landei?
 

Landei

Top Contributor
Ich gehe mal davon aus, dass es sich nicht um java.util.List handelt, da würde der Code nämlich funktionieren...

Wenn es eine SWT-Liste ist, musst du in die API schauen, ich kenne mich mit SWT nicht aus. Außerdem funktioniert dann Collections.shuffle nicht, weil es eine java.util.List erwartet.
 

Marco13

Top Contributor
Die "List" die du da verwendest, ist eine SWT List - für das "shuffle" braucht man eine java.util.List. Soll diese "intern"-Liste irgendwo auf dem Bildschirm angezeicht werden? Wenn nicht, sollte es keine SWT List sein.

Und Noch was generelles
Java:
zufall.addListener(SWT.Selection, new Listener() {
    public void handleEvent(Event e) {
        if (e.type == SWT.Selection) { 
            // Kann hier überhaupt was anderes ankommen? 
            // (Kenn' mich mit SWT nicht aus...)
            takeRandomCards();
        }
}

private void takeRandomCards()
{
    List<Card> cards = readCardsFromFile();

    if (cards == null || exceptionWurdeGeworfenOderSo) print("Fehlermeldung");

    Collections.shuffle(cards);
    for(a=0;a<5;a++)
    {
        karte = intern.remove(0);
        ausgabe.add(karte);
    }
}

Darauf hin arbeitend, zu trennen zwischen GUI-Code (SWT Listener zeug), Dateiverarbeitung (readCardsFromFile) und der eigentlichen "Logik" (shuffle+remove).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
nils812 Black Jack Karten Anzahl begrenzen Java Basics - Anfänger-Themen 5
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
X Karten austeilen in Java Java Basics - Anfänger-Themen 3
K Memory-Spiel alle verdeckte karten aufdecken. Java Basics - Anfänger-Themen 26
K Alle noch nicht umgedrehte Karten umdrehen ? Java Basics - Anfänger-Themen 2
A mischen von Karten Java Basics - Anfänger-Themen 4
T Karten zufällig anordnen Java Basics - Anfänger-Themen 4
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
T Lottozahlen ziehen Java Basics - Anfänger-Themen 19
S GUI kann im WindowBuilder nicht mehr (größer kleiner ziehen) Java Basics - Anfänger-Themen 2
I Zeichen aus String ziehen Java Basics - Anfänger-Themen 3
L Applikativer Algorithmuss Wurzel ziehen Java Basics - Anfänger-Themen 10
K Methoden "ziehen ohne zurücklegen" - Kontrollstruktur Java Basics - Anfänger-Themen 4
A Werte per Zufall aus einer Datei ziehen und in eine neue Datei schreiben Java Basics - Anfänger-Themen 9
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
L Randomisierung einer Liste: Ziehen ohne Zurücklegen Java Basics - Anfänger-Themen 5
K JFrame größer ziehen Java Basics - Anfänger-Themen 5
N Datentypen Wurzel aus long ziehen Java Basics - Anfänger-Themen 4
J wurzel ziehen Java Basics - Anfänger-Themen 2
J aktuellen Timestamp ziehen Java Basics - Anfänger-Themen 3
H Rechteck ziehen bei einer Application Java Basics - Anfänger-Themen 2
M Werte quadrieren und Wurzel ziehen Java Basics - Anfänger-Themen 22
R Wurzel ziehen? Java Basics - Anfänger-Themen 24
G gezeichnetes nach Fenster ziehen weg? Java Basics - Anfänger-Themen 2
7 Wurzel ziehen geht nicht :-( Java Basics - Anfänger-Themen 23
P Wurzel ziehen Java Basics - Anfänger-Themen 17
T Wurzel aus einer Double-Zahl ziehen Java Basics - Anfänger-Themen 9
U programmfrage (wurzel ziehen) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben