我目前正在玩井字游戏。游戏已基本完成,但是目前我遇到了一个问题,即扫描仪在完全随机的时间点无法确认我的输入。有时它会工作,但出于我的明显原因,它将完全停止工作。
抱歉,德语字符串也是如此。如有疑问或需要翻译,请随时提出任何问题,但我认为这大多是不言而喻的。我仍然是一个初学者,欢迎任何反馈!
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 "";
}
}