-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSolution.java
More file actions
156 lines (119 loc) · 6.45 KB
/
Solution.java
File metadata and controls
156 lines (119 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// Again he says, "Rejoice, you Gentiles, with his people." (Romans 15:10)
package com.javarush.task.task16.task1627;
import java.util.ArrayList;
import java.util.List;
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() {
for (String step : OnlineGame.steps) {
try{//Add your code here - добавь код тут
System.out.println(getName() + ":" + step);
Thread.sleep(1000/rating);
}catch(InterruptedException e) {System.out.println(getName() + ":проиграл");return;}
}
if (!OnlineGame.isWinnerFound) {
System.out.println(getName() + ":победитель!");
OnlineGame.isWinnerFound = true;
}
}
}
}
/*
Поиграем?
Три человека играют в игру. Каждый игрок(Gamer) характеризуется двумя параметрами: фамилией(name) и количеством действий в секунду (rating).
Нужно вывести в консоль ход игры и определить победителя и проигравших.
Итак…
1. Разберись, что делает программа.
1.1. List<String> steps хранит последовательность действий, которое каждый игрок выполняет от 0 до последнего.
1.2. isWinnerFound показывает, найден победитель или нет.
1.3. Метод sleep выбрасывает InterruptedException и принимает параметр типа long.
1.4. Игроки играют независимо друг от друга.
2. Реализуй логику метода run так, чтобы для каждого игрока:
2.1. Через равные интервалы времени (1000ms / rating) выводились в консоль действия, описанные в steps.
2.2. Любой текст должен начинаться с фамилии игрока (метод getName()), потом следовать двоеточие, а затем сам текст.
Пример: [Ivanov:Начало игры].
2.3. Когда игрок выполнит все действия из steps, то он считается победителем. Выведите [getName() + «:победитель!»].
2.4. Когда найден победитель, то игра останавливается, и остальные игроки считаются побежденными. Выведите для них [getName() + «:проиграл»].
Требования:
1. Метод run класса Gamer через равные интервалы времени (1000ms / rating) должен выводить в консоль фамилию игрока (метод getName()), потом двоеточие, а затем текст из OnlineGame.steps. Пример: [Ivanov:Начало игры].
2. Когда все игровые шаги будут выполнены, а победитель еще не найден, метод run должен установить флаг OnlineGame.isWinnerFound в true (сообщить остальным, что он победитель).
3. Если игрок стал победителем, его метод run должен вывести надпись [getName() + :победитель!]. Например: [Sidorov:победитель!].
4. Методы run всех игроков которые не стали победителями (были прерваны), должны вывести надписи [getName() + :проиграл]. Например: [Petrov:проиграл]
5. Метод run не должен кидать исключение при прерывании.
package com.javarush.task.task16.task1627;
import java.util.ArrayList;
import java.util.List;
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 - добавь код тут
}
}
}
*/