ソースを参照

Merge remote-tracking branch 'origin/develop' into develop

Conflicts:
	src/model/state/PlayState.java
Kenneth van Ewijk 10 年 前
コミット
0b6d243dcb

+ 9 - 2
server/server/NetworkUser.java

@@ -48,7 +48,6 @@ public class NetworkUser {
 		try {
 			dout.writeUTF("0");
 		} catch (IOException e) {
-			e.printStackTrace();
 			return false;
 		}
 		return true;
@@ -60,8 +59,16 @@ public class NetworkUser {
 		this.match = match;
 		receivethread.start();
 	}
+	
+	public void sendOverlayText(String text){
+		sendMessage("3|"+text+"  ");
+	}
+	
+	public void sendUpdateMessage(String m){
+		sendMessage("2|"+m);
+	}
 
-	public void sendMessage(String m) {
+	private void sendMessage(String m) {
 		try {
 			dout.writeUTF(m);
 		} catch (IOException e) {

+ 0 - 1
server/server/Server.java

@@ -42,7 +42,6 @@ public class Server {
 								matchMakingUsers.remove(1);
 								matchMakingUsers.remove(0);
 							}
-							System.out.println(matchMakingUsers.size());
 							System.out.println("New client connected: " + client.getRemoteSocketAddress());
 						} catch (IOException e) {
 							e.printStackTrace();

+ 35 - 15
server/server/match/Match.java

@@ -40,7 +40,8 @@ public class Match implements Runnable {
 		this.nwuser2 = nwuser2;
 		System.out.println("New Match!");
 		levels = LevelReader.readLevelsFromFiles();
-
+		playLevel(getCurrentLevel());
+		
 		timer = new Timer();
 		timer.schedule(new TimerTask() {
 			@Override
@@ -48,20 +49,31 @@ public class Match implements Runnable {
 				update();
 			}
 		}, 0, 1000 / 30);
-
-		playLevel(getCurrentLevel());
 	}
 
 	public void playLevel(Level level) {
 		balls.clear();
-		for (Ball b : level.getStartballs()) {
-			balls.add(b.clone());
+		if(level == null){
+			timer.cancel();
+			setOverlayMessage("No more levels to play!");
+		}else{
+			setOverlayMessage("Level "+(currentlevel+1));
+			player1.reset();
+			player2.reset();
+			line1 = null;
+			line2 = null;
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+			for (Ball b : level.getStartballs()) {
+				balls.add(b.clone());
+			}
+			timeleft = level.getTime();
+			lasttime = System.currentTimeMillis();	
+			setOverlayMessage("");
 		}
-		timeleft = level.getTime();
-		player1.reset();
-		player2.reset();
-		line1 = null;
-		lasttime = System.currentTimeMillis();
 	}
 
 	public Level getCurrentLevel() {
@@ -151,7 +163,8 @@ public class Match implements Runnable {
 				player2.setScore(player2.getScore() + (timeleft / 100));
 			else
 				player2.setScore(player2.getScore() + (timeleft / 100) / 2);
-			playLevel(levels.get(currentlevel += 1));
+			currentlevel++;
+			playLevel(getCurrentLevel());
 		} else if (timeleft < 0) {
 			player1.setHealth(player1.getHealth() - 1);
 			player2.setHealth(player2.getHealth() - 1);
@@ -162,7 +175,7 @@ public class Match implements Runnable {
 		lasttime = System.currentTimeMillis();
 
 		// Sending the new information to the players
-		String playerinfo = "2|" + player1.getX() + "|" + player1.getY() + "|" + player1.getHealth() + "|" + player1.getScore() + "|" + player2.getX() + "|" + player2.getY() + "|" + player2.getHealth() + "|" + player2.getScore();
+		String playerinfo = player1.getX() + "|" + player1.getY() + "|" + player1.getHealth() + "|" + player1.getScore() + "|" + player2.getX() + "|" + player2.getY() + "|" + player2.getHealth() + "|" + player2.getScore();
 
 		String ballsinfo = ",";
 		for (Ball b : balls) {
@@ -179,14 +192,21 @@ public class Match implements Runnable {
 		else
 			linesinfo += "0|0|0|";
 
-		String timeleft = "," + (int) (this.timeleft / (double) getCurrentLevel().getTime() * 100);
+		String timeleft = ",0";
+		if(getCurrentLevel() != null){
+			timeleft = "," + (int) (this.timeleft / (double) getCurrentLevel().getTime() * 100);
+		}
 
-		nwuser1.sendMessage(playerinfo + ballsinfo + linesinfo + timeleft);
-		nwuser2.sendMessage(playerinfo + ballsinfo + linesinfo + timeleft);
+		nwuser1.sendUpdateMessage(playerinfo + ballsinfo + linesinfo + timeleft);
+		nwuser2.sendUpdateMessage(playerinfo + ballsinfo + linesinfo + timeleft);
 
 	}
 
 	/* GETTERS AND SETTERS */
+	public void setOverlayMessage(String m){
+		nwuser1.sendOverlayText(m);
+		nwuser2.sendOverlayText(m);
+	}
 	public void setPlayerDirection(int pid, int dir) {
 		if (pid == 1)
 			p1direction = dir;

+ 18 - 8
src/model/NetworkConnection.java

@@ -4,6 +4,7 @@ import java.awt.Color;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
+import java.net.ConnectException;
 import java.net.Socket;
 import java.net.UnknownHostException;
 
@@ -19,16 +20,23 @@ public class NetworkConnection {
 
 	public NetworkConnection(PlayState play) {
 		this.play = play;
+		play.setOverlayText("Waiting for other players..");
 	}
 
 	public void connect(String name) throws UnknownHostException, IOException {
 		if (checkConnection()) {
 			throw new IOException("Already connected!");
 		}
-		Socket server = new Socket(address, port);
-		dout = new DataOutputStream(server.getOutputStream());
-		din = new DataInputStream(server.getInputStream());
-		dout.writeUTF(name);
+		try{
+			Socket server = new Socket(address, port);
+			dout = new DataOutputStream(server.getOutputStream());
+			din = new DataInputStream(server.getInputStream());
+			dout.writeUTF(name);
+		}catch (ConnectException e){
+			play.setOverlayText("Can't connect to the server");
+			System.err.println("Can't connect to the server");
+			throw new IOException("Can't connect to the server");
+		}
 		receivethread = new Thread(new Runnable() {
 			@Override
 			public void run() {
@@ -78,10 +86,13 @@ public class NetworkConnection {
 				play.updateLines(Integer.parseInt(linesplit[0]), Integer.parseInt(linesplit[1]), Integer.parseInt(linesplit[2]), Integer.parseInt(linesplit[3]), Integer.parseInt(linesplit[4]), Integer.parseInt(linesplit[5]));
 
 				play.setTimeleftpercent(Integer.parseInt(messagesplit[3]));
-
+				break;
+			case "3": //Overlay text
+				play.setOverlayText(messagesplit[1]);
 			}
 		} catch (IOException e) {
-			System.err.println("Connection to server closed");
+			play.setOverlayText("Connection to the server closed");
+			System.err.println("Connection to the server closed");
 			receivethread.stop();
 		}
 
@@ -94,9 +105,8 @@ public class NetworkConnection {
 	private void sendMessage(String m) {
 		try {
 			dout.writeUTF(m);
-		} catch (IOException e) {
+		} catch (IOException | NullPointerException e) {
 			System.err.println("Connection to server closed");
-
 		}
 	}
 	

+ 7 - 0
src/model/state/PlayState.java

@@ -1,5 +1,6 @@
 package model.state;
 
+import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.event.KeyEvent;
 import java.io.IOException;
@@ -24,6 +25,7 @@ public class PlayState extends State {
 	private InfoPanel infopanel;
 	private NetworkConnection nwc;
 	private int timeleftpercent, direction, shoot;
+	private String overlayText;
 
 	public PlayState(GameStateManager gsm) {
 		super("play", gsm);
@@ -93,6 +95,8 @@ public class PlayState extends State {
 		player1.paint(g2d);
 		player2.paint(g2d);
 		infopanel.paint(g2d);
+		g2d.setColor(Color.RED);
+		g2d.drawString(overlayText, 100, 300);
 	}
 
 	/* GETTERS AND SETTERS */
@@ -126,6 +130,9 @@ public class PlayState extends State {
 		this.timeleftpercent = timeleftpercent;
 	}
 
+	public void setOverlayText(String text){
+		this.overlayText = text;
+	}
 	/* EVENTS */
 	@Override
 	public void keyPressed(KeyEvent e) {