private void saveAndClose_Click(object sender, EventArgs e) { bool isTurnSelected = false; bool isNameEmpty = true; bool hasBothKings = false; bool areKingsInCheck = true; /// Verify form has all valid fields and no kings are in check (turn times are automatically taken care of) // Check if the custom game has a name isNameEmpty = gameNameBox.Text == ""; if (isNameEmpty) { ShowErrorMessage("You must enter a name for this game mode."); return; } // Check if the turns are selected isTurnSelected = whiteToMove.Checked || blackToMove.Checked; if (!isTurnSelected) { ShowErrorMessage("You must first select which color moves first on game startup."); return; } // Check to make sure there are both black and white kings on the board bool hasWhiteKing = false, hasBlackKing = false; foreach (Button square in board) { if ((string)square.Tag == TagStrings[(int)PieceEnum.WhiteKing]) { hasWhiteKing = true; if (hasBlackKing) { // Both kings found, exit loop break; } } else if ((string)square.Tag == TagStrings[(int)PieceEnum.BlackKing]) { hasBlackKing = true; if (hasWhiteKing) { // Both kings found, exit loop break; } } } hasBothKings = hasBlackKing && hasWhiteKing; if (!hasBothKings) { string missingKings = ""; if (!hasBlackKing) { missingKings += "You are missing the black king"; // Both kings missing if (!hasWhiteKing) { missingKings += " and the white king"; } } else if (!hasWhiteKing) { missingKings += "You are missing the white king"; } missingKings += "."; ShowErrorMessage(missingKings); return; } //Verify no kings are in check CheckLogic logic = new CheckLogic(board); areKingsInCheck = logic.GetCustomGameCheckState() == ChessUtils.CheckState.Check; if (areKingsInCheck) { ShowErrorMessage("One of your kings is in check!"); return; } // Add the settings to the database List <Piece> pieces = new List <Piece>(); foreach (Button square in board) { Piece piece = new Piece(); Coordinates c = ChessUtils.Settings.GetCoordinatesOfButton(square); string name = square.Tag.ToString(); piece.Coordinates = c; piece.Name = name; pieces.Add(piece); } int gameTimerSeconds = IsPlayerTotalTime.Checked ? ((int)totalMins.Value * 60) + ((int)totalSecs.Value) : 0; int moveTimerSeconds = IsPlayerTurnTime.Checked ? ((int)turnMins.Value * 60) + ((int)turnSecs.Value) : 0; CustomGame game = new CustomGame { Username = me.Username, GameTimer = gameTimerSeconds, MoveTimer = moveTimerSeconds, WhiteMovesFirst = whiteToMove.Checked, CustomGameName = gameNameBox.Text, Pieces = pieces }; bool success = DataApiController <CustomGame> .PostData(ChessUtils.IPAddressWithPort + "AddCustomGame", game); if (!success) { ShowErrorMessage("Error while adding custom game to database."); } else { Close(); } }
private void addGameButton_Click(object sender, EventArgs e) { if (gamesList.SelectedRows.Count > 0) { // Get the game ID from the row int gameId = (int)gamesList.SelectedRows[0].Cells[0].Value; // Match the game ID with the appropriate CustomGame in the list CustomGame game = gameList.Single(x => x.GameID == gameId); // Convert the list of pieces into a double array (board) MoveLogic.Piece[][] pieces = new MoveLogic.Piece[8][]; for (int i = 0; i < 8; ++i) { pieces[i] = new MoveLogic.Piece[8]; } foreach (MoveLogic.Piece piece in game.Pieces) { MoveLogic.Coordinates c = piece.Coordinates; pieces[c.X][c.Y] = new MoveLogic.Piece(); pieces[c.X][c.Y] = piece; } Random rand = new Random(Guid.NewGuid().GetHashCode()); double randNum = rand.NextDouble(); bool hostTurn = true;// (randNum < 0.5); moveLogic.myTurn = hostTurn; moveLogic.myColor = moveLogic.myTurn ? moveLogic.myColor = MoveLogic.pieceColor.white : moveLogic.myColor = MoveLogic.pieceColor.black; MoveLogic.pieceColor guestColor = (moveLogic.myColor == MoveLogic.pieceColor.white) ? MoveLogic.pieceColor.black : MoveLogic.pieceColor.white; // Create the new session to add to the lobby table Session mySession = new Session() { HostPlayer = game.Username, GuestPlayer = "", GameTimerSeconds = game.GameTimer, MoveTimerSeconds = game.MoveTimer, CustomGameMode = 3 /* Custom game */, BoardPieces = pieces, GameID = gameId, GuestColor = (int)guestColor }; // Create the signal to send TCPSignal signal = new TCPSignal() { SignalType = Signal.CreateSession, NewSession = mySession }; // Send the json over to the server string json = JsonConvert.SerializeObject(signal) + "\r"; byte[] jsonBytes = ASCIIEncoding.ASCII.GetBytes(json); byte[] readBuffer = new byte[65535]; lobby.stream.Write(jsonBytes, 0, jsonBytes.Length); lobby.RefreshTable(); mySession.SessionID = (int)lobby.GetLobbyTable().Rows[lobby.GetLobbyTable().Rows.Count - 1].Cells[0].Value; GameSession session = new GameSession(me, new User("", ""), stream, mySession, lobby, moveLogic, game); session.ShowDialog(); Hide(); Close(); } }