Как сделать такую игру по сети?

125
09 июля 2021, 23:50
import java.util.Random;
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int yourLife = 20; //ваши жизни
        int botLife = 20;
        while (true) {
            System.out.println("Выберите атаку: 1 - в голову, 2 - в корпус, 3 - в пояс, 4 - в ноги");
            Scanner scanner = new Scanner(System.in);
            int ataka = scanner.nextInt();
            System.out.println("Выберите блок: 1 - защита головы и корпуса, 2 - в корпуса и пояса, 3 - в пояса и ног, 4 - защита ног и головы");
            int blok = scanner.nextInt();
            Random rnd = new Random(System.currentTimeMillis());
            int botAtack = 1 + rnd.nextInt(4 - 1 + 1);
            int botBlock = 1 + rnd.nextInt(4 - 1 + 1);
            if (ataka==1 &&  botBlock==1 |  botBlock==4) {System.out.println("Противник заблокировал удар");}
           else if (ataka==2 && botBlock==1 |  botBlock==2) {System.out.println("Противник заблокировал удар");}
           else if (ataka==3 && botBlock==3 |  botBlock==2) {System.out.println("Противник заблокировал удар");}
           else if (ataka==4 && botBlock==3 |  botBlock==4) {System.out.println("Противник заблокировал удар");}
           else {botLife=botLife-3; System.out.println("Вы нанесли 3 урона. Жизней у противника - "+ botLife );
                     }
            if (botAtack==1 &&  blok==1 |  blok==4) {System.out.println("Вы заблокировали удар");}
            else if (botAtack==2 && blok==1 |  blok==2) {System.out.println("Вы заблокировали удар");}
            else if (botAtack==3 && blok==3 |  blok==2) {System.out.println("Вы заблокировали удар");}
            else if (botAtack==4 && blok==3 |  blok==4) {System.out.println("Вы заблокировали удар");}
            else {yourLife=yourLife-3; System.out.println("Вам нанесли 3 урона. У Вас " + yourLife + " жизней");
                if (yourLife <= 0){  System.out.println("Ты проиграл."); break;}
                if (botLife <= 0){ System.out.println("Ты выйграл."); break;}
                 }
        }
    }
}
Answer 1

Как отметил ЮрийСПБ в комментариях, необходимо написать сервер и клиент. Вся игровая ситуация моделируется на сервере и её состояние сообщается клиентам. Клиенты же совершают свои ходы и отправляют их на сервер.

В случае с вашей игрой, достаточно будет, чтобы на сервере хранилось здоровье двух игроков. Каждый ход клиенты будут отсылать серверу по два числа: выбор атаки и выбор блока (можно оптимизировать и до одного числа, так как возможных комбинаций всего 9). Сервер, после приёма значений от обоих клиентов, просчитывает игровую ситуацию: удалось ли нанести урон и заблокировать атаку для каждого игрока. После этого отправляет результат хода игрокам и вновь ждёт данных от них, пока игра не закончится.

Можно реализовать, используя встроенные в Java библиотеки на ServerSocket и Socket. О них можете почитать в этой статье.

Возможно реализовать и без многопоточности, но тогда будет выглядеть, как будто интерфейс зависает. Просто по очереди опрашивать каждого клиента. Также сделать можно как в консольном виде, так и в графическом.

READ ALSO
Цикл &lt;c:choose&gt; в JSP

Цикл <c:choose> в JSP

Имеется jsp страница, вызываемая двумя параметрами action(одна на оба параметра)Внутри нее хочу сделать два разных блока, в зависимости от пришедшего...

76
Firebase Cloud Messaging

Firebase Cloud Messaging

С помощью Firebase отправляю сообщение на телефон через Cloud MessagingВсе работает

108
Как отправить FormData как параметры GET-запроса?

Как отправить FormData как параметры GET-запроса?

Как сделать так, чтобы поля формы someForm превратились в get-параметры? Есть ли какой-то нормальный способ для этого?

81