ΠΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°: ΠΠ΅ΡΠΎΠ΄ run ΠΊΠ»Π°ΡΡΠ° Gamer ΡΠ΅ΡΠ΅Π· ΡΠ°Π²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (1000ms / rating) Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ°ΠΌΠΈΠ»ΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° (ΠΌΠ΅ΡΠΎΠ΄ getName()), ΠΏΠΎΡΠΎΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈΠ· OnlineGame.steps. ΠΡΠΈΠΌΠ΅Ρ: Ivanov:ΠΠ°ΡΠ°Π»ΠΎ ΠΈΠ³ΡΡ
ΠΠ΅ΡΠΎΠ΄ run Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π΅ ΡΠΎΡ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
package com.javarush.task.task16.task1627;
/*
ΠΠΎΠΈΠ³ΡΠ°Π΅ΠΌ?
Π’ΡΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈΠ³ΡΠ°ΡΡ Π² ΠΈΠ³ΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ³ΡΠΎΠΊ(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 Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΈΠ΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΈ.
*/
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;
private int step = 0;
public Gamer(String name, int rating) {
super(name);
this.rating = rating;
}
@Override
public void run() {
//Add your code here - Π΄ΠΎΠ±Π°Π²Ρ ΠΊΠΎΠ΄ ΡΡΡ
//ΠΌΠ΅ΡΠΎΠ΄ getName()), ΠΏΠΎΡΠΎΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ ΠΈΠ· OnlineGame.steps. ΠΡΠΈΠΌΠ΅Ρ: Ivanov:ΠΠ°ΡΠ°Π»ΠΎ ΠΈΠ³ΡΡ
try {
while (true){
Thread.sleep(1000/this.rating);
System.out.println(this.getName() + ":" + OnlineGame.steps.get(this.step));
this.step++;
if(this.step == 4){
if(!OnlineGame.isWinnerFound) {
OnlineGame.isWinnerFound = true;
System.out.println(this.getName() + ":ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ!");
}
else
{
System.out.println(this.getName() + ":ΠΏΡΠΎΠΈΠ³ΡΠ°Π»");
}
}
}
}
catch (InterruptedException e) {
//e.printStackTrace();
}
}
}
}