Example #1
0
        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;
            }
        }
Example #2
0
        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;
                }
            }
        }