此系統只是為了讓自己多瞭解一下有關底層通訊協定的相關知識。
聊天功能是通過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、資源的釋放。
源碼下載 存在問題之處請指正....