2D阵列井字游戏错误

时间:2020-07-05 11:44:15

标签: java

我目前正在玩井字游戏。游戏已基本完成,但是目前我遇到了一个问题,即扫描仪在完全随机的时间点无法确认我的输入。有时它会工作,但出于我的明显原因,它将完全停止工作。

抱歉,德语字符串也是如此。如有疑问或需要翻译,请随时提出任何问题,但我认为这大多是不言而喻的。我仍然是一个初学者,欢迎任何反馈!

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

public class TicTacToe {

        static ArrayList<Integer> SpielerPositionen = new ArrayList<Integer>();
        static ArrayList<Integer> CpuPositionen = new ArrayList<Integer>();
        
        public static void main(String[] args) {
                
                char[][] spielFeld = {{' ','|',' ','|',' '},
                                      {'-','+','-','+','-'},
                                      {' ','|',' ','|',' '},
                                      {'-','+','-','+','-'},
                                      {' ','|',' ','|',' '}}; 
                
                erstelleSpielFeld(spielFeld);
                
                while(true) {
                        Scanner scan = new Scanner(System.in);
                        System.out.println("Wähle ein freies Feld aus, wo du dein Zeichen setzt. (1 - 9)");
                        int spielerPos = scan.nextInt();
                        while(SpielerPositionen.contains(spielerPos) || CpuPositionen.contains(spielerPos)) {
                                System.out.println("Diese Position ist bereits besetzt! Wählen Sie ein freies Feld aus.");
                                spielerPos = scan.nextInt();
                        }
                        setzeZeichen(spielFeld, spielerPos, "Spieler");
                        
                           String ergebnis = checkSieger();
                           if(ergebnis.length() > 0) {
                                System.out.println(ergebnis);
                                erstelleSpielFeld(spielFeld);
                                  break;
                        }
                                
                        int zufall = (int) (Math.random()*9)+1;
                        int cpuPos = zufall;
                        while(SpielerPositionen.contains(cpuPos) || CpuPositionen.contains(cpuPos)) {
                                cpuPos = zufall;
                        }
                        setzeZeichen(spielFeld, cpuPos, "Cpu");
                        
                        erstelleSpielFeld(spielFeld);
                        
                        ergebnis = checkSieger();
                        if(ergebnis.length() > 0) {
                               System.out.println(ergebnis);
                               erstelleSpielFeld(spielFeld);
                                break;                        
                        }
      }
         }
        


        public static void erstelleSpielFeld(char[][] spielFeld) {
                for(char[] zeile : spielFeld) {
                        for(char spalte : zeile) {
                                System.out.print(spalte);
                        }
                        System.out.println();
                }
        }
        
        public static void setzeZeichen(char[][] spielFeld, int pos, String spieler) {
                
                char symbol = ' ';
                
                if(spieler.equals("Spieler")) {
                        symbol = 'X';
                        SpielerPositionen.add(pos);
                }else if(spieler.equals("Cpu")) {
                        symbol = 'O';
                        CpuPositionen.add(pos);
                }
                
                switch(pos) {
                        case 1:
                                spielFeld[0][0] = symbol;
                                break;
                        case 2:
                                spielFeld[0][2] = symbol;
                                break;
                        case 3:
                                spielFeld[0][4] = symbol;
                                break;
                        case 4:
                                spielFeld[2][0] = symbol;
                                break;
                        case 5:
                                spielFeld[2][2] = symbol;
                                break;
                        case 6:
                                spielFeld[2][4] = symbol;
                                break;
                        case 7:
                                spielFeld[4][0] = symbol;
                                break;
                        case 8:
                                spielFeld[4][2] = symbol;
                                break;
                        case 9:
                                spielFeld[4][4] = symbol;
                                break;
                        default:
                                break;
                }
        }
            public static String checkSieger() {
                
                List Zeile1 = Arrays.asList(1, 2, 3);
                List Zeile2 = Arrays.asList(4, 5, 6);
                List Zeile3 = Arrays.asList(7, 8, 9);
                List Spalte1 = Arrays.asList(1, 4, 7);
                List Spalte2 = Arrays.asList(2, 5, 8);
                List Spalte3 = Arrays.asList(3, 6, 9);
                List KreuzObenUnten = Arrays.asList(1, 5, 9);
                List KreuzUntenOben = Arrays.asList(3, 5, 7);
                
                ArrayList<List> siegen = new ArrayList<List>();
                siegen.add(Zeile1);
                siegen.add(Zeile2);
                siegen.add(Zeile3);
                siegen.add(Spalte1);
                siegen.add(Spalte2);
                siegen.add(Spalte3);
                siegen.add(KreuzObenUnten);
                siegen.add(KreuzUntenOben);
                
                for(List l : siegen) {
                    if(SpielerPositionen.containsAll(l)) {
                        return "Herzlichen Glückwunsch, Sie haben das Spiel gewonnen!";
                    }else if(CpuPositionen.containsAll(l)) {
                        return "Der Computer hat das Spiel gewonnen!";
                    }else if(SpielerPositionen.size() + CpuPositionen.size() == 9) {
                        return "Das Spiel geht Unentschieden aus!";
                    }
                }
                    return "";
            }
}

0 个答案:

没有答案