// handlePlayerTurn METHOD THAT OVERRIDES THE ONE IN GENERIC GAME // Returns true always. // TODO: How do we end the game? Do we change the send packet so that the second character after the delim is the player's assigned number? public override bool handlePlayerTurn(String s) // each player will call this function with their input. { Console.Write("It is currently this player's turn: " + loop.getActivePlayer()); Console.Write("Recieved: " + s + " from client. Handling message..."); String[] move = s.Split('%'); // Split the string by the delimiter. int placeX = System.Convert.ToInt32(move[0]); // Convert Strings to int for the placeX int placeY = System.Convert.ToInt32(move[1]); // Technically we don't need this... TODO: is there something we can do? int thePlayer = loop.getActivePlayer(); // should return either 0 or 1 provided server checked to make sure there are 2 players. Piece_Generic piece = new Piece_Generic(); piece.setX(placeX); if (thePlayer == 0) { piece.setValue(1); // value of piece is 1, indicating player 1 } else { piece.setValue(2); // value of piece is 2, indicating player 2 } // add the piece gamePieces.Add(piece); // assignPiece to the place; if it is valid, the method will go ahead and place it. // On a not successful attempt, placeY will instead be null. placeY = assignPiece(placeX, placeY, piece.getValue()); // assignPiece will "attempt" to place the piece there. it will then return the placeY value. // get input on where the piece has been placed and save it to gameBoard, check that the spot is already occupied. if (placeY == -1) { // invalid move, return early. return(false); } else if (placeY != -1) // if placeY is not the error code { // Set the "piece" of the player to be their last move so it is printed out. (Unecessary, but shows us something) gamePieces[thePlayer].setX(placeX); gamePieces[thePlayer].setY(placeY); if (checkGameState(placeX, placeY)) // using the recently placed piece, check if the state is a win condition. { Console.Write("[CONNECT 4] Game is over! Player: " + (loop.getActivePlayer() + 1) + " is the victor!"); // mark gameState as false, which will in turn trigger a specific message that will be sent. gameState = false; } } return(true); // the move was not valid }
public Game_Generic(int x_size, int y_size) { gameBoard = new int[x_size, y_size]; gamePieces = new List <Piece_Generic>(); currentPlayers = new List <Player>(); loop = new Server_GameLoop(); gameType = "generic"; maxPlayers = 2; // Player 1 - temp - Piece_Generic piece = new Piece_Generic(); piece.setX(2); piece.setY(2); piece.setValue(0) // Player 2 - temp - Piece_Generic piece2 = new Piece_Generic(); piece2.setX(3); piece2.setY(3); piece2.setValue(1) // Add to board gamePieces.Add(piece1); gamePieces.Add(piece2); }