package ist.ass2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class NCBServer {
System.
out.
println("Server is running."); try{
while(true){
Game game = new Game();
Game.Player player1 = game.new Player(listener.accept(), 1);
Game.Player player2 = game.new Player(listener.accept(), 2);
player1.start();
player2.start();
}
} finally{
listener.close();
}
}
}
class Game{
int gamecount = 0;
public synchronized boolean legalMove
(String move
){ if(move.equals("ninja") || move.equals("cowboy") || move.equals("bear")){
return true;
}
return false;
}
public boolean checkRoundEnd(){
if(playermove[0] != null && playermove[1] != null)
return true;
else
return false;
}
int playerid;
Player opponent;
int wins;
int losses;
int draws;
public Player
(Socket socket,
int playerid
){ this.socket = socket;
this.playerid = playerid;
try{
writer.println("WELCOME Player " + playerid);
writer.flush();
e.printStackTrace();
}
}
public void setScore(){
//For Player 1
if(playerid == 1){
//win
if(playermove[0].equals("ninja") && playermove[1].equals("cowboy")){
writer.println("RESULT Player 1 wins");
writer.flush();
wins++;
}
else if(playermove[0].equals("cowboy") && playermove[1].equals("bear")){
writer.println("RESULT Player 1 wins");
writer.flush();
wins++;
}
else if(playermove[0].equals("bear") && playermove[1].equals("ninja")){
writer.println("RESULT Player 1 wins");
writer.flush();
wins++;
}
//tie
else if(playermove[0].equals("bear") && playermove[1].equals("bear")){
writer.println("RESULT Draw");
writer.flush();
draws++;
}
else if(playermove[0].equals("cowboy") && playermove[1].equals("cowboy")){
writer.println("RESULT Draw");
writer.flush();
draws++;
}
else if(playermove[0].equals("ninja") && playermove[1].equals("ninja")){
writer.println("RESULT Draw");
writer.flush();
draws++;
}
else{
writer.println("RESULT Player 2 wins");
writer.flush();
losses++;
}
}
if(playerid == 2){
//win
if(playermove[1].equals("ninja") && playermove[0].equals("cowboy")){
wins++;
}
else if(playermove[1].equals("cowboy") && playermove[0].equals("bear")){
wins++;
}
else if(playermove[1].equals("bear") && playermove[0].equals("ninja")){
wins++;
}
//tie
else if(playermove[1].equals("bear") && playermove[0].equals("bear")){
draws++;
}
else if(playermove[1].equals("cowboy") && playermove[0].equals("cowboy")){
draws++;
}
else if(playermove[1].equals("ninja") && playermove[0].equals("ninja")){
draws++;
}
else{
losses++;
}
}
}
public void run(){
try{
gamecount = 1;
writer.println("MSG All players connected");
writer.flush();
writer.println("MOVE (Round " + gamecount + ") " + "Your Move! ninja - cowboy - bear");
writer.flush();
while(true){
while((command = reader.readLine()) != null){
if(legalMove(command)){
if(playerid == 1){
playermove[0] = command;
}
else{
playermove[1] = command;
}
if(checkRoundEnd()){
gamecount++;
break;
}
writer.println("MSG Please wait for your opponent");
writer.flush();
break;
}
else{
writer.println("ERROR: please type only ninja, cowboy or bear");
writer.flush();
}
}
System.
out.
println("DEBUG" + playerid
); if(checkRoundEnd()){
setScore();
writer.println("MOVE (Round " + gamecount + ") " + "Your Move! ninja - cowboy - bear");
writer.flush();
if(playerid == 1)
playermove[0] = null;
else
playermove[1] = null;
}
}
e.printStackTrace();
}
}
}
}