Merge remote-tracking branch 'origin/master'

This commit is contained in:
Jonas 2022-04-08 13:03:41 +02:00
commit c3096d7088
7 changed files with 84 additions and 24 deletions

View File

@ -241,5 +241,11 @@ ToDo:
Stand: Stand:
Server - Client: Connection loss handling funktioniert nun. Server - Client: Connection loss handling funktioniert nun.
Lobby: ? Lobby: ?
Spiellogik: Spiellogik: VoteHandler wurde getestet und tut weitestgehenst was er soll
ToDo:
Spiellogik: - Send() methode von Passenger mit Client-Server verknüpfen(Seraina)
- NoiseHandler (Alex)
- Game Zyklus implementieren (Seraina)

View File

@ -38,7 +38,7 @@ public class GameFunctions {
for (int i = 0; i < nrOfPlayers; i++) { for (int i = 0; i < nrOfPlayers; i++) {
Human h = new Human(); Human h = new Human();
h.setPosition(train.orderOfTrain[i]); h.setPosition(train.orderOfTrain[i]);
passengerTrain[i] = h; passengerTrain[train.orderOfTrain[i]] = h;
} }
this.passengerTrain = passengerTrain; this.passengerTrain = passengerTrain;
} }

View File

@ -1,6 +1,7 @@
package ch.unibas.dmi.dbis.cs108.gamelogic; package ch.unibas.dmi.dbis.cs108.gamelogic;
import ch.unibas.dmi.dbis.cs108.BudaLogConfig; import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Ghost;
import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.GhostPlayer; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.GhostPlayer;
import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@ -16,10 +17,13 @@ public class GhostifyHandler {
* @param p Passenger to be ghostified * @param p Passenger to be ghostified
*/ */
public GhostPlayer ghost(Passenger p, Game game) { public Ghost ghost(Passenger p, Game game) { //TODO: Adjust for not only players but also npcs
LOGGER.debug("Passenger Position " + p.getPosition());
p.setGhost(); p.setGhost();
GhostPlayer g; Ghost g;
g = new GhostPlayer(p.getPosition(), p.getName(), p.getClientHandler(), false); g = new Ghost();
g.setGhost();
g.setPosition(p.getPosition());
game.gameFunctions.passengerTrain[g.getPosition()] = g; game.gameFunctions.passengerTrain[g.getPosition()] = g;
LOGGER.info("Passenger at position " + p.getPosition() + "has been ghostified"); LOGGER.info("Passenger at position " + p.getPosition() + "has been ghostified");
return g; return g;

View File

@ -31,7 +31,7 @@ public class VoteHandler {
* *
* @param passengers: passengers on the train * @param passengers: passengers on the train
*/ */
public static void ghostVote(Passenger[] passengers, Game game) { public void ghostVote(Passenger[] passengers, Game game) {
// array to collect votes for all players during voting, i.e. votes for player 1 (passengers[0]) // array to collect votes for all players during voting, i.e. votes for player 1 (passengers[0])
// are saved in // are saved in
@ -83,8 +83,10 @@ public class VoteHandler {
if (votesForPlayers[i] == currentMax) { // if player at position i has most votes if (votesForPlayers[i] == currentMax) { // if player at position i has most votes
ghostPosition = i; ghostPosition = i;
LOGGER.info("Most votes for Passenger " + i); LOGGER.info("Most votes for Passenger " + i);
} }
} }
LOGGER.debug("ghostPosition: " + ghostPosition);
GhostifyHandler gh = new GhostifyHandler(); GhostifyHandler gh = new GhostifyHandler();
Ghost g = gh.ghost(passengers[ghostPosition], game); Ghost g = gh.ghost(passengers[ghostPosition], game);
passengers[ghostPosition] = g; passengers[ghostPosition] = g;
@ -105,7 +107,7 @@ public class VoteHandler {
* *
* @param passengers: train passengers * @param passengers: train passengers
*/ */
public static void humanVote(Passenger[] passengers, Game game) { public void humanVote(Passenger[] passengers, Game game) {
// array to collect votes for all players during voting, i.e. votes for player 1 are saved in // array to collect votes for all players during voting, i.e. votes for player 1 are saved in
@ -170,9 +172,9 @@ public class VoteHandler {
if (!passenger.getIsGhost()) { if (!passenger.getIsGhost()) {
humans++; humans++;
} }
if (humans == 1) { }
System.out.println("Game over: ghosts win!"); if (humans == 1) {
} System.out.println("Game over: ghosts win!");
} }
// Usual case: there is more than one human left and a normal ghost has been voted for --> // Usual case: there is more than one human left and a normal ghost has been voted for -->
// kick this ghost off // kick this ghost off
@ -188,14 +190,22 @@ public class VoteHandler {
} }
} }
/**
* Just a print Method for testing the VoteHandler
* @param array the Passenger array to be visualized
*/
static void print(Passenger[] array) { static void print(Passenger[] array) {
System.out.println(); System.out.println();
String[] print = new String[6]; String[] print = new String[6];
for (int i = 0; i < array.length; i++) { for (int i = 0; i < array.length; i++) {
if(array[i].getIsGhost()) { if (array[i].getKickedOff()) {
print[i] = "| ghost |"; print[i] = "| kicked off " + array[i].getPosition() + "|";
} else { } else {
print[i] = "| human |"; if (array[i].getIsGhost()) {
print[i] = "| ghost " + array[i].getPosition() + "|";
} else {
print[i] = "| human " + array[i].getPosition() + "|";
}
} }
} }
@ -209,21 +219,30 @@ public class VoteHandler {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
Game game = new Game(6,1, 6); Game game = new Game(6,1, 6);
VoteHandler voteHandler = new VoteHandler();
Passenger[] testArray = game.gameFunctions.passengerTrain; Passenger[] testArray = game.gameFunctions.passengerTrain;
Passenger ghost = new Ghost(); Passenger ghost = new Ghost();
testArray[3] = ghost; testArray[3] = ghost;
testArray[3].setGhost(); testArray[3].setGhost();
testArray[3].setIsOg(); testArray[3].setIsOg();
testArray[3].setPosition(3);
print(testArray); print(testArray);
LOGGER.info("NIGHT"); LOGGER.info("NIGHT");
ghostVote(testArray,game); voteHandler.ghostVote(testArray,game);
print(testArray); print(testArray);
LOGGER.info("Day"); LOGGER.info("Day");
humanVote(testArray, game); voteHandler.humanVote(testArray, game);
print(testArray); print(testArray);
LOGGER.info("NIGHT");
voteHandler.ghostVote(testArray,game);
print(testArray);
LOGGER.info("Day");
voteHandler.humanVote(testArray, game);
print(testArray);
} catch (TrainOverflow e) { } catch (TrainOverflow e) {
LOGGER.warn(e.getMessage()); LOGGER.warn(e.getMessage());
} }

View File

@ -19,17 +19,23 @@ public class Passenger {
protected ClientHandler clientHandler;//the socket for the client associated with this Passenger, for NPCs, this can be null. protected ClientHandler clientHandler;//the socket for the client associated with this Passenger, for NPCs, this can be null.
protected boolean hasVoted; //true if the player gave his vote during voting time protected boolean hasVoted; //true if the player gave his vote during voting time
protected int vote; //saves the number of the player this passenger voted for during voting (0-5) protected int vote; //saves the number of the player this passenger voted for during voting (0-5)
int sendcounter = 0;
/** /**
* Sends a protocol message to the respective player or NPC. * Sends a protocol message to the respective player or NPC.
* @param msg the message that is sent to this player. * @param msg the message that is sent to this player.
**/ **/
public void send(String msg) { public void send(String msg) {
if (msg.equals("Vote on who to ghostify!") || msg.equals("Vote for a ghost to kick off!")) { sendcounter++;
vote = 1; if (msg.equals("Vote on who to ghostify!")) {
vote = 1*sendcounter;
hasVoted = true; // for testing, when is it set to false again?
LOGGER.info("Voted for Position " + vote);
} else if(msg.equals("Vote for a ghost to kick off!")) {
vote = (int) (0.5*sendcounter);
hasVoted = true; // for testing, when is it set to false again? hasVoted = true; // for testing, when is it set to false again?
LOGGER.info("Voted for Position " + vote); LOGGER.info("Voted for Position " + vote);
} else { } else {
LOGGER.debug(msg); LOGGER.debug(msg);
} }
/*if (isPlayer) { /*if (isPlayer) {

View File

@ -9,6 +9,9 @@ import java.util.List;
*/ */
public class Lobby { public class Lobby {
private static final int MAX_NO_OF_CLIENTS = 6;
private static int lobbies;
/** /**
* The Person who created the game and can configure it and decide to start once enough players * The Person who created the game and can configure it and decide to start once enough players
* have entered the lobby. * have entered the lobby.
@ -18,23 +21,29 @@ public class Lobby {
/** /**
* Everyone who's in the lobby. * Everyone who's in the lobby.
*/ */
private List<ClientHandler> players = new ArrayList<>(); private List<ClientHandler> players = new ArrayList<>(6);
private static final int MAX_NO_OF_CLIENTS = 6;
private int numberOfPlayersInLobby;
private final int lobbyID = lobbies++;
static {
lobbies = 0;
}
/** /**
* The admin has to be set in the constructor. The admin is final. * Constructor. Sets the admin to who created the lobby. Adds the admin to the list of players.
* Every Lobby needs and admin, so no other constructors are needed. * Increases the number of players from 0 to 1.
*
* @param admin the Client who called CRTGM * @param admin the Client who called CRTGM
*/ */
public Lobby(ClientHandler admin) { public Lobby(ClientHandler admin) {
this.admin = admin; this.admin = admin;
this.players.add(admin);
this.numberOfPlayersInLobby = 1;
lobbies++;
} }
/** /**
@ -48,6 +57,7 @@ public class Lobby {
/** /**
* Adds a player to the lobby. * Adds a player to the lobby.
*
* @param player who wants to join the lobby. * @param player who wants to join the lobby.
*/ */
public void addPlayer(ClientHandler player) { public void addPlayer(ClientHandler player) {

View File

@ -1,5 +1,9 @@
package ch.unibas.dmi.dbis.cs108.sebaschi; package ch.unibas.dmi.dbis.cs108.sebaschi;
import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler;
import java.util.ArrayList;
import java.util.List;
/** /**
* This class is just everyone on the server, which games are open to join, who is in session. I.E. * This class is just everyone on the server, which games are open to join, who is in session. I.E.
* the context of the game just after joining the server, before starting a game and entering into a * the context of the game just after joining the server, before starting a game and entering into a
@ -7,4 +11,15 @@ package ch.unibas.dmi.dbis.cs108.sebaschi;
*/ */
public class ServerLobby { public class ServerLobby {
private static List<Lobby> openLobbies;
private static List<ClientHandler> allClients;
static {
openLobbies = new ArrayList<>();
allClients = new ArrayList<>();
}
public static List<Lobby> getOpenLobbies() {
return openLobbies;
}
} }