Не могу понять, как мне сделать очередность игроков в классе Player
, то есть при начале игры, я хочу чтобы первый игрок начал свой ход со второй клетки, но никак не могу понять, как это сделать, и как лучше реализовать класс Computer
.
Подразумевается произвольное заполнение массива с клетки 1 по 9 переменной типа String
. Как это можно сделать?
Дайте пару советов, уже битый день бьюсь над этими двумя проблемами, ничего в голову не приходит.
Ниже предоставлены коды всех имеющихся классов:
AbGame.java
package homeworks;
public abstract class AbGame {
abstract void game();
abstract void choice();
abstract void displaying();
abstract void checking();
}
Player.java
package homeworks;
import java.util.Scanner;
public class Player {
protected String cell;
public void play() {
Game gm = new Game();
Scanner in = new Scanner(System.in);
int k = 0;
System.out.println("Enter the cell:");
while (k < 1) {
switch (cell = in.next()) {
case "1": {
if (Game.field[0][0].equals(" [ ] ") && !Game.field[0][0].equals(" [O] ")) {
Game.field[0][0] = (" [X] ");
gm.displaying();
k++;
break;
} else if (Game.field[0][0].equals(" [ ] ") && !Game.field[0][1].equals(" [X] ")) {
Game.field[0][0] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "2": {
if (Game.field[0][1].equals(" [ ] ") && !Game.field[0][1].equals(" [O] ")) {
Game.field[0][1] = (" [O] ");
gm.displaying();
k++;
break;
} else if (Game.field[0][1].equals(" [ ] ") && !Game.field[0][1].equals(" [X] ")) {
Game.field[0][1] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "3": {
if (Game.field[0][2].equals(" [ ] ") && !Game.field[0][2].equals(" [O] ")) {
Game.field[0][2] = (" [X] ");
gm.displaying();
k++;
break;
} else if (Game.field[0][2].equals(" [ ] ") && !Game.field[0][2].equals(" [X] ")) {
Game.field[0][2] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "4": {
if (Game.field[1][0].equals(" [ ] ") && !Game.field[1][0].equals(" [O] ")) {
Game.field[1][0] = (" [O] ");
gm.displaying();
k++;
break;
} else if (Game.field[1][0].equals(" [ ] ") && !Game.field[1][0].equals(" [X] ")) {
Game.field[1][0] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "5": {
if (Game.field[1][1].equals(" [ ] ") && !Game.field[1][1].equals(" [O] ")) {
Game.field[1][1] = (" [X] ");
gm.displaying();
k++;
break;
} else if (Game.field[1][1].equals(" [ ] ") && !Game.field[1][1].equals(" [X] ")) {
Game.field[1][1] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "6": {
if (Game.field[1][2].equals(" [ ] ") && !Game.field[1][2].equals(" [O] ")) {
Game.field[1][2] = (" [O] ");
gm.displaying();
k++;
break;
} else if (Game.field[1][2].equals(" [ ] ") && !Game.field[1][2].equals(" [X] ")) {
Game.field[1][2] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "7": {
if (Game.field[2][0].equals(" [ ] ") && !Game.field[2][0].equals(" [O] ")) {
Game.field[2][0] = (" [X] ");
gm.displaying();
k++;
break;
} else if (Game.field[2][0].equals(" [ ] ") && !Game.field[2][0].equals(" [X] ")) {
Game.field[2][0] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "8": {
if (Game.field[2][1].equals(" [ ] ") && !Game.field[2][1].equals(" [O] ")) {
Game.field[2][1] = (" [O] ");
gm.displaying();
k++;
break;
} else if (Game.field[2][1].equals(" [ ] ") && !Game.field[2][1].equals(" [X] ")) {
Game.field[2][1] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "9": {
if (Game.field[2][2].equals(" [ ] ") && !Game.field[2][2].equals(" [O] ")) {
Game.field[2][2] = (" [X] ");
gm.displaying();
k++;
break;
} else if (Game.field[2][2].equals(" [ ] ") && !Game.field[2][2].equals(" [X] ")) {
Game.field[2][2] = (" [O] ");
gm.displaying();
k++;
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
default:
System.out.println("\nError enter again!");
break;
}
}
}
}
Main.java
package homeworks;
public class Main {
public static void main(String[] args) {
System.out.println("Welcome to the game TicTacToe!");
Game gm = new Game();
gm.game();
}
}
Computer.java
package homeworks;
import java.util.Scanner;
public class Computer extends Player {
@Override
public void play() {
Game gm = new Game();
Scanner in = new Scanner(System.in);
int i = 0;
while (i < 9) {
System.out.println("Enter the cell:");
switch (cell = in.next()) {
case "1": {
if (Game.field[0][0].equals(" [ ] ")) {
Game.field[0][0] = (" [X] ");
i++;
Game.field[0][1] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "2": {
if (Game.field[0][1].equals(" [ ] ")) {
Game.field[0][1] = (" [X] ");
i++;
Game.field[0][2] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "3": {
if (Game.field[0][2].equals(" [ ] ")) {
Game.field[0][2] = (" [X] ");
i++;
Game.field[1][0] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "4": {
if (Game.field[1][0].equals(" [ ] ")) {
Game.field[1][0] = (" [X] ");
i++;
Game.field[1][1] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "5": {
if (Game.field[1][1].equals(" [ ] ")) {
Game.field[1][1] = (" [X] ");
i++;
Game.field[1][2] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "6": {
if (Game.field[1][2].equals(" [ ] ")) {
Game.field[1][2] = (" [X] ");
i++;
Game.field[2][0] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "7": {
if (Game.field[2][0].equals(" [ ] ")) {
Game.field[2][0] = (" [X] ");
i++;
Game.field[2][1] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "8": {
if (Game.field[2][1].equals(" [ ] ")) {
Game.field[2][1] = (" [X] ");
i++;
Game.field[2][2] = (" [O] ");
i++;
gm.displaying();
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
case "9": {
if (Game.field[2][2].equals(" [ ] ")) {
Game.field[2][2] = (" [X] ");
i++;
Game.field[0][0] = (" [O] ");
gm.displaying();
i++;
System.out.println("Move of Computer");
break;
} else {
System.out.println("This cell is not empty, enter another one");
break;
}
}
default:
System.out.println("\nError enter again!");
break;
}
}
}
}
Game.java
package homeworks;
import java.util.Scanner;
public class Game extends AbGame {
public static String[][] field = new String[3][3];
private int i = 0;
Player players[] = new Player[5];
Computer x = new Computer();
public void game() {
for (int i = 0; i < 3; i++) {
System.out.println();
for (int j = 0; j < 3; j++) {
field[i][j] = (" [ ] ");
System.out.print(field[i][j]);
}
}
choice();
}
public void choice() {
Scanner ex = new Scanner(System.in);
String re;
System.out.println("\nWould you like to play with computer?");
do {
re = ex.next();
if (re.equals("N")) {
while (i < 9) {
for (int i = 0; i < 2; i++) {
System.out.println("Move of Player " + (i + 1));
players[i] = new Player();
players[i].play();
}
}
} else if (re.equals("Y")) {
x.play();
}
} while (re.equals("N") || re.equals("Y"));
}
public void checking() {
for (int t = 0; t < 3; t++) {
if (((field[t][0]) == " [O] " & (field[t][1]) == " [O] " & field[t][2] == " [O] ") ||
((field[0][t]) == " [O] " & (field[1][t]) == " [O] " & field[2][t] == " [O] ")) {
System.out.print("\nWinner Player 2!");
System.exit(0);
} else if (((field[t][0]) == " [X] " & (field[t][1]) == " [X] " & field[t][2] == " [X] ") ||
((field[0][t]) == " [X] " & (field[1][t]) == " [X] " & field[2][t] == " [X] ")) {
System.out.print("\nWinner Player 1!");
System.exit(0);
} else {
}
}
if (((field[0][0]) == " [X] " & (field[1][1]) == " [X] " & field[2][2] == " [X] ") ||
((field[0][2]) == " [X] " & (field[1][1]) == " [X] " & field[2][0] == " [X] ")) {
System.out.print("\nWinner Player 1!");
System.exit(0);
} else if (((field[0][0]) == " [O] " & (field[1][1]) == " [O] " & field[2][2] == " [O] ") ||
((field[0][2]) == " [O] " & (field[1][1]) == " [O] " & field[2][0] == " [O] ")) {
System.out.print("\nWinner Player 2 !");
System.exit(0);
} else {
}
System.out.println();
}
public void displaying() {
for (int p = 0; p < 3; p++) {
System.out.println();
for (int l = 0; l < 3; l++) {
System.out.print(field[p][l]);
}
}
checking();
}
}
Понравилась идея с Крестиками-Ноликами и решил написать свою программу (Ссори за английский. Я на нем говорю). Запускаешь Game.java
и играешь. В программу вставил нубский "искусственный интеллект", который в свой первый ход ходит рандомно, а в последующие начинает "думать" как сходить. Игра заканчивается либо победой, либо заполнением всех клеток (не стал писать код для "ничьи" - лень).
НЕ ЗАБУДЬТЕ ЗАПИХНУТЬ ТРИ НИЖЕ ПРЕДСТАВЛЕННЫЕ ПРОГРАММЫ В PACKAGE С ИМЕНЕМ "homeworks"
EDIT 1: Есть ошибка в комбинации, когда создаем фигуру "треугольник" для победы. тут у меня программа просто не ходит и все.. Вариант этой фигуры:
0X0
--0--
--X--
Компьютер должен хоть как-то сходить, но не хочет. Где-то ошибка. исправьте ее, если не лень.
EDIT2: Не лень было найти ошибку. Она была в условии, при которых комп должен был выиграть. Я делал проверку на 1, когда надо было на -1.
Game.java
package homeworks;
public class Game {
//FIELD
private static int[][] field = new int[3][3];
private static boolean Computer_win = false;
private static boolean Player_win = false;
public static int[][] getField() {
return field;
}
public static void setField(int row, int column, int n) {
field[row][column] = n;
}
public void display() {
System.out.println(" 1 2 3");
for (int i = 0; i < 3; i++) {
System.out.print((i+1) + " ");
for (int j = 0; j < 3; j++) {
if(field[j][i] == 1) {
System.out.print("O ");
} else if(field[j][i] == 0){
System.out.print("_ ");
} else {
System.out.print("X ");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Game game = new Game();
Player player = new Player();
Computer computer = new Computer();
System.out.println("\nPlayer plays as a Zero ( O ); Computer plays as a Cross ( X )\n");
while (true) {
game.display();
player.move();
if (win_check()) {
break;
};
computer.move();
if (win_check()) {
break;
};
}
game.display();
if (Player_win) {
System.out.println("\nPlayer won the game");
} else if(Computer_win) {
System.out.println("\nComputer won the game");
} else {
System.out.println("\nDraw. No one won the game");
}
}
public static boolean win_check() {
int sum_hor, sum_ver, sum_dia1 = 0, sum_dia2 = 0, sum_all;
for (int i = 0; i < 3; i++) {
sum_hor = 0;
sum_ver = 0;
for (int j = 0; j < 3; j++) {
sum_hor += field[j][i];
sum_ver += field[i][j];
}
if (sum_hor == 3 || sum_ver == 3) {
Player_win = true;
return true;
}
if (sum_hor == -3 || sum_ver == -3) {
Computer_win = true;
return true;
}
}
for (int i = 0; i < 3; i++) {
sum_dia1 += field[i][i];
sum_dia2 += field[2-i][i];
}
if (sum_dia1 == 3 || sum_dia2 == 3) {
Player_win = true;
return true;
}
if (sum_dia1 == -3 || sum_dia2 == -3) {
Computer_win = true;
return true;
}
sum_all = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (field[i][j] != 0) {
sum_all += 1;
}
}
}
if (sum_all == 9) {
return true;
}
return false;
}
}
Player.java
package homeworks;
import java.util.Scanner;
import homeworks.Game;
public class Player {
private int column, row;
public void move() {
System.out.println("\nPlayer's move\n");
while(true) {
try {
System.out.println("Enter cell (row and column) with space. Example: '1 3'");
Scanner keyboard = new Scanner(System.in);
column = keyboard.nextInt();
row = keyboard.nextInt();
if(Game.getField()[row-1][column-1] != 1 && Game.getField()[row-1][column-1] != -1) {
Game.setField(row-1, column-1, 1);
break;
}
} catch (Exception e) {
System.out.println("Error in input\n");
}
}
}
}
Computer.java
package homeworks;
import java.util.Random;
import homeworks.Game;
public class Computer {
private int column, row;
public void move() {
System.out.println("\nComputer's move\n");
while(true) {
Random random = new Random();
row = random.nextInt(2) + 0;
column = random.nextInt(2) + 0;
if (win_check_player()) {
break;
}
if(Game.getField()[row][column] != 1 && Game.getField()[row][column] != -1) {
Game.setField(row, column, -1);
break;
}
}
}
private boolean win_check_player(){
int[][]field = Game.getField();
int
sum_hor, sum_ver, sum_dia1 = 0, sum_dia2 = 0;
for (int i = 0; i < 3; i++) {
sum_hor = 0;
sum_ver = 0;
for (int j = 0; j < 3; j++) {
sum_hor += field[j][i];
sum_ver += field[i][j];
}
//if computer close to win
if (sum_hor == -2) {
for (int j = 0; j < 3; j++) {
if(Game.getField()[j][i] != -1) {
Game.setField(j, i, -1);
return true;
}
}
}
if (sum_ver == -2) {
for (int j = 0; j < 3; j++) {
if(Game.getField()[i][j] != -1) {
Game.setField(i, j, -1);
return true;
}
}
}
//if player wins
if (sum_hor == 2) {
for (int j = 0; j < 3; j++) {
if(Game.getField()[j][i] != 1) {
Game.setField(j, i, -1);
return true;
}
}
}
if (sum_ver == 2) {
for (int j = 0; j < 3; j++) {
if(Game.getField()[i][j] != 1) {
Game.setField(i, j, -1);
return true;
}
}
}
}
for (int i = 0; i < 3; i++) {
sum_dia1 += field[i][i];
sum_dia2 += field[2-i][i];
}
System.out.println("SUM1 = " + sum_dia1 + " SUM2 = " + sum_dia2);
//if computer close to win
if (sum_dia1 == -2) {
for (int i = 0; i < 3; i++) {
if(Game.getField()[i][i] != -1) {
Game.setField(i, i, -1);
return true;
}
}
}
if (sum_dia2 == -2) {
for (int i = 0; i < 3; i++) {
if(Game.getField()[2-i][i] != -1) {
Game.setField(2-i, i, -1);
return true;
}
}
}
//if player close to win
if (sum_dia1 == 2) {
for (int i = 0; i < 3; i++) {
if(Game.getField()[i][i] != 1) {
Game.setField(i, i, -1);
return true;
}
}
}
if (sum_dia2 == 2) {
for (int i = 0; i < 3; i++) {
if(Game.getField()[2-i][i] != 1) {
Game.setField(2-i, i, -1);
return true;
}
}
}
return false;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Так запускаю печать, печать проходит с данными настройками, но единственное что не понятно - после того как задание передается на принтер,...
Есть база MySQL, я к ней подключился + вывел столбцы в "консоль" Android Studio, подскажите, как мне их вывести в ListView или что-нибудь на подобии него
Столкнулся с проблемойУ библиотеки Telegrambots для использования с Http proxy нужно использовать вот такой конструктор: