private void ThreadReceivingClient() { //_____________________________________________________________________________________________ // // Thread for receiving packets from server //_____________________________________________________________________________________________ try { byte[] buf = new byte[512]; int bytesReceived = 0; tcpClient = new TcpClient(wServerIP, SERVERPORT); clientSockStream = tcpClient.GetStream(); objTicTacToe.RestartGame(); objTicTacToe.SetStatusMessage("Connected!"); wReceivingClient = true; while (wReceivingClient) { //_____________________________________________________________________________________________ // // Thread is blocked until receives data //_____________________________________________________________________________________________ try { bytesReceived = clientSockStream.Read(buf, 0, 2); } catch { return; } //_____________________________________________________________________________________________ // // Processes network packet //_____________________________________________________________________________________________ if (bytesReceived > 0) { //_____________________________________________________________________________________________ // // Control packet for game restart //_____________________________________________________________________________________________ if (buf[0] == byte.Parse(Asc("R").ToString())) { objTicTacToe.RestartGame(); continue; } //_____________________________________________________________________________________________ // // Packet indicating a game move //_____________________________________________________________________________________________ int wRow = int.Parse(Convert.ToChar(buf[0]).ToString()); int wColumn = int.Parse(Convert.ToChar(buf[1]).ToString()); if ((wRow > 0 && wRow < 4) && (wColumn > 0 && wColumn < 4)) { objTicTacToe.wNetworkPlay = true; objTicTacToe.MakeMove(wRow, wColumn); } } //if (bytesReceived>0) } //while (wReceivingClient) } catch (ThreadAbortException) {} catch (Exception ex) { MessageBox.Show("An error ocurred: " + ex.Message + "\n" + ex.StackTrace); objTicTacToe.mnDisconnect_Click(null, null); return; } }
private void PlayWinner(bool pJustVerifyMove, ref bool rGoodMove) { //_____________________________________________________________________________________________ // // Routine to check if it is possible to win the game // (sums lines and check totals latter) //_____________________________________________________________________________________________ if (wDifficulty == enDifficulty.Average) { rGoodMove = true; return; } int wSum1 = (int)objTicTacToe.wBoard[1, 1] + (int)objTicTacToe.wBoard[1, 2] + (int)objTicTacToe.wBoard[1, 3]; int wSum2 = (int)objTicTacToe.wBoard[2, 1] + (int)objTicTacToe.wBoard[2, 2] + (int)objTicTacToe.wBoard[2, 3]; int wSum3 = (int)objTicTacToe.wBoard[3, 1] + (int)objTicTacToe.wBoard[3, 2] + (int)objTicTacToe.wBoard[3, 3]; int wSum4 = (int)objTicTacToe.wBoard[1, 1] + (int)objTicTacToe.wBoard[2, 1] + (int)objTicTacToe.wBoard[3, 1]; int wSum5 = (int)objTicTacToe.wBoard[1, 2] + (int)objTicTacToe.wBoard[2, 2] + (int)objTicTacToe.wBoard[3, 2]; int wSum6 = (int)objTicTacToe.wBoard[1, 3] + (int)objTicTacToe.wBoard[2, 3] + (int)objTicTacToe.wBoard[3, 3]; int wSum7 = (int)objTicTacToe.wBoard[1, 1] + (int)objTicTacToe.wBoard[2, 2] + (int)objTicTacToe.wBoard[3, 3]; int wSum8 = (int)objTicTacToe.wBoard[3, 1] + (int)objTicTacToe.wBoard[2, 2] + (int)objTicTacToe.wBoard[1, 3]; //_____________________________________________________________________________________________ // // Calculates sum that indicates a good move for CPU //_____________________________________________________________________________________________ int wCPUSum = 0; if (wTypeCPU == enPlayType.Cross) { wCPUSum = 20; } else { wCPUSum = 2; } //_____________________________________________________________________________________________ // // If sum checks, plays in the available position to win the game //_____________________________________________________________________________________________ if (wSum1 == wCPUSum) { if (objTicTacToe.wBoard[1, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[1, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[1, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 3); } rGoodMove = true; return; } } if (wSum2 == wCPUSum) { if (objTicTacToe.wBoard[2, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 3); } rGoodMove = true; return; } } if (wSum3 == wCPUSum) { if (objTicTacToe.wBoard[3, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 3); } rGoodMove = true; return; } } if (wSum4 == wCPUSum) { if (objTicTacToe.wBoard[1, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 1); } rGoodMove = true; return; } } if (wSum5 == wCPUSum) { if (objTicTacToe.wBoard[1, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 2); } rGoodMove = true; return; } } if (wSum6 == wCPUSum) { if (objTicTacToe.wBoard[1, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 3); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 3); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 3); } rGoodMove = true; return; } } if (wSum7 == wCPUSum) { if (objTicTacToe.wBoard[1, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[3, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 3); } rGoodMove = true; return; } } if (wSum8 == wCPUSum) { if (objTicTacToe.wBoard[3, 1] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(3, 1); } rGoodMove = true; return; } if (objTicTacToe.wBoard[2, 2] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(2, 2); } rGoodMove = true; return; } if (objTicTacToe.wBoard[1, 3] == enPlayType.None) { if (pJustVerifyMove == false) { objTicTacToe.MakeMove(1, 3); } rGoodMove = true; return; } } }