package com.javarush.test.level16.lesson13.home07; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ThreadFactory; /* Поиграем? Три человека играют в игру. Каждый игрок(Gamer) характеризуется двумя параметрами: фамилией(name) и количеством действий в секунду (rating). Нужно вывести в консоль ход игры и определить победителя и проигравших. Итак... 1. Разберись, что делает программа. 1.1. List<String> steps хранит последовательность действий, которое каждый игрок выполняет от 0 до последнего. 1.2. isWinnerFound показывает, найден победитель или нет. 1.3. метод sleep выбрасывает InterruptedException и принимает параметр типа long. 1.4. Игроки играют независимо друг от друга. 2. Реализуйте логику метода run так, чтобы для каждого игрока: 2.1. За 1 секунду через равные интервалы времени выводились в консоль действия, описанные в steps. Количество выведенных действий должно равняться rating. 2.2. Любой текст должен начинаться с фамилии игрока (метод getName()), потом следовать двоеточие, а затем сам текст. Пример: [Ivanov:Начало игры]. 2.3. Когда игрок выполнит все действия из steps, то он считается победителем. Выведите [getName() + ":победитель!"]. 2.4. Когда найден победитель, то игра останавливается, и остальные игроки считаются побежденными. Выведите для них [getName() + ":проиграл"]. */ public class Solution { public static void main(String[] args) throws InterruptedException { OnlineGame onlineGame = new OnlineGame(); onlineGame.start(); } public static class OnlineGame extends Thread { public static volatile boolean isWinnerFound = false; public static List<String> steps = new ArrayList<String>(); static { steps.add("Начало игры"); steps.add("Сбор ресурсов"); steps.add("Рост экономики"); steps.add("Убийство врагов"); } protected Gamer gamer1 = new Gamer("Ivanov", 3); protected Gamer gamer2 = new Gamer("Petrov", 1); protected Gamer gamer3 = new Gamer("Sidorov", 5); public void run() { gamer1.start(); gamer2.start(); gamer3.start(); while (!isWinnerFound) { } gamer1.interrupt(); gamer2.interrupt(); gamer3.interrupt(); } } public static class Gamer extends Thread { private int rating; public Gamer(String name, int rating) { super(name); this.rating = rating; } @Override public void run() { //Add your code here - добавь код тут { try { for (String x : OnlineGame.steps) { System.out.println(getName() + ":" + x); sleep(1000 / rating); } System.out.println(getName() + ":победитель!"); OnlineGame.isWinnerFound = true; } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() + ":проиграл"); } } } } }
Leave A Comment