|
@@ -1,12 +1,7 @@
|
|
|
package server.match;
|
|
package server.match;
|
|
|
|
|
|
|
|
-import java.awt.Color;
|
|
|
|
|
-import java.io.File;
|
|
|
|
|
-import java.io.IOException;
|
|
|
|
|
-import java.nio.file.Files;
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.ConcurrentModificationException;
|
|
import java.util.ConcurrentModificationException;
|
|
|
-import java.util.List;
|
|
|
|
|
import java.util.ListIterator;
|
|
import java.util.ListIterator;
|
|
|
import java.util.Timer;
|
|
import java.util.Timer;
|
|
|
import java.util.TimerTask;
|
|
import java.util.TimerTask;
|
|
@@ -14,7 +9,6 @@ import java.util.TimerTask;
|
|
|
import resources.image.Images;
|
|
import resources.image.Images;
|
|
|
import resources.image.Images.ImageType;
|
|
import resources.image.Images.ImageType;
|
|
|
import server.LevelReader;
|
|
import server.LevelReader;
|
|
|
-import server.Main;
|
|
|
|
|
import server.NetworkUser;
|
|
import server.NetworkUser;
|
|
|
import server.match.levels.Level;
|
|
import server.match.levels.Level;
|
|
|
import server.match.objects.Ball;
|
|
import server.match.objects.Ball;
|
|
@@ -29,14 +23,14 @@ public class Match implements Runnable {
|
|
|
private ShootingLine line2;
|
|
private ShootingLine line2;
|
|
|
private ArrayList<Ball> balls;
|
|
private ArrayList<Ball> balls;
|
|
|
private int p1direction, p2direction;
|
|
private int p1direction, p2direction;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
private ArrayList<Level> levels;
|
|
private ArrayList<Level> levels;
|
|
|
private Timer timer;
|
|
private Timer timer;
|
|
|
private int currentlevel;
|
|
private int currentlevel;
|
|
|
private int timeleft;
|
|
private int timeleft;
|
|
|
private long lasttime;
|
|
private long lasttime;
|
|
|
-
|
|
|
|
|
- public Match(NetworkUser nwuser1, NetworkUser nwuser2){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public Match(NetworkUser nwuser1, NetworkUser nwuser2) {
|
|
|
nwuser1.startMatch(nwuser1.getName(), nwuser2.getName(), 1, this);
|
|
nwuser1.startMatch(nwuser1.getName(), nwuser2.getName(), 1, this);
|
|
|
nwuser2.startMatch(nwuser2.getName(), nwuser1.getName(), 2, this);
|
|
nwuser2.startMatch(nwuser2.getName(), nwuser1.getName(), 2, this);
|
|
|
player1 = new Player(Images.getImage(ImageType.PLAYER1), 40, 550);
|
|
player1 = new Player(Images.getImage(ImageType.PLAYER1), 40, 550);
|
|
@@ -46,162 +40,169 @@ public class Match implements Runnable {
|
|
|
this.nwuser2 = nwuser2;
|
|
this.nwuser2 = nwuser2;
|
|
|
System.out.println("New Match!");
|
|
System.out.println("New Match!");
|
|
|
levels = LevelReader.readLevelsFromFiles();
|
|
levels = LevelReader.readLevelsFromFiles();
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
timer = new Timer();
|
|
timer = new Timer();
|
|
|
timer.schedule(new TimerTask() {
|
|
timer.schedule(new TimerTask() {
|
|
|
@Override
|
|
@Override
|
|
|
public void run() {
|
|
public void run() {
|
|
|
- update();
|
|
|
|
|
|
|
+ update();
|
|
|
}
|
|
}
|
|
|
- }, 0, 1000/30);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ }, 0, 1000 / 30);
|
|
|
|
|
+
|
|
|
playLevel(getCurrentLevel());
|
|
playLevel(getCurrentLevel());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- public void playLevel(Level level){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public void playLevel(Level level) {
|
|
|
balls.clear();
|
|
balls.clear();
|
|
|
- for(Ball b:level.getStartballs()){
|
|
|
|
|
|
|
+ for (Ball b : level.getStartballs()) {
|
|
|
balls.add(b.clone());
|
|
balls.add(b.clone());
|
|
|
}
|
|
}
|
|
|
timeleft = level.getTime();
|
|
timeleft = level.getTime();
|
|
|
player1.reset();
|
|
player1.reset();
|
|
|
player2.reset();
|
|
player2.reset();
|
|
|
- line1=null;
|
|
|
|
|
|
|
+ line1 = null;
|
|
|
lasttime = System.currentTimeMillis();
|
|
lasttime = System.currentTimeMillis();
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- public Level getCurrentLevel(){
|
|
|
|
|
- if(currentlevel >= 0 && currentlevel < levels.size()){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public Level getCurrentLevel() {
|
|
|
|
|
+ if (currentlevel >= 0 && currentlevel < levels.size()) {
|
|
|
return levels.get(currentlevel);
|
|
return levels.get(currentlevel);
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/* UPDATE */
|
|
/* UPDATE */
|
|
|
- public void update() {
|
|
|
|
|
- if(p1direction == 1)
|
|
|
|
|
|
|
+ public void update() {
|
|
|
|
|
+ if (p1direction == 1)
|
|
|
player1.walkRight();
|
|
player1.walkRight();
|
|
|
- else if(p1direction == -1)
|
|
|
|
|
|
|
+ else if (p1direction == -1)
|
|
|
player1.walkLeft();
|
|
player1.walkLeft();
|
|
|
player1.update();
|
|
player1.update();
|
|
|
- if(p2direction == 1)
|
|
|
|
|
|
|
+ if (p2direction == 1)
|
|
|
player2.walkRight();
|
|
player2.walkRight();
|
|
|
- else if(p2direction == -1)
|
|
|
|
|
|
|
+ else if (p2direction == -1)
|
|
|
player2.walkLeft();
|
|
player2.walkLeft();
|
|
|
player2.update();
|
|
player2.update();
|
|
|
-
|
|
|
|
|
- if(line1 != null){
|
|
|
|
|
- line1.setLength(line1.getLength()+1);
|
|
|
|
|
- if(line1.getMaxHeight() < 0){ //Line hit the ceiling, so "remove" it
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (line1 != null) {
|
|
|
|
|
+ line1.setLength(line1.getLength() + 1);
|
|
|
|
|
+ if (line1.getMaxHeight() < 0) { // Line hit the ceiling, so "remove"
|
|
|
|
|
+ // it
|
|
|
line1 = null;
|
|
line1 = null;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if(line2 != null){
|
|
|
|
|
- line2.setLength(line2.getLength()+1);
|
|
|
|
|
- if(line2.getMaxHeight() < 0){
|
|
|
|
|
|
|
+ if (line2 != null) {
|
|
|
|
|
+ line2.setLength(line2.getLength() + 1);
|
|
|
|
|
+ if (line2.getMaxHeight() < 0) {
|
|
|
line2 = null;
|
|
line2 = null;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- //Collision detection
|
|
|
|
|
- try{
|
|
|
|
|
- ListIterator<Ball> b = balls.listIterator();
|
|
|
|
|
- while(b.hasNext()){
|
|
|
|
|
- Ball bal = b.next();
|
|
|
|
|
- if(line1 != null && bal.hitLine(line1)){ // Collision between line and ball
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Collision detection
|
|
|
|
|
+ try {
|
|
|
|
|
+ ListIterator<Ball> b = balls.listIterator();
|
|
|
|
|
+ while (b.hasNext()) {
|
|
|
|
|
+ Ball bal = b.next();
|
|
|
|
|
+ if (line1 != null && bal.hitLine(line1)) { // Collision between
|
|
|
|
|
+ // line and ball
|
|
|
line1 = null;
|
|
line1 = null;
|
|
|
b.remove();
|
|
b.remove();
|
|
|
- b.add(new Ball(bal.getSize()-1, (int) Math.max(bal.getBounceHeight()/1.5, player1.getHeigth() +5), bal.getColor(), bal.getX(), bal.getY(), -1, Math.abs(bal.getYSpeed())*-1));
|
|
|
|
|
- b.add(new Ball(bal.getSize()-1, (int) Math.max(bal.getBounceHeight()/1.5, player1.getHeigth() +5), bal.getColor(), bal.getX(), bal.getY(), 1, Math.abs(bal.getYSpeed())*-1));
|
|
|
|
|
- }else if(line2 != null && bal.hitLine(line2)){ // Collision between line and ball
|
|
|
|
|
|
|
+ b.add(new Ball(bal.getSize() - 1, (int) Math.max(bal.getBounceHeight() / 1.5, player1.getHeigth() + 5), bal.getColor(), bal.getX(), bal.getY(), -1, Math.abs(bal.getYSpeed()) * -1));
|
|
|
|
|
+ b.add(new Ball(bal.getSize() - 1, (int) Math.max(bal.getBounceHeight() / 1.5, player1.getHeigth() + 5), bal.getColor(), bal.getX(), bal.getY(), 1, Math.abs(bal.getYSpeed()) * -1));
|
|
|
|
|
+ } else if (line2 != null && bal.hitLine(line2)) { // Collision
|
|
|
|
|
+ // between
|
|
|
|
|
+ // line and
|
|
|
|
|
+ // ball
|
|
|
line2 = null;
|
|
line2 = null;
|
|
|
b.remove();
|
|
b.remove();
|
|
|
- b.add(new Ball(bal.getSize()-1, (int) Math.max(bal.getBounceHeight()/1.5, player1.getHeigth() +5), bal.getColor(), bal.getX(), bal.getY(), -1, Math.abs(bal.getYSpeed())*-1));
|
|
|
|
|
- b.add(new Ball(bal.getSize()-1, (int) Math.max(bal.getBounceHeight()/1.5, player1.getHeigth() +5), bal.getColor(), bal.getX(), bal.getY(), 1, Math.abs(bal.getYSpeed())*-1));
|
|
|
|
|
- }else if(bal.hitPlayer(player1)){ // Collision between player and ball
|
|
|
|
|
- player1.setHealth(player1.getHealth()-1);
|
|
|
|
|
|
|
+ b.add(new Ball(bal.getSize() - 1, (int) Math.max(bal.getBounceHeight() / 1.5, player1.getHeigth() + 5), bal.getColor(), bal.getX(), bal.getY(), -1, Math.abs(bal.getYSpeed()) * -1));
|
|
|
|
|
+ b.add(new Ball(bal.getSize() - 1, (int) Math.max(bal.getBounceHeight() / 1.5, player1.getHeigth() + 5), bal.getColor(), bal.getX(), bal.getY(), 1, Math.abs(bal.getYSpeed()) * -1));
|
|
|
|
|
+ } else if (bal.hitPlayer(player1)) { // Collision between player
|
|
|
|
|
+ // and ball
|
|
|
|
|
+ player1.setHealth(player1.getHealth() - 1);
|
|
|
playLevel(getCurrentLevel());
|
|
playLevel(getCurrentLevel());
|
|
|
- }else if(bal.hitPlayer(player2)){ // Collision between player and ball
|
|
|
|
|
- player2.setHealth(player2.getHealth()-1);
|
|
|
|
|
|
|
+ } else if (bal.hitPlayer(player2)) { // Collision between player
|
|
|
|
|
+ // and ball
|
|
|
|
|
+ player2.setHealth(player2.getHealth() - 1);
|
|
|
playLevel(getCurrentLevel());
|
|
playLevel(getCurrentLevel());
|
|
|
- }else if(bal.getSize() <= 0 ){ // Remove ball from arraylist when size is 0 (not visible)
|
|
|
|
|
|
|
+ } else if (bal.getSize() <= 0) { // Remove ball from arraylist
|
|
|
|
|
+ // when size is 0 (not
|
|
|
|
|
+ // visible)
|
|
|
b.remove();
|
|
b.remove();
|
|
|
- }else{
|
|
|
|
|
|
|
+ } else {
|
|
|
bal.update();
|
|
bal.update();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }catch(ConcurrentModificationException e){
|
|
|
|
|
-
|
|
|
|
|
|
|
+ } catch (ConcurrentModificationException e) {
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
timeleft -= (System.currentTimeMillis() - lasttime);
|
|
timeleft -= (System.currentTimeMillis() - lasttime);
|
|
|
- if(balls.size() == 0){
|
|
|
|
|
- if(player1.getHealth() > 0)
|
|
|
|
|
- player1.setScore(player1.getScore()+(timeleft/100));
|
|
|
|
|
|
|
+ if (balls.size() == 0) {
|
|
|
|
|
+ if (player1.getHealth() > 0)
|
|
|
|
|
+ player1.setScore(player1.getScore() + (timeleft / 100));
|
|
|
else
|
|
else
|
|
|
- player1.setScore(player1.getScore()+(timeleft/100)/2);
|
|
|
|
|
-
|
|
|
|
|
- if(player2.getHealth() > 0)
|
|
|
|
|
- player2.setScore(player2.getScore()+(timeleft/100));
|
|
|
|
|
|
|
+ player1.setScore(player1.getScore() + (timeleft / 100) / 2);
|
|
|
|
|
+
|
|
|
|
|
+ if (player2.getHealth() > 0)
|
|
|
|
|
+ player2.setScore(player2.getScore() + (timeleft / 100));
|
|
|
else
|
|
else
|
|
|
- player2.setScore(player2.getScore()+(timeleft/100)/2);
|
|
|
|
|
- playLevel(levels.get(currentlevel+=1));
|
|
|
|
|
- }else if(timeleft < 0){
|
|
|
|
|
- player1.setHealth(player1.getHealth()-1);
|
|
|
|
|
- player2.setHealth(player2.getHealth()-1);
|
|
|
|
|
|
|
+ player2.setScore(player2.getScore() + (timeleft / 100) / 2);
|
|
|
|
|
+ playLevel(levels.get(currentlevel += 1));
|
|
|
|
|
+ } else if (timeleft < 0) {
|
|
|
|
|
+ player1.setHealth(player1.getHealth() - 1);
|
|
|
|
|
+ player2.setHealth(player2.getHealth() - 1);
|
|
|
playLevel(getCurrentLevel());
|
|
playLevel(getCurrentLevel());
|
|
|
- }else if(player1.getHealth() <= 0) {
|
|
|
|
|
-
|
|
|
|
|
|
|
+ } else if (player1.getHealth() <= 0) {
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
- 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 ballsinfo =",";
|
|
|
|
|
- for(Ball b:balls){
|
|
|
|
|
- ballsinfo += b.getX()+"|"+b.getY()+"|"+b.getSize()+"|"+b.getColor().getRGB() + "|" ;
|
|
|
|
|
|
|
+ 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 ballsinfo = ",";
|
|
|
|
|
+ for (Ball b : balls) {
|
|
|
|
|
+ ballsinfo += b.getX() + "|" + b.getY() + "|" + b.getSize() + "|" + b.getColor().getRGB() + "|";
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- String linesinfo = "," ;
|
|
|
|
|
- if(line1 != null)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ String linesinfo = ",";
|
|
|
|
|
+ if (line1 != null)
|
|
|
linesinfo += line1.getX() + "|" + line1.getY() + "|" + line1.getLength() + "|";
|
|
linesinfo += line1.getX() + "|" + line1.getY() + "|" + line1.getLength() + "|";
|
|
|
else
|
|
else
|
|
|
linesinfo += "0|0|0|";
|
|
linesinfo += "0|0|0|";
|
|
|
- if(line2 != null)
|
|
|
|
|
|
|
+ if (line2 != null)
|
|
|
linesinfo += line2.getX() + "|" + line2.getY() + "|" + line2.getLength();
|
|
linesinfo += line2.getX() + "|" + line2.getY() + "|" + line2.getLength();
|
|
|
else
|
|
else
|
|
|
linesinfo += "0|0|0|";
|
|
linesinfo += "0|0|0|";
|
|
|
-
|
|
|
|
|
- String timeleft = ","+(int)(this.timeleft/(double)getCurrentLevel().getTime()*100);
|
|
|
|
|
-
|
|
|
|
|
- nwuser1.sendMessage(playerinfo+ballsinfo+linesinfo+timeleft);
|
|
|
|
|
- nwuser2.sendMessage(playerinfo+ballsinfo+linesinfo+timeleft);
|
|
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
|
|
+ String timeleft = "," + (int) (this.timeleft / (double) getCurrentLevel().getTime() * 100);
|
|
|
|
|
+
|
|
|
|
|
+ nwuser1.sendMessage(playerinfo + ballsinfo + linesinfo + timeleft);
|
|
|
|
|
+ nwuser2.sendMessage(playerinfo + ballsinfo + linesinfo + timeleft);
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
/* GETTERS AND SETTERS */
|
|
/* GETTERS AND SETTERS */
|
|
|
- public void setPlayerDirection(int pid, int dir){
|
|
|
|
|
- if(pid == 1)
|
|
|
|
|
|
|
+ public void setPlayerDirection(int pid, int dir) {
|
|
|
|
|
+ if (pid == 1)
|
|
|
p1direction = dir;
|
|
p1direction = dir;
|
|
|
- if(pid == 2)
|
|
|
|
|
|
|
+ if (pid == 2)
|
|
|
p2direction = dir;
|
|
p2direction = dir;
|
|
|
}
|
|
}
|
|
|
- public void playerShoot(int pid){
|
|
|
|
|
- if(pid == 1)
|
|
|
|
|
- line1 = new ShootingLine(player1.getX()+player1.getWidth()/2, player1.getY()+player1.getHeigth());
|
|
|
|
|
- if(pid == 2)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public void playerShoot(int pid) {
|
|
|
|
|
+ if (pid == 1)
|
|
|
|
|
+ line1 = new ShootingLine(player1.getX() + player1.getWidth() / 2, player1.getY() + player1.getHeigth());
|
|
|
|
|
+ if (pid == 2)
|
|
|
line2 = new ShootingLine(player2.getX(), player2.getY());
|
|
line2 = new ShootingLine(player2.getX(), player2.getY());
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- public void stopMatch(){
|
|
|
|
|
|
|
+
|
|
|
|
|
+ public void stopMatch() {
|
|
|
timer.cancel();
|
|
timer.cancel();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void run() {
|
|
public void run() {
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|