import java.applet.*; import java.awt.*; import java.util.*; public class riskapl2 extends Applet implements Runnable { public static final String PROTOCOL = "GSP/1.0"; public static final String GAMETYPE = "Risk/1.0"; public math=new Math(); public static final String connectto="cs.millersv.edu"; public static final int connectport=7779; public GameClient client=null; public GameControl gc = null; public NameGetter ng = null; Thread thisThread; boolean started=false; String currmode=""; Dicewindow dicewin; // window to ask for dice roll //Attacksendarmy attksndarmy; // window to select number of armies to select Random rnd = new Random(); public String playerID = null; public String gameID = null; public String playerName = null; public boolean masterClient = false; public Vector knownGames = new Vector(1); public Vector knownPlayers = new Vector(1); Image mapimg; Image apiece[]=new Image[6]; Frame info; TextArea infoarea; Frame showowner; TextArea showinfo; Frame msgwin; TextField msg; Vector countries; int[] armies; String[] owners; //icard[] cards; int unplacedarmies; int selected=0; int attackto,attackfrm; boolean gameover=false; Vector queuedcmds=new Vector(); boolean gotattackroll,gotdefendroll; int atdie1,atdie2,atdie3,dfdie1,dfdie2; String attacker,defender; String playerturn; // initialize applet public void init() { info=new Frame("Debugging"); info.resize(150, 150); // Create and use a BorderLayout manager with margins info.setLayout(new BorderLayout(15, 15)); infoarea = new TextArea(); // No typing in output field... infoarea.setEditable(false); info.add("Center", infoarea); info.pack(); info.show(); showowner=new Frame("Country Info"); showowner.resize(200, 200); // Create and use a BorderLayout manager with margins showowner.setLayout(new BorderLayout()); showinfo = new TextArea(); // No typing in output field... showinfo.setEditable(false); showowner.add("Center",showinfo); //showowner.pack(); //showowner.show(); ng=new NameGetter(this); loadimages(); countrysetup(); } void loadimages() { MediaTracker tracker=new MediaTracker(this); mapimg=getImage(getCodeBase(),"map.gif"); apiece[0]=getImage(getCodeBase(),"blue-ball-small.gif"); apiece[1]=getImage(getCodeBase(),"cyan-ball-small.gif"); apiece[2]=getImage(getCodeBase(),"green-ball-small.gif"); apiece[3]=getImage(getCodeBase(),"magenta-ball-small.gif"); apiece[4]=getImage(getCodeBase(),"yellow-ball-small.gif"); apiece[5]=getImage(getCodeBase(),"red-ball-small.gif"); infoarea.appendText("loading image\n"); tracker.addImage(mapimg,0); tracker.addImage(apiece[0],1); tracker.addImage(apiece[1],2); tracker.addImage(apiece[2],3); tracker.addImage(apiece[3],4); tracker.addImage(apiece[4],5); tracker.addImage(apiece[5],6); try { tracker.waitForID(0); tracker.waitForID(1); tracker.waitForID(2); tracker.waitForID(3); tracker.waitForID(4); tracker.waitForID(5); tracker.waitForID(6); infoarea.appendText("images loaded"); } catch(InterruptedException e) { return; } } public void assignCountries() { // randomly assign players to contries int players=findGame(gameID).numplayers(); Random rnd=new Random(); int setup=rnd.nextInt(); if (setup<0) { setup*=-1; } infoarea.appendText("random "+setup+" players:"+players+"\n"); boolean done=false; int currpos=1; int count=0; String currplayer=findGame(gameID).nextPlayer(); while (!done) { currpos=(currpos +setup)%41; count=0; while ((owners[currpos]!="") && (count<=43)) { currpos=(++currpos)%42; count++; } if (count<=43) { infoarea.appendText("ownership of "+currpos+"\n"); owners[currpos]=currplayer; currplayer=findGame(gameID).nextPlayer(); } else { done=true; } } } public void assignColors() { iPlayer first=findGame(gameID).nextiPlayer(); int i=0; first.piece=apiece[i]; iPlayer second; while (first!=(second=findGame(gameID).nextiPlayer())) { i++; second.piece=apiece[i]; } } private String getServerName() { return getCodeBase().getHost(); } private void openConnection() { if(client == null) client = new GameClient(getServerName(),0,playerName,this); } public void startgameclient(String name) { playerName=name; gc = new GameControl(this); openConnection(); } public GameClient getgameclient() { return client; } public void repaint(Graphics g) {paint(g);} public void paint(Graphics g) { g.drawImage(mapimg,0,0,this); if (playerName!=null) { g.drawString(playerName,400,5); } if (started) { g.drawImage(findPlayer(owners[0]).piece,32,47,this); g.drawImage(findPlayer(owners[1]).piece,88,48,this); g.drawImage(findPlayer(owners[2]).piece,262,53,this); g.drawImage(findPlayer(owners[3]).piece,71,116,this); g.drawImage(findPlayer(owners[4]).piece,125,127,this); g.drawImage(findPlayer(owners[5]).piece,184,147,this); g.drawImage(findPlayer(owners[6]).piece,56,176,this); g.drawImage(findPlayer(owners[7]).piece,117,200,this); g.drawImage(findPlayer(owners[8]).piece,55,244,this); g.drawImage(findPlayer(owners[9]).piece,62,298,this); g.drawImage(findPlayer(owners[10]).piece,31,334,this); g.drawImage(findPlayer(owners[11]).piece,98,351,this); g.drawImage(findPlayer(owners[12]).piece,48,417,this); g.drawImage(findPlayer(owners[13]).piece,245,303,this); g.drawImage(findPlayer(owners[14]).piece,304,290,this); g.drawImage(findPlayer(owners[15]).piece,322,329,this); g.drawImage(findPlayer(owners[16]).piece,293,352,this); g.drawImage(findPlayer(owners[17]).piece,311,395,this); g.drawImage(findPlayer(owners[18]).piece,347,407,this); g.drawImage(findPlayer(owners[19]).piece,278,150,this); g.drawImage(findPlayer(owners[20]).piece,310,177,this); g.drawImage(findPlayer(owners[21]).piece,372,200,this); g.drawImage(findPlayer(owners[22]).piece,265,210,this); g.drawImage(findPlayer(owners[23]).piece,302,224,this); g.drawImage(findPlayer(owners[24]).piece,271,250,this); g.drawImage(findPlayer(owners[25]).piece,320,245,this); g.drawImage(findPlayer(owners[26]).piece,426,162,this); g.drawImage(findPlayer(owners[27]).piece,452,156,this); g.drawImage(findPlayer(owners[28]).piece,520,122,this); g.drawImage(findPlayer(owners[29]).piece,590,149,this); g.drawImage(findPlayer(owners[30]).piece,487,177,this); g.drawImage(findPlayer(owners[31]).piece,526,201,this); g.drawImage(findPlayer(owners[32]).piece,576,226,this); g.drawImage(findPlayer(owners[33]).piece,412,229,this); g.drawImage(findPlayer(owners[34]).piece,494,243,this); g.drawImage(findPlayer(owners[35]).piece,364,268,this); g.drawImage(findPlayer(owners[36]).piece,444,281,this); g.drawImage(findPlayer(owners[37]).piece,492,293,this); g.drawImage(findPlayer(owners[38]).piece,508,369,this); g.drawImage(findPlayer(owners[39]).piece,578,368,this); g.drawImage(findPlayer(owners[40]).piece,515,435,this); g.drawImage(findPlayer(owners[41]).piece,592,429,this); } } public boolean mouseDown(Event e, int x, int y) { int cntry=getcountryat(x,y); //if (cntry>-1) //{ // String scntry=(String) countries.elementAt(cntry); // infoarea.appendText("clicked "+scntry+"\n"); //} //else //{ // infoarea.appendText("clicked "+x+" "+y+"\n"); //} //info.toFront(); //info.show(); selected=cntry; return true; } int lastcntry=-1; public boolean mouseMove(Event e,int x,int y) { int cntry=getcountryat(x,y); if ((cntry!=lastcntry) && (showinfo!=null)) { lastcntry=cntry; if (cntry>-1) { String scntry=(String) countries.elementAt(cntry); showinfo.setText(scntry+"\n"); if (owners[0]!="") { // if owners are not yet defined, don't show them showinfo.appendText(findPlayer(owners[cntry]).name+"\n"); showinfo.appendText(armies[cntry]+" armies\n"); } } if (started) { showowner.toFront(); showowner.show(); } } return true; } int getcountryat(int x, int y) { if (x>=8 && x<=51 && y>=2 && y<=86) { return 0;} if (x>=66 && x<=123 && y>=2 && y<=88) {return 1;} if ((x>=147 && x<=312 && y>=1 && y<=95) || (x>=238 && x<=295 && y>=97 && y<=124)) {return 2;} if ((x>=37 && x<=96 && y>=104 && y<=151) || (x>=58 && x<=107 && y>=84 && y<=115)) {return 3;} if (x>=118 && x<=143 && y>=96 && y<=157) {return 4;} if (x>=155 && x<=211 && y>=111 && y<=177) {return 5;} if ((x>=22 && x<=67 && y>=148 && y<=205) || (x>=70 && x<=102 && y>=154 && y<=189)) {return 6;} if (((x>=88 && x<=154 && y>=193 && y<=231) || (x>=115 && x<=135 && y>=162 && y<=194)) || (x>=149 && x<=175 && y>=186 && y<=212)) {return 7;} if (x>=20 && x<=83 && y>=210 && y<=278) {return 8;} if (x>=31 && x<=104 && y>=287 && y<=308) {return 9;} if ((x>=17 && x<=40 && y>=310 && y<=349) || (x>=30 && x<=57 && y>=347 && y<=382)) {return 10;} if ((x>=57 && x<=146 && y>=316 && y<=385) || (x>=74 && x<=122 && y>=381 && y<=418)) {return 11;} if (x>=16 && x<=66 && y>=385 && y<=472) {return 12;} if (x>=213 && x<=274 && y>=272 && y<=348) {return 13;} if (x>=288 && x<=339 && y>=277 && y<=297) {return 14;} if ((x>=308 && x<=360 && y>=307 && y<=369) || (x>=288 && x<=311 && y>=313 && y<=332)) {return 15;} if (x>=268 && x<=307 && y>=342 && y<=363) {return 16;} if (x>=270 && x<=330 && y>=367 && y<=424) {return 17;} if (x>=343 && x<=356 && y>=380 && y<=429) {return 18;} if (x>=261 && x<=297 && y>=138 && y<=161) {return 19;} if ((x>=302 && x<=332 && y>=138 && y<=187) || (x>=281 && x<=320 && y>=183 && y<=208)) {return 20;} if ((x>=345 && x<=392 && y>=142 && y<=242) || (x>=397 && x<=410 && y>=149 && y<=190)) {return 21;} if (x>=255 && x<=277 && y>=198 && y<=220) {return 22;} if ((x>=285 && x<=319 && y>=212 && y<=229) || (x>=291 && x<=310 && y>=229 && y<=236)) {return 23;} if (x>=257 && x<=293 && y>=232 && y<=260) {return 24;} if (((x>=301 && x<=330 && y>=241 && y<=260) || (x>=309 && x<=337 && y>=240 && y<=236)) || (x>=327 && x<=338 && y>=225 && y<=243)) {return 25;} if (x>=413 && x<=435 && y>=101 && y<=200) {return 26;} if ((x>=442 && x<=464 && y>=88 && y<=209) || (x>=468 && x<=481 && y>=91 && y<=114)) {return 27;} if ((x>=489 && x<=581 && y>=82 && y<=124) || (x>=481 && x<=549 && y>=120 && y<=155)) {return 28;} if ((x>=585 && x<=616 && y>=75 && y<=147) || (x>=547 && x<=600 && y>=148 && y<=197)) {return 29;} if (x>=472 && x<=496 && y>=157 && y<=201) {return 30;} if (x>=511 && x<=538 && y>=177 && y<=219) {return 31;} if (x>=570 && x<=580 && y>=205 && y<=257) {return 32;} if (x>=401 && x<=431 && y>=205 && y<=257) {return 33;} if (x>=463 && x<=523 && y>=219 && y<=270) {return 34;} if (x>=336 && x<=394 && y>=249 && y<=297) {return 35;} if (x>=418 && x<=458 && y>=270 && y<=314) {return 36;} if (x>=470 && x<=506 && y>=278 && y<=317) {return 37;} if (x>=463 && x<=544 && y>=338 && y<=391) {return 38;} if (x>=556 && x<=626 && y>=353 && y<=379) {return 39;} if (x>=487 && x<=552 && y>=406 && y<=464) {return 40;} if (x>=553 && x<=617 && y>=397 && y<=465) {return 41;} return -1; } void countrysetup() { countries=new Vector(42); countries.addElement("Alaska"); countries.addElement("Northwest Territory"); countries.addElement("Greenland"); countries.addElement("Alberta"); countries.addElement("Ontario"); countries.addElement("Quebec"); countries.addElement("Western United States"); countries.addElement("Eastern United States"); countries.addElement("Central America"); countries.addElement("Venezuela"); countries.addElement("Peru"); countries.addElement("Brazil"); countries.addElement("Argentina"); countries.addElement("North Africa"); countries.addElement("Egypt"); countries.addElement("East Africa"); countries.addElement("Congo"); countries.addElement("South Africa"); countries.addElement("Madagascar"); countries.addElement("Iceland"); countries.addElement("Scandanavia"); countries.addElement("Ukraine"); countries.addElement("Great Britain"); countries.addElement("Northern Europe"); countries.addElement("Western Europe"); countries.addElement("Southern Europe"); countries.addElement("Ural"); countries.addElement("Siberia"); countries.addElement("Yakutsk"); countries.addElement("Kamchatka"); countries.addElement("Irktusk"); countries.addElement("Mongolia"); countries.addElement("Japan"); countries.addElement("Afghanistan"); countries.addElement("China"); countries.addElement("Middle East"); countries.addElement("India"); countries.addElement("Siam"); countries.addElement("Indonesia"); countries.addElement("New Guinea"); countries.addElement("Western Austrailia"); countries.addElement("Eastern Austrailia"); armies=new int[42]; for (int i=0;i<42;i++) armies[i]=i; // set up everyone to be owned by curent player owners=new String[42]; for (int i=0;i<42;i++) owners[i]=""; } public void sendMessage(String msg) { client.sendMessage(msg); } private String getMessage() { return client.getMessage(); } void placearmies(boolean first) { int increment=3; int toplace; // make window to prompt use to place these armies while (unplacedarmies>0) { if (first) { waiting(); // wait for my turn to place armies } if ((unplacedarmies>=increment) && first) { toplace=increment; unplacedarmies-=increment; } else { toplace=unplacedarmies; unplacedarmies=0; } while (toplace>0) { Frame getinp=new Frame("Place Armies"); getinp.resize(250, 150); // Create and use a BorderLayout manager with margins getinp.setLayout(new BorderLayout(15, 15)); TextField parmies=new TextField(6); String stoplace=""+toplace; parmies.setText(stoplace); getinp.add("North",new Label("Armies to place: "+toplace)); getinp.add("Center",parmies); getinp.add("South",new Label("click on country to place")); getinp.show(); selected=0; while (selected==0) { try{ thisThread.sleep(100) ; } catch (Exception e){return;} } // wait till user selects a country // increment selected country's army count // decrement toplace // this was the only way i could find to convert // a string to int if (owners[selected]==playerID) { String tmpval=parmies.getText(); Integer tmpint=new Integer(tmpval); int placed=tmpint.intValue(); sendMessage("TOALL\tPLACED\t"+selected+"\t"+placed); if (placed<=toplace) { toplace-=placed; armies[selected]+=placed; } else { // yell at the user } } else { // yell at the user } getinp.dispose(); String scntry=(String) countries.elementAt(selected); showinfo.setText(scntry+"\n"); showinfo.appendText(findPlayer(owners[selected]).name+"\n"); showinfo.appendText(armies[selected]+" armies\n"); } } } public void run() { msgwin=new Frame("Action"); msgwin.setLayout(new FlowLayout()); msg=new TextField(); msg.setEditable(false); msgwin.add(msg); msgwin.pack(); if (masterClient) { infoarea.appendText("master stuff\n"); assignCountries(); // randomly assign countries to players assignColors(); // assign players their colors broadcaststate(); // tell other clients of the contries and colors } else { waiting(); // wait till master tells me who i am } infoarea.appendText("starting\n"); int players=findGame(gameID).numplayers(); if (players==2) { unplacedarmies=40; } else if (players==3) { unplacedarmies=35; } else if (players==4) { unplacedarmies=30; } else if (players==5) { unplacedarmies=25; } else if (players==6) { unplacedarmies=20; } placearmies(true); // here's where the actual game gets played while (!gameover) { //waiting(); // i exited wait because my turn was called taketurn(); } } public synchronized void waiting() { // there are 4 conditions when i can wait // when waiting for others to place armies in initial setup // when waiting for turn // when waiting for defender's die roll // when waiting for game to begin boolean wait=true; String s; while (wait) { try{ while(queuedcmds.size()==0) thisThread.sleep(100); }catch (Exception e){return;} s=(String) queuedcmds.firstElement(); queuedcmds.removeElement(s); wait = handlemessages(s); } } public void startRisk() { infoarea.appendText("starting risk applet\n"); started=true; showowner.show(); masterClient=(findGame(gameID).owner.equals(playerID)); thisThread=new Thread(this,"Risk"); thisThread.start(); infoarea.appendText("starting risk, setup complete\n"); } void broadcaststate() { int i; for (i=0;i<42;i++) { sendMessage("TOALL\tSETUP\t"+owners[i]+"\t"+i); } iPlayer first=findGame(gameID).nextiPlayer(); i=0; sendMessage("TOALL\tCOLOR\t"+first.pid+"\t"+i); iPlayer second; while (first!=(second=findGame(gameID).nextiPlayer())) { i++; sendMessage("TOALL\tCOLOR\t"+second.pid+"\t"+i); } sendMessage("TOALL\tSETUPCOMPLETE"); } public void riskparse(String data) { queuedcmds.addElement(data); } boolean handlemessages(String data) { if(data == null) return false; infoarea.appendText(data+"\n"); StringTokenizer tokenFactory = new StringTokenizer(data,"\t\n\r"); int numTokens = tokenFactory.countTokens(); if(numTokens == 0) return true; String cmd = tokenFactory.nextToken(); String tok2 = tokenFactory.nextToken(); if (cmd.equals("FROMMASTER")){ if (tok2.equals("NEEDDICE")) { int canroll=1; if (armies[attackto]>1) {canroll=2;} Dicewindow dicewin=new Dicewindow(canroll,showowner,this); dicewin.show(); } } if (cmd.equals("TOALL")) { if (tok2.equals("TURN")) { String tok3=tokenFactory.nextToken(); if (tok3.equals(playerID)) { // myturn return false; } } if (tok2.equals("DICEROLL")) { String tok3=tokenFactory.nextToken(); if (tok3.equals(owners[attackfrm])) { // attacker's roll, 3 dice int atdie1=(new Integer(tokenFactory.nextToken()).intValue()); int atdie2=(new Integer(tokenFactory.nextToken()).intValue()); int atdie3=(new Integer(tokenFactory.nextToken()).intValue()); gotattackroll=true; if (gotdefendroll) { handledice(); gotattackroll=false; gotdefendroll=false; if (attacker==playerID) { // i'm attacker exit wait return false; } } } else { // defender's roll, 2dice int dfdie1=(new Integer(tokenFactory.nextToken()).intValue()); int dfdie2=(new Integer(tokenFactory.nextToken()).intValue()); if (gotattackroll) { handledice(); gotattackroll=false; gotdefendroll=false; } } } if (tok2.equals("ATTACKING")) { // 2 tokens , fromcountry,tocountry attackfrm=(new Integer(tokenFactory.nextToken()).intValue()); attacker=owners[attackfrm]; attackto=(new Integer(tokenFactory.nextToken()).intValue()); defender=owners[attackto]; } if (tok2.equals("PLACED")) { int cntry=(new Integer(tokenFactory.nextToken()).intValue()); int numplaced=(new Integer(tokenFactory.nextToken()).intValue()); if (owners[cntry]!=playerID) { armies[cntry]+=numplaced; } if (masterClient) { sendMessage("TOALL\tTURN\t"+findGame(gameID).nextPlayer()); } } if (!masterClient) { if (tok2.equals("SETUP")) { String thispid=tokenFactory.nextToken(); int thiscountry=(new Integer(tokenFactory.nextToken()).intValue()); owners[thiscountry]=thispid; } if (tok2.equals("COLOR")) { String thispid=tokenFactory.nextToken(); int thiscol=(new Integer(tokenFactory.nextToken()).intValue()); findPlayer(thispid).piece=apiece[thiscol]; } if (tok2.equals("SETUPCOMPLETE")) { return false; } } } if (cmd.equals("TOMASTER")) { String tok3=tokenFactory.nextToken(); // command , tok2 is pid if (tok3.equals("ROLL")) { int rollqty=(new Integer(tokenFactory.nextToken()).intValue()); if (tok2.equals(attacker)) { sendMessage("SENDTOCLIENT\t"+defender+"NEEDDICE"); rollattack(rollqty); // roll attacker } else { // roll defender rolldefend(rollqty); sendMessage("TOALL\tDICEROLL\t"+attacker+"\t"+atdie1+"\t"+atdie2+"\t"+atdie3); sendMessage("TOALL\tDICEROLL\t"+defender+"\t"+dfdie1+"\t"+dfdie2); } } } return true; } void rollattack(int qty) { atdie1=0; atdie2=0; atdie3=0; Random rnd=new Random(); atdie1=(math.abs(rnd.nextInt())%6)+1; if (qty>1){ atdie2=(math.abs(rnd.nextInt())%6)+1; } if (qty>2){ atdie3=(math.abs(rnd.nextInt())%6)+1; } } void rolldefend(int qty) {} void handledice() { infoarea.appendText("calculating dice roll"); } public void sendChatMessage(String message) { sendMessage("MSG\t"+message); } public void displayMessage(String who, String message) { if(who == null) who = "-----> "; else who = who + " : "; System.out.println(who+message); //if(gw != null) // gw.displayMessage(who+message); } public void add(iPlayer p) { if(!knownPlayers.contains(p)) { knownPlayers.addElement(p); } } public void add(iGame g) { if(!knownGames.contains(g)) knownGames.addElement(g); } public void remove(iPlayer p) { if(p.gid != null) { iGame g = findGame(p.gid); if(g != null) { g.removePlayer(p); } } if(knownPlayers.contains(p)) knownPlayers.removeElement(p); p.dispose(); } public void remove(iGame g) { if(knownGames.contains(g)) knownGames.removeElement(g); sendMessage("LIST\tPLAYERS"); // fixup player games g.dispose(); } public iPlayer findPlayer(String pid) { int i = knownPlayers.size(); iPlayer p; while(i > 0) { p = (iPlayer) knownPlayers.elementAt(i-1); if(pid.equals(p.pid)) { return p; } i--; } return null; } public iGame findGame(String gid) { int i = knownGames.size(); iGame g; while(i-- > 0) { g = (iGame) knownGames.elementAt(i); if(gid.equals(g.gid)) return g; } return null; } public void updatePlayer(String p, String g) { iPlayer pl = findPlayer(p); if(pl == null) { sendMessage("LIST\tPLAYERS"); } else { iGame ga = findGame(pl.gid); iGame ga2 = findGame(g); if(ga != null) ga.removePlayer(pl); if(ga2 != null) ga2.addPlayer(pl); } } public String getGameName(String gid) { iGame g = findGame(gid); if(g == null) return null; return g.name; } public String getPlayerName(String pid) { iPlayer p = findPlayer(pid); if(p == null) return null; return p.name; } public void updatePlayer(String p, String n, String g) { iPlayer pl = findPlayer(p); if(pl == null) { pl = new iPlayer(p,n,g); add(pl); } else updatePlayer(p,g); } public void updateGame(String t, String g, String mp,String s, String n, String m) { iGame ga = findGame(g); if(ga == null) { ga = new iGame(g,n,t,mp,s,m); add(ga); } else ga.update(g,n,t,mp,s,m); if(gc != null) gc.updateGameList(); } public void removeGame(String gid) { iGame g = findGame(gid); remove(g); sendMessage("LIST\tPLAYERS"); } void taketurn() { unplacedarmies=getnumofarmies(); placearmies(false); boolean conquered=false; boolean endturn=false; while (!endturn) { attack(); } freemove(); if (conquered) { getcard(); } } int getnumofarmies(){ int newarmies=0; if (hassetofcards()) { newarmies+=getnextcardset(); } int ihold=0; int i; for (i=0;i<42;i++) { if (owners[i]==playerID) {ihold++;} } if (ihold<9) {ihold=9;} newarmies+=(ihold/3); boolean mine=true; for (i=0;i<8;i++) { if (owners[1]!=playerID) {mine=false;} } if (mine) { newarmies+=5; } mine=true; for (i=9;i<12;i++) { if (owners[i]!=playerID) {mine=false;} } if (mine) { newarmies+=2; } mine=true; for (i=13;i<18;i++) { if (owners[i]!=playerID) {mine=false;} } if (mine) { newarmies+=3; } mine=true; for (i=19;i<25;i++) { if (owners[i]!=playerID) {mine=false;} } if (mine) { newarmies+=5; } mine=true; for (i=26;i<37;i++) { if (owners[i]!=playerID) {mine=false;} } if (mine) { newarmies+=7; } mine=true; for (i=38;i<41;i++) { if (owners[i]!=playerID) {mine=false;} } if (mine) { newarmies+=2; } return newarmies; } boolean hassetofcards() {return true;} int getnextcardset() { return 1;} void attack() { Frame getinp=new Frame("Attack"); getinp.resize(250, 100); // Create and use a BorderLayout manager with margins getinp.setLayout(new BorderLayout(15, 15)); getinp.add("Center",new Label("click on country to attack from")); getinp.show(); selected=0; while (selected==0) { try{ thisThread.sleep(100) ; } catch (Exception e){return;} } // wait till user selects a country getinp.dispose(); attackfrm=selected; Frame getinp2=new Frame("Attack"); getinp.resize(250, 100); // Create and use a BorderLayout manager with margins getinp2.setLayout(new BorderLayout(15, 15)); getinp2.add("Center",new Label("click on country to attack")); getinp2.show(); selected=0; while (selected==0) { try{ thisThread.sleep(100) ; } catch (Exception e){return;} } // wait till user selects a country getinp2.dispose(); attackto=selected; sendMessage("TOALL\tATTACKING\t"+attackfrm+"\t"+attackto); int canroll=1; if (armies[attackfrm]>2) {canroll=2;} if (armies[attackfrm]>3) {canroll=3;} currmode="attacking"; Dicewindow dicewin=new Dicewindow(canroll,showowner,this); dicewin.show(); } void getdice(int numdice){ sendMessage("SENDTOMASTER\tROLL\t"+numdice); } void freemove() {} void getcard() {} public void gameOver() { System.out.println("Gameover."); } }