Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > eines verlangt - alle gesetzt!?
Antwort
 
Themen-Optionen
Alt 06.01.2005, 10:22   Nach oben    #1
Niki_Tesla
Gast
 
Beiträge: n/a
Standard eines verlangt - alle gesetzt!?

Hallo!

An meine kleine schriftliche Ausführung folgend kommt der Programmcode.
Also: Mein Plan war es, ein Spiel (3 in einer Reihe) mit Hilfe von Java zu programmieren.
Es funktioniert auch alles recht gut, bis auf folgendes:

In der Klasse TSquare gibt es eine Funktion "setField", die das vom Benutzer gewünschte Feld in einer 3x3 Matrix mit einem "O" oder einem "X" ausfüllt (anfangswert "A").
Komischerweise wird aber nicht EINES (z.b. Square[0][2] ) ausgefüllt, sondern ALLE Felder der Matrix auf den jeweiligen Wert ( O oder X ) umgeschrieben und das Spiel ist somit aus...

Da ich den Sourcecode nicht posten konnte, findet ihr im Anhang eine ZIP-Datei mit den .java und nötigen .class Dateien

mfg
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2005, 11:30   Nach oben    #2
Fuzzy
Gast
 
Beiträge: n/a
Standard Problem gefunden...

Hi,

Du hattest in den Ausgaben die Laufvariablen nicht korrekt benutzt. Ich habe die Fehler unten korrigiert und das Programm so modifiziert, dass die Hilfsklassen nicht mehr notwendig sind.

Der von Dir gesuchte Fehler lag übrigens in der Ausgabe des Feldes. Da stand statt Square[i][ii] leider Square[x][y].

Ausserdem wurde nofield nie wieder auf true gesetzt...

Java Code:
  1. /*
  2. * TicTacToe.java
  3. *
  4. * Created on 14. Dezember 2004, 22:50
  5. * last edited on 1. January 2005 11:10
  6. *
  7. */
  8.  
  9. package de.javaforen.calculation.threewins;
  10.  
  11. /**
  12. * @author Sebastian Spanner - 0455791
  13. */
  14. public class TicTacToe {
  15.  
  16.     // die Konstanten sind notwendig, um den Fehler im Forum zu überlisten...
  17.     // und ausserdem sind solche Konstanten guter Stil.
  18.     public static final char ersteSpalte = 'A';
  19.     public static final char ersteZeile = '0';
  20.     public static final char noPlayer = 'A';
  21.     public static final char playerO = 'O';
  22.     public static final char playerX = 'X';
  23.    
  24.     public static void main(String argv[]) throws Exception {
  25.  
  26.         String field = null;
  27.         char player = playerO;
  28.         int x = 0, y = 0;
  29.         boolean notfinished = true, nofield = true, cc, cr, cd;
  30.  
  31.         TSquare Spielfeld = new TSquare();
  32.  
  33.         while (notfinished) {
  34.  
  35.             if (player == playerO) {
  36.                 player = playerX;
  37.             } else if (player == playerX) {
  38.                 player = playerO;
  39.             }
  40.  
  41.             nofield = true;
  42.             while (nofield) {
  43.  
  44.                 for (int i = 0; i < 3; i++) {
  45.                     for (int ii = 0; ii < 3; ii++)
  46.                         System.out.print(Spielfeld.Square[i][ii] + " ");
  47.                     System.out.println();
  48.                 }
  49.  
  50.                 System.out.println();
  51.  
  52.                 System.out.println("Spieler " + player + " ist am Zug.");
  53.                 System.out.print("Setze auf Spalte (A-C) und Zeile (0-2:( ");
  54.                 x = System.in.read() - ersteSpalte;
  55.                 y = System.in.read() - ersteZeile;
  56.                 while (System.in.read() != 10)
  57.                     ;
  58.                 nofield = Spielfeld.setField(x, y, player);
  59.             }
  60.  
  61.             cc = Spielfeld.checkColumn();
  62.             cr = Spielfeld.checkRow();
  63.             cd = Spielfeld.checkDiagon();
  64.  
  65.             System.out.println();
  66.  
  67.             for (int i = 0; i < 3; i++) {
  68.                 for (int ii = 0; ii < 3; ii++)
  69.                     System.out.print(Spielfeld.Square[i][ii] + " ");
  70.                 System.out.println();
  71.             }
  72.  
  73.             if (cc || cd || cr) {
  74.                 notfinished = false;
  75.             }
  76.  
  77.         }
  78.  
  79.         System.out.println("Spieler " + player + " hat gewonnen!");
  80.  
  81.     }
  82. }
  83.  
  84. class TSquare {
  85.  
  86.     char[][] Square = new char[3][3];
  87.  
  88.     public TSquare() {
  89.  
  90.         for (int i = 0; i < 3; i++) {
  91.             for (int ii = 0; ii < 3; ii++)
  92.                 Square[i][ii] = TicTacToe.noPlayer;
  93.         }
  94.     }
  95.  
  96.     public boolean setField(int x, int y, char w) {
  97.  
  98.         boolean nofield = false;
  99.  
  100.         if (this.Square[x][y] != TicTacToe.noPlayer) {
  101.             System.out
  102.                     .println("Feld bereits besetzt, bitte auf anderes Feld setzen!");
  103.             nofield = true;
  104.         } else {
  105.             this.Square[x][y] = w;
  106.         }
  107.  
  108.         return nofield;
  109.  
  110.     }
  111.  
  112.     public boolean checkRow() {
  113.  
  114.         boolean cr = false;
  115.  
  116.         for (int i = 0; i < 3; i++) {
  117.             if (this.Square[i][0] == this.Square[i][1]
  118.                     && this.Square[i][1] == this.Square[i][2]
  119.                     && this.Square[i][0] != TicTacToe.noPlayer) {
  120.                 cr = true;
  121.                 break;
  122.             }
  123.         }
  124.  
  125.         return cr;
  126.     }
  127.  
  128.     public boolean checkColumn() {
  129.  
  130.         boolean cc = false;
  131.  
  132.         for (int i = 0; i < 3; i++) {
  133.             if (this.Square[0][i] == this.Square[1][i]
  134.                     && this.Square[1][i] == this.Square[2][i]
  135.                     && this.Square[0][i] != TicTacToe.noPlayer) {
  136.                 cc = true;
  137.                 break;
  138.             }
  139.         }
  140.  
  141.         return cc;
  142.     }
  143.  
  144.     public boolean checkDiagon() {
  145.  
  146.         boolean cd = false;
  147.  
  148.         if (this.Square[0][0] == this.Square[1][1]
  149.                 && this.Square[1][1] == this.Square[2][2]
  150.                 && this.Square[0][0] != TicTacToe.noPlayer) {
  151.             cd = true;
  152.         } else if (this.Square[0][2] == this.Square[1][1]
  153.                 && this.Square[1][1] == this.Square[2][0]
  154.                 && this.Square[0][2] != TicTacToe.noPlayer) {
  155.             cd = true;
  156.         }
  157.  
  158.         return cd;
  159.     }
  160. }

Ich denke, jetzt kannst Du weitermachen.
Viel Erfolg![/highlight]
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.01.2005, 16:39   Nach oben    #3
Niki_Tesla
Gast
 
Beiträge: n/a
Standard

ALLES BESTENS, VIELEN LIEBEN DANK!!!!!!!!!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2005, 17:35   Nach oben    #4
Niki_Tesla
Gast
 
Beiträge: n/a
Standard

aja: kann man eigentlich noch eine sicherheitsroutine (überprüf-schleife) implementieren die nur eingabe werte von A-C (auf stelle 1) und 0-2 (auf stelle 2) zulässt???

mfg
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.01.2005, 22:07   Nach oben    #5
Fuzzy
Gast
 
Beiträge: n/a
Standard Allgemeine Funktion

Ich habe hier mal eine allgemeine Funktion aufgeschrieben, die dafür verwendet werden kann:

Java Code:
  1. public static char getAnswer(String question, String allowedAnswers)
  2.     {
  3.         char choice = ' ';
  4.         do
  5.         {
  6.             if (choice >= ' ')
  7.                 IO.write(question);
  8.             choice = IO.read();
  9.         }
  10.         while (allowedAnswers.indexOf(choice) < 0);
  11.         return choice;
  12.     }

Die Funktion kann wie folgt aufgerufen werden:

Java Code:
  1. char result = getAnswer("Geben Sie die Spalte ein (0-2)", "012");

Erläuterung: Die Funktion fragt solange Eingaben ab, bis die Eingabe eines der Zeichen ist, die im zweiten String vorhanden sind. Wenn ein Zeichen kleiner als das Leerzeichen ist, wird der String nicht erneut ausgegeben. Dies gilt immer dann, wenn der Benutzer sog. Steuerzeichen (Zeileumbruch etc.) eingibt. Wenn die Abfrage fehlt, wird der String doppelt ausgegeben. Ich denke, dass dies auch der Grund für den Bug im anderen Track darstellt.

Viele Grüße!
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[CVS] Leserechte nach Commit für others nicht mehr gesetzt xabbuh Tools, Server, Betriebssysteme 2 19.06.2007 11:28
kl. Zeichenprogramm - Farbe wird nicht gesetzt :*( pro_evo Desktop-Applikationen und Grafik 6 04.02.2005 16:28


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:25 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44