C#聊天+五子棋

來源:互聯網
上載者:User

此系統只是為了讓自己多瞭解一下有關底層通訊協定的相關知識。

聊天功能是通過Socket利用Tcp協議來實現。

聊天服務端:chatServer

聊天用戶端:chatClient

---聊天,是通過聊天服務端監聽,一旦有客戶串連上此服務端,那麼聊天服務端就儲存這個用戶端的Socket執行個體,並存放在一個IDictionnary內(全部的線上使用者),然後將已經存在的使用者資訊發送給此聊天用戶端(用戶端顯示線上列表),再將此用戶端的資訊發送給所有已經存在的用戶端使用者(及時更新用戶端線上使用者列表)。與此同時,在服務端為每個串連上伺服器的用戶端Socket執行個體,建立一個線程去監聽用戶端發來的資訊。

 

五子棋遊戲是通過Socket封裝的TcpClient類來實現。

遊戲服務端:每個聊天用戶端都可以充當遊戲服務端(邀請者=遊戲服務端)

遊戲用戶端:那就是接收邀請的使用者了

--五子棋遊戲,首先通過聊天的功能發送邀請給指定使用者(作為遊戲服務端開始監聽),使用者如果接受邀請,那麼就建立串連。之後利用遊戲建立的通訊來發送五子棋的座標。

 

個人覺得需要注意的方面:
1、操作不同線程的控制項。
  解決方式:利用委託或者直接聲明線程間的控制項可以互用。參考:http://www.cnblogs.com/cadlife/articles/2425820.html

2、畫棋盤方面,例:當表單程式最小化,再開啟時,棋盤會自動重繪。
  解決方式:重繪棋盤的同時,再讓其重繪棋子即可。(期待有好的方法)

3、判斷勝利

View Code

        /// <summary>        /// 判斷是否勝利        /// </summary>        /// <returns>是否有人勝利,1紅棋勝利、2黑棋勝利、0無人勝利</returns>        public int whetherSuccess()        {            #region 橫向            for (int i = 0; i <= 10; i++)            {                for (int j = 0; j <= 6; j++)                {                    if (array[j, i] == array[j + 1, i] && array[j + 1, i] == array[j + 2, i] && array[j + 2, i] == array[j + 3, i] && array[j + 3, i] == array[j + 4, i] && array[j + 4, i] == 1)                    {                        //紅色勝利                        return 1;                    }                    if (array[j, i] == array[j + 1, i] && array[j + 1, i] == array[j + 2, i] && array[j + 2, i] == array[j + 3, i] && array[j + 3, i] == array[j + 4, i] && array[j + 4, i] == 2)                    {                        //黑色勝利                        return 2;                    }                }            }            #endregion            #region 縱向            for (int i = 0; i <= 10; i++)            {                for (int j = 0; j <= 6; j++)                {                    if (array[i, j] == array[i, j + 1] && array[i, j + 1] == array[i, j + 2] && array[i, j + 2] == array[i, j + 3] && array[i, j + 3] == array[i, j + 4] && array[i, j + 4] == 1)                    {                        //紅色勝利                        return 1;                    }                    if (array[i, j] == array[i, j + 1] && array[i, j + 1] == array[i, j + 2] && array[i, j + 2] == array[i, j + 3] && array[i, j + 3] == array[i, j + 4] && array[i, j + 4] == 2)                    {                        //黑色勝利                        return 2;                    }                }            }            #endregion            #region 左上-右下            for (int i = 6; i <= 0; i--)            {                for (int j = 0; j <= 6 - i; j++)                {                    bool left = array[j, i + j] == array[j + 1, i + j + 1] && array[j + 1, i + j + 1] == array[j + 2, i + j + 2] && array[j + 2, i + j + 2] == array[j + 3, i + j + 3] && array[j + 3, i + j + 3] == array[j + 4, i + j + 4];                    bool right = array[i + j, j] == array[i + j + 1, j + 1] && array[i + j + 1, j + 1] == array[i + j + 2, j + 2] && array[i + j + 2, j + 2] == array[i + j + 3, j + 3] && array[i + j + 3, j + 3] == array[i + j + 4, j + 4];                    int nRet = left == true && array[j, i + j] != 0 ? array[j, i + j] : right == true && array[i + j, j] != 0 ? array[i + j, j] : 0;                    if (nRet != 0)                        return nRet;                }            }            #endregion            #region 右上-左下            for (int i = 4; i <= 10; i++)            {                for (int j = 0; j <= i - 4; j++)                {                    bool left = array[i - j, j] == array[i - j - 1, j + 1] && array[i - j - 1, j + 1] == array[i - j - 2, j + 2] && array[i - j - 2, j + 2] == array[i - j - 3, j + 3] && array[i - j - 3, j + 3] == array[i - j - 4, j + 4];                    bool right = array[10 - j, 10 - i + j] == array[10 - j - 1, 10 - i + j + 1] && array[10 - j - 1, 10 - i + j + 1] == array[10 - j - 2, 10 - i + j + 2] && array[10 - j - 2, 10 - i + j + 2] == array[10 - j - 3, 10 - i + j + 3] && array[10 - j - 3, 10 - i + j + 3] == array[10 - j - 4, 10 - i + j + 4];                    int nRet = left == true && array[i - j, j] != 0 ? array[i - j, j] : right == true && array[10 - j, 10 - i + j] != 0 ? array[10 - j, 10 - i + j] : 0;                    if (nRet != 0)                        return nRet;                }            }            #endregion            return 0;//未分出勝負        }

 

4、資源的釋放。

   源碼下載  存在問題之處請指正....

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.