資源簡介
程序使用VS2015,.NET4.5,.NET 2.0以上都可以編譯使用,無第三方組件,可生成32、64位。Socket網(wǎng)絡(luò)傳輸,可以對(duì)戰(zhàn)、旁觀,圍棋走棋規(guī)則基本全面,可直接對(duì)殺。
圍棋規(guī)則算法寫代碼太麻煩,直接參考了GreatVerveGo(是單機(jī)的)算法,感謝作者。
程序包含客戶端和服務(wù)端2各部分。圖片文件在\goo\bin\Debug\Res里面
1、先啟動(dòng)服務(wù)端 goServer.exe
進(jìn)入服務(wù)端后點(diǎn)擊“開始監(jiān)聽”。
服務(wù)端定義:
//連接的用戶
System.Collections.Generic.List<User> userList = new List<User>();
//監(jiān)聽端口
private int port = 51888;
//走棋判斷
int[] GameRoom = new int[255]; //房間號(hào)
int[] GameUser = new int[255]; //房間人數(shù);
int[] GameStat = new int[255]; //走棋狀態(tài):1-等待、2-準(zhǔn)備、3-開始、4-旁觀
int[] GameReday = new int[255]; //走棋準(zhǔn)備狀態(tài)
//旁觀 獲得走棋信息
string lookuser = "";
2、打開客戶端 goo.exe
這里直接設(shè)置了進(jìn)入到房間“0”,進(jìn)入后顯示“等待其他人加入”,先進(jìn)房的執(zhí)黑旗,按鈕不可用;
當(dāng)有第2個(gè)人進(jìn)入后,執(zhí)白棋,按鈕顯示“準(zhǔn)備”;
雙方都點(diǎn)擊“準(zhǔn)備”后,進(jìn)入對(duì)局;
后面再有人進(jìn)入為旁觀者,能看見雙方對(duì)局信息。房間都是“0”。
地址:client = new TcpClient("192.168.0.104", 51888); //定義服務(wù)器端ip地址和端口,與服務(wù)器端定義要一致
根據(jù)你的需要進(jìn)行修改;
客戶端定義:
private int[,] Qpan = new int[24, 24]; //棋盤數(shù)組
private string SendLook = null; //發(fā)送給旁觀者的對(duì)局信息
private const int Qz_Null = 0; //沒有棋子
private const int Qz_Black = 1; //黑子
private const int Qz_White = 2; //白子
private const int Max_Qpan = 23; //棋盤最大路數(shù)
private int[,] TmpA_Qpan = new int[24, 24]; //臨時(shí)存儲(chǔ)棋盤
private int[,] TmpB_Qpan = new int[24, 24];//臨時(shí)存儲(chǔ)棋盤
private int[,] Tmp_Qpan = new int[24, 24];//臨時(shí)存儲(chǔ)棋盤
private int Current_Go = 1; //當(dāng)前棋子顏色
private int Qpan_Count = 19; //當(dāng)前棋盤路數(shù)
private int Rame; //氣數(shù)
private int Die_Num; //死子數(shù)
private bool _Attack = false; //是否打劫
private int Attack_X = 0; //打劫位置
private int Attack_Y = 0; //打劫位置
private Panel g_Hei; //鼠標(biāo)移動(dòng) 黑塊
private Panel g_Bai; //鼠標(biāo)移動(dòng) 白塊
private Panel Fit_Hei; //最后落子標(biāo)記 黑
private Panel Fit_Bai; //最后落子標(biāo)記 白
private Panel[,] QzH = new Panel[20,20]; //黑棋子
private Panel[,] QzB = new Panel[20,20]; //白棋子
int LastFitX = 0; //給旁觀最后落子位置
int LastFitY = 0; //給旁觀最后落子位置
int LastHB = 0; //給旁觀最后落子顏色
Point Mouseoff; //鼠標(biāo)位置
bool go_play = false; //能否走棋
int Select_Qzi = 0; //是黑還是白,1-黑,2-白
int ReceiveHB =1; //接收到的棋子顏色
函數(shù):
//初始化棋盤、棋子
private void InitQpan()
//判斷該誰走棋
private void Judge_HB()
//顯示棋子
private void ShowQz(int i, int j, int QzHB)
//重置棋盤棋子
private void Rest_Qpan()
//備份棋盤棋子
private void Qpan_Backup()
//恢復(fù)棋盤棋子
private void Qpan_Restore()
//刷新棋盤棋子
private void Qpan_Refresh(int QzHB)
//計(jì)算棋子的氣數(shù)底層函數(shù)
private void Base_Calc(int i, int j, int QzHB)
//計(jì)算氣數(shù)
private void Calc_Ream(int m, int n, int QzHB)
//計(jì)算氣數(shù)接口
private void Calc_Interface(int QzHB)
//落子處理,判斷打劫、打n還1、吃掉對(duì)方棋子
private void Falling(int xx, int yy)
//設(shè)置打劫
private void Set_Attack(int i, int j)
//最后落子標(biāo)記
private void Fit_Flag(int xx, int yy)
//旁觀者最后落子標(biāo)記
private void LookFit_Flag(int Qhb, int xx, int yy)
//對(duì)方走棋顯示在己方并判斷打劫、打n還1、吃掉對(duì)方棋子
private void Opp_Falling()
3、跨線程調(diào)用封裝在CrossThreadCall.cs
4、時(shí)間有限,程序沒有做計(jì)算勝負(fù),沒有做掉線處理。基本規(guī)則有了,其他的就是套接字變來變?nèi)ィ枰鹿δ茏约禾砑印?/span>
只是一個(gè)初學(xué)練習(xí),更多初學(xué)資料到我的博客http://www.cnblogs.com/qiaoke/
圍棋規(guī)則算法寫代碼太麻煩,直接參考了GreatVerveGo(是單機(jī)的)算法,感謝作者。
程序包含客戶端和服務(wù)端2各部分。圖片文件在\goo\bin\Debug\Res里面
1、先啟動(dòng)服務(wù)端 goServer.exe
服務(wù)端:
地址為IPAddress[] addrIP = Dns.GetHostAddresses("192.168.0.104"); //ip地址
端口51888,
進(jìn)入服務(wù)端后點(diǎn)擊“開始監(jiān)聽”。
服務(wù)端定義:
//連接的用戶
System.Collections.Generic.List<User> userList = new List<User>();
//監(jiān)聽端口
private int port = 51888;
//走棋判斷
int[] GameRoom = new int[255]; //房間號(hào)
int[] GameUser = new int[255]; //房間人數(shù);
int[] GameStat = new int[255]; //走棋狀態(tài):1-等待、2-準(zhǔn)備、3-開始、4-旁觀
int[] GameReday = new int[255]; //走棋準(zhǔn)備狀態(tài)
//旁觀 獲得走棋信息
string lookuser = "";
2、打開客戶端 goo.exe
這里直接設(shè)置了進(jìn)入到房間“0”,進(jìn)入后顯示“等待其他人加入”,先進(jìn)房的執(zhí)黑旗,按鈕不可用;
當(dāng)有第2個(gè)人進(jìn)入后,執(zhí)白棋,按鈕顯示“準(zhǔn)備”;
雙方都點(diǎn)擊“準(zhǔn)備”后,進(jìn)入對(duì)局;
后面再有人進(jìn)入為旁觀者,能看見雙方對(duì)局信息。房間都是“0”。
地址:client = new TcpClient("192.168.0.104", 51888); //定義服務(wù)器端ip地址和端口,與服務(wù)器端定義要一致
根據(jù)你的需要進(jìn)行修改;
客戶端定義:
private int[,] Qpan = new int[24, 24]; //棋盤數(shù)組
private string SendLook = null; //發(fā)送給旁觀者的對(duì)局信息
private const int Qz_Null = 0; //沒有棋子
private const int Qz_Black = 1; //黑子
private const int Qz_White = 2; //白子
private const int Max_Qpan = 23; //棋盤最大路數(shù)
private int[,] TmpA_Qpan = new int[24, 24]; //臨時(shí)存儲(chǔ)棋盤
private int[,] TmpB_Qpan = new int[24, 24];//臨時(shí)存儲(chǔ)棋盤
private int[,] Tmp_Qpan = new int[24, 24];//臨時(shí)存儲(chǔ)棋盤
private int Current_Go = 1; //當(dāng)前棋子顏色
private int Qpan_Count = 19; //當(dāng)前棋盤路數(shù)
private int Rame; //氣數(shù)
private int Die_Num; //死子數(shù)
private bool _Attack = false; //是否打劫
private int Attack_X = 0; //打劫位置
private int Attack_Y = 0; //打劫位置
private Panel g_Hei; //鼠標(biāo)移動(dòng) 黑塊
private Panel g_Bai; //鼠標(biāo)移動(dòng) 白塊
private Panel Fit_Hei; //最后落子標(biāo)記 黑
private Panel Fit_Bai; //最后落子標(biāo)記 白
private Panel[,] QzH = new Panel[20,20]; //黑棋子
private Panel[,] QzB = new Panel[20,20]; //白棋子
int LastFitX = 0; //給旁觀最后落子位置
int LastFitY = 0; //給旁觀最后落子位置
int LastHB = 0; //給旁觀最后落子顏色
Point Mouseoff; //鼠標(biāo)位置
bool go_play = false; //能否走棋
int Select_Qzi = 0; //是黑還是白,1-黑,2-白
int ReceiveHB =1; //接收到的棋子顏色
函數(shù):
//初始化棋盤、棋子
private void InitQpan()
//判斷該誰走棋
private void Judge_HB()
//顯示棋子
private void ShowQz(int i, int j, int QzHB)
//重置棋盤棋子
private void Rest_Qpan()
//備份棋盤棋子
private void Qpan_Backup()
//恢復(fù)棋盤棋子
private void Qpan_Restore()
//刷新棋盤棋子
private void Qpan_Refresh(int QzHB)
//計(jì)算棋子的氣數(shù)底層函數(shù)
private void Base_Calc(int i, int j, int QzHB)
//計(jì)算氣數(shù)
private void Calc_Ream(int m, int n, int QzHB)
//計(jì)算氣數(shù)接口
private void Calc_Interface(int QzHB)
//落子處理,判斷打劫、打n還1、吃掉對(duì)方棋子
private void Falling(int xx, int yy)
//設(shè)置打劫
private void Set_Attack(int i, int j)
//最后落子標(biāo)記
private void Fit_Flag(int xx, int yy)
//旁觀者最后落子標(biāo)記
private void LookFit_Flag(int Qhb, int xx, int yy)
//對(duì)方走棋顯示在己方并判斷打劫、打n還1、吃掉對(duì)方棋子
private void Opp_Falling()
3、跨線程調(diào)用封裝在CrossThreadCall.cs
4、時(shí)間有限,程序沒有做計(jì)算勝負(fù),沒有做掉線處理。基本規(guī)則有了,其他的就是套接字變來變?nèi)ィ枰鹿δ茏约禾砑印?/span>
只是一個(gè)初學(xué)練習(xí),更多初學(xué)資料到我的博客http://www.cnblogs.com/qiaoke/
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Threading;
using?System.Threading.Tasks;
using?System.Windows.Forms;
namespace?goo
{
????public?static?class?CrossThreadCall
????{
????????public?static?void?CrossThreadCalls(this?Control?ctl?ThreadStart?del)
????????{
????????????if?(del?==?null)?return;
????????????if?(ctl.InvokeRequired)
????????????????ctl.Invoke(del?null);
????????????else
????????????????del();
????????}
????}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
????..A..H.?????45056??2017-03-12?12:38??goo\.vs\goo\v14\.suo
?????文件????????161??2017-03-11?20:04??goo\app.config
?????文件??????30208??2017-03-12?11:56??goo\bin\Debug\goo.exe
?????文件????????161??2017-03-11?20:04??goo\bin\Debug\goo.exe.config
?????文件??????46592??2017-03-12?11:56??goo\bin\Debug\goo.pdb
?????文件??????22696??2017-03-12?12:05??goo\bin\Debug\goo.vshost.exe
?????文件????????161??2017-03-11?20:04??goo\bin\Debug\goo.vshost.exe.config
?????文件????????490??2016-07-16?19:44??goo\bin\Debug\goo.vshost.exe.manifest
?????文件???????3330??2017-03-08?20:25??goo\bin\Debug\Res\bai.png
?????文件????????235??2017-03-12?11:14??goo\bin\Debug\Res\close.png
?????文件??????18643??2017-03-10?10:46??goo\bin\Debug\Res\fit_bai.png
?????文件??????18815??2017-03-10?10:44??goo\bin\Debug\Res\fit_hei.png
?????文件????????136??2017-03-08?22:01??goo\bin\Debug\Res\g-bai.png
?????文件????????126??2017-03-08?22:02??goo\bin\Debug\Res\g-hei.png
?????文件???????3181??2017-03-08?20:21??goo\bin\Debug\Res\hei.png
?????文件??????20814??2017-03-02?19:34??goo\bin\Debug\Res\logo.png
?????文件?????178372??2017-03-08?19:28??goo\bin\Debug\Res\pan.png
?????文件????????515??2017-03-11?21:35??goo\CrossThreadCall.cs
?????文件??????33025??2017-03-12?11:56??goo\Form1.cs
?????文件???????6767??2017-03-12?11:27??goo\Form1.Designer.cs
?????文件??????15353??2017-03-12?11:27??goo\Form1.resx
?????文件???????3945??2017-03-11?21:36??goo\goo.csproj
?????文件????????972??2017-03-08?20:55??goo\goo.sln
?????文件???????1748??2017-03-11?18:42??goo\obj\Debug\DesignTimeResolveAssemblyReferences.cache
?????文件???????6904??2017-03-11?21:33??goo\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????文件????????738??2017-03-12?12:05??goo\obj\Debug\goo.csproj.FileListAbsolute.txt
?????文件???????1012??2017-03-12?11:56??goo\obj\Debug\goo.csproj.GenerateResource.Cache
?????文件???????2210??2017-03-12?11:56??goo\obj\Debug\goo.csprojResolveAssemblyReference.cache
?????文件??????30208??2017-03-12?11:56??goo\obj\Debug\goo.exe
?????文件???????6656??2017-03-12?11:56??goo\obj\Debug\goo.Form1.resources
............此處省略83個(gè)文件信息
評(píng)論
共有 條評(píng)論