proper thread killing and online player myTurn handling

This commit is contained in:
Luca Conte 2024-12-23 20:02:11 +01:00
parent be6b50739f
commit 44f04a454f
5 changed files with 42 additions and 14 deletions

View File

@ -225,7 +225,10 @@ public class AsyncSocket {
try {
this.socket.close();
if (this.checkerThread != null) this.checkerThread.join();
if (this.checkerThread != null) {
this.checkerThread.interrupt();
this.checkerThread.join();
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {

View File

@ -9,7 +9,6 @@ public class HumanPlayer extends LocalPlayer {
@Override
public void shoot(Point point) {
if (!this.myTurn) return;
this.myTurn = false;
enemy.receiveShoot(point);
}
}

View File

@ -15,7 +15,11 @@ public class LocalPlayer extends Player {
*/
@Override
public synchronized void receiveShoot(Point point) {
if (!this.enemy.myTurn) return;
if (!this.enemy.myTurn) {
System.out.println("enemy tried to fire when not their turn!");
return;
}
this.enemy.myTurn = false;
HitResponse hitResponse = board.getHitResponseOnPoint(point);
if (!(hitResponse == null)){
@ -29,7 +33,7 @@ public class LocalPlayer extends Player {
switch (hitResponse.getType()) {
case HIT, SUNK -> this.myTurn = false;
case MISS -> this.myTurn = true;
case VICTORY -> GameController.getMainFrame().showPanelLose("", this); //TODO Was halt bei victory passiert ist hier wurder verloheren
case VICTORY -> GameController.getMainFrame().showPanelLose("LoseScreen", this);
}
GameController.getMainFrame().refreshGameBoard();
}
@ -45,7 +49,7 @@ public class LocalPlayer extends Player {
switch (hitResponse.getType()) {
case HIT, SUNK -> this.myTurn = true;
case MISS -> this.myTurn = false;
case VICTORY -> GameController.getMainFrame().showPanelWin("", this); // TODO was halt beim victory passier ist hier wurde gewonnen
case VICTORY -> GameController.getMainFrame().showPanelWin("", this);
}
GameController.getMainFrame().refreshGameBoard();
}
@ -86,4 +90,4 @@ public class LocalPlayer extends Player {
super.ready();
}
}
}

View File

@ -22,12 +22,6 @@ public abstract class OnlinePlayer extends Player implements AsyncSocketListener
public abstract void receive(String message);
@Override
public abstract void receiveShoot(Point point);
@Override
public abstract void receiveHit(HitResponse hitResponse);
@Override
public abstract void receiveCoin(boolean coin);

View File

@ -58,7 +58,23 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer {
Point point = new Point(data.get(0));
int typeIndex = Integer.parseInt(data.get(1));
if (Point.isValidSyntax(data.get(0)) && typeIndex >= 0 && typeIndex < HitResponseType.values().length){
this.enemy.receiveHit(new HitResponse(typeIndex, point));
HitResponse hitResponse = new HitResponse(typeIndex, point);
this.enemy.receiveHit(hitResponse);
switch (hitResponse.getType()) {
case HIT, SUNK:
this.myTurn = false;
break;
case MISS:
this.myTurn = true;
break;
case VICTORY:
// GameController.getMainFrame().showPanelWin("", this.enemy);
break;
}
}
}
break;
@ -102,6 +118,18 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer {
*/
@Override
public synchronized void receiveHit(HitResponse hitResponse) {
switch (hitResponse.getType()) {
case HIT, SUNK:
this.myTurn = true;
break;
case MISS:
this.myTurn = false;
break;
case VICTORY:
// GameController.getMainFrame().showPanelLose("", this.enemy);
break;
}
super.socket.send(new SocketPackage("HIT", hitResponse.toString()));
}
@ -125,4 +153,4 @@ public class OnlinePlayer_1_1_0 extends OnlinePlayer {
// SHOULD NEVER BE CALLED ON ONLINE PLAYER. ONLY ON HUMAN PLAYER
return;
}
}
}