Код: Выделить всё
public class ManagerThread
{
GamblingThread [] game;
int NumOfRounds;
static int counter=0;
static int rounds;
static int done=0;
int arrSize;
int [] win;
int [] loose;
Object obj = new Object();
public ManagerThread(int arrSize)
{
game = new GamblingThread[arrSize];
int [] win = new int[arrSize];
int [] loose = new int[arrSize];
this.arrSize=arrSize;
}
private void StartGame(int round) throws InterruptedException
{
ManagerThread.rounds=round;
for (int i=0;i<game.length;i++)
{
game[i] = new GamblingThread(i+15,obj);
game[i].start();
}
while (ManagerThread.done!=arrSize)
{
if (GamblingThread.stop==arrSize)
{ int max = Integer.MIN_VALUE;
//if player passes his limit he loses, else he wins
for (int i=0;i<game.length;i++)
if (game[i].GetSum()>max && game[i].GetSum()<22)
max=game[i].GetSum();
//if player passes his limit he loses, else he wins
for (int i=0;i<game.length;i++)
{
if (game[i].GetSum()==-1 || game[i].GetSum()<max)
loose[i]++;//game[i].LoseGame();
else
win[i]++;//game[i].WinGame();
}
synchronized(obj)
{
ManagerThread.counter++;
GamblingThread.stop=0;
System.out.println("GamblingThread.stop - changed to:"+GamblingThread.stop);
}
}
}
Print();
}
public void Print()
{
for (int i=0;i<win.length;i++)
{
System.out.println(i+15+" won "+win[i]+" loose "+loose[i]+" : "+(win[i]+loose[i]));
}
}
public static void main(String[] args)
{
ManagerThread m = new ManagerThread(4);
try {
m.StartGame(2);
} catch (Exception e) { e.printStackTrace(); }
}
}
Код: Выделить всё
import java.util.Random;
public class GamblingThread extends Thread
{
int sum;
int limit;
boolean endGame;
static int stop =0;
Object obj;
public GamblingThread(int limit,Object obj)
{
this.limit = limit;
this.obj=obj;
}
public void run()
{
while (ManagerThread.counter<ManagerThread.rounds)
{
while (true)
{
Random random = new Random();
sum+=( Math.abs(random.nextInt()%5)+1 );
if (sum>21)
{
sum=-1;
break;
}
if (sum>limit)
{
endGame=random.nextBoolean();
if (endGame==true)
break;
}
}
synchronized(obj)
{
GamblingThread.stop+=1;
}
while (GamblingThread.stop!=0) { System.out.println(getName()+"..."+GamblingThread.stop); yield();}
sum=0; endGame=false;
}
ManagerThread.done++;
}
public int GetSum()
{
return sum;
}
}