C#網(wǎng)絡(luò)五子棋源碼范例
《C#網(wǎng)絡(luò)五子棋源碼范例》由會員分享,可在線閱讀,更多相關(guān)《C#網(wǎng)絡(luò)五子棋源碼范例(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、文檔供參考,可復(fù)制、編制,期待您的好評與關(guān)注! using System; using System.Windows.Forms; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.IO; using System.Net.Sockets; using System.Threading; using System.Diagnostics; usin
2、g System.Net; using Microsoft.Win32; namespace WuZiQi { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public Button[,] buttons;//棋盤數(shù)組 public bool gamer1 = false, gamer2 = false,netcanplay=false ;//
3、 兩個玩家是否允下棋,連網(wǎng)狀態(tài)時是否允許下棋 public bool[] gamer1click = new bool [225];//玩家一所下的棋 public bool[] gamer2click = new bool[225];//玩家二所下的棋 public static int port = 3332;//連接端口 public string myipadd = "";//本機IP public Thread li = null;//創(chuàng)建監(jiān)聽進程 public Thread
4、se = null;//創(chuàng)建發(fā)送上線信息進程 public Thread sen = null;//創(chuàng)建發(fā)送信息進程 public string sendmessage = "";//要發(fā)送的信息 public bool canplay = false;//是否可以開始游戲 private void Form1_Load(object sender, EventArgs e) { cshqp(); } //初始化棋盤 ///
5、 /// 初始化棋盤 /// /// 初始化是否成功 public bool cshqp() { groupBox1.Controls.Clear(); buttons = new Button[15,15]; int i = 0; for (int x = 0; x /// 下棋 /// /// 要下棋子的索引 ///
6、 public bool xiaqi(int index) { //MessageBox.Show(index.ToString()); foreach (Button b in buttons) { if (b.TabIndex == index ) { bool check = false; if (gamer1click[b.Ta
7、bIndex] == true) { check = true; } if (gamer2click[b.TabIndex] == true) { check = true; } if (check != true)
8、 { if (gamer1 == true) { gamer1click[b.TabIndex] = true; b.Image = global::WuZiQi.Properties.Resources.black; canxiaqi("gamer2");
9、 if (netpk.Checked == false || Asservice.Checked == true) { if (checkwin("gamer1")) { label11.Text = "贏家:玩家一" + player1.Text; Messa
10、geBox.Show("恭喜玩家一:" + player1.Text + ",你贏了!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); canxiaqi(""); send("win恭喜玩家一:" + player1.Text + ",你贏了!"); }
11、 } } else if (gamer2 == true) { gamer2click[b.TabIndex] = true; b.Image = global::WuZiQi.Properties.Resources.write; canxiaqi("gamer1");
12、 if (netpk.Checked == false || Asservice.Checked == true) { if (checkwin("gamer2")) { label11.Text = "贏家:玩家二" + player2.Text;
13、 MessageBox.Show("恭喜玩家二:" + player2.Text + ",你贏了!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); canxiaqi(""); send("win恭喜玩家二:" + player2.Text + ",你贏了!");
14、 } } } } else { check = false; MessageBox.Show("這個位置上不能下棋!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning);
15、 //MessageBox.Show(b.TabIndex.ToString()); } return true; } } return false; } //開始游戲 private void start_Click(object sender, EventArgs e) { //if (player1.Tex
16、t == "" || player2.Text == "") //{ // MessageBox.Show("請輸入你的名字!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); //} //else //{ if (canplay == true || netpk.Checked == false) {
17、 if (radioButton1.Checked == true) { canxiaqi("gamer1"); } else { canxiaqi("gamer2"); } groupBox2.Enabled = false;
18、 start.Enabled = false; } else { MessageBox.Show("還沒有建立連接或?qū)Ψ竭€沒有準備好!不能開始游戲!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } //} } //改變下棋狀態(tài)
19、/// /// 改變下棋狀態(tài) /// /// 可以下棋的人的名字 public void canxiaqi(string s) { if (s=="gamer1") { int sum = 0; for (int i = 0; i /// 判斷輸贏 /// /// 要判斷的玩家的名字 /// 是否贏
20、 public bool checkwin(string s) { if (s == "gamer1") { for (int i = 0; i } } //做為主機 private void Asservice_CheckedChanged_1(object sender, EventArgs e) { if (Asservice.Checked == tr
21、ue) { waitconnect.Enabled = true; Asclinet.Checked = false; Asclinet.Enabled = false; } else { waitconnect.Enabled = false; groupBox3.Enabled = true;
22、 Asservice.Enabled = true; Asclinet.Enabled = true; } } //做為客戶機 private void Asclinet_CheckedChanged(object sender, EventArgs e) { if (Asclinet.Checked == true) { connect.Enabled = true;
23、 label12.Enabled = true; ip.Enabled = true; Asservice.Checked = false; Asservice.Enabled=false ; } else { connect.Enabled = false ; label12.Enabled = false;
24、 ip.Enabled = false; groupBox3.Enabled = true; Asservice.Enabled = true; Asclinet.Enabled = true; } } //等待客戶機連接 private void waitconnect_Click(object sender, EventArgs e) { IP
25、HostEntry MyEntry = Dns.GetHostByName(Dns.GetHostName()); IPAddress MyAddress = new IPAddress(MyEntry.AddressList[0].Address); myipadd = MyAddress.ToString(); ThreadStart s=new ThreadStart (Listen ); li = new Thread(s); li.Start();
26、 statue.Text = "正在等待客戶機連接!現(xiàn)在還不能開始游戲!"; waitconnect.Enabled = false; } //連接 private void connect_Click(object sender, EventArgs e) { if (ip.Text != "") { IPHostEntry MyEntry = Dns.GetHostByName(Dns.Ge
27、tHostName()); IPAddress MyAddress = new IPAddress(MyEntry.AddressList[0].Address); myipadd = MyAddress.ToString(); ThreadStart s = new ThreadStart(co); se = new Thread(s); se.Start(); statue.Text =
28、"正在連接主機!現(xiàn)在還不能開始游戲!"; ThreadStart sx = new ThreadStart(Listen); li = new Thread(sx); li.Start(); connect.Enabled = false; } else { MessageBox.Show("請輸入一個正確的IP地址!", "會飛的魚提醒", Mes
29、sageBoxButtons.OK, MessageBoxIcon.Warning); } } //監(jiān)聽命令信息 /// /// 監(jiān)聽命令信息 /// public void Listen() { try { TcpListener li = new TcpListener(port); li.Start();
30、 while (true) { TcpClient cl = li.AcceptTcpClient(); NetworkStream ns = cl.GetStream(); byte[] mbyte = new byte[1024]; int BytesRead = ns.Read(mbyte, 0, mbyte.Length);
31、 string command = System.Text.Encoding.Default.GetString(mbyte, 0, BytesRead).Trim(); execcommand(command); cl.Close(); ns.Close(); Thread.Sleep(500); } } catch
32、 { //MessageBox.Show("建立連接出錯!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } //解釋命令 /// /// 解釋命令 /// /// 要解釋的命令 public void execcommand(string command) { label13.Text
33、= command; //MessageBox.Show(command); if (command != "") { if (command.Substring(0, 7) == "connect") { statue.Text = "已經(jīng)建立連接!你可以開始游戲了!"; ip.Text = command.Substring(8, command.Length -
34、 8); ready.Enabled = true; send("connect:" + myipadd); } else if (command.Substring(0, 5) == "start") { int p =Convert .ToInt32 (command.Substring(6, 1));
35、 //player1 .Text =command if (p == 1) { netcanplay = true ; radioButton1.Checked = true; canxiaqi("gamer1"); groupBox2.Enabled = false;
36、 } else { netcanplay = true; radioButton2.Checked = true; canxiaqi("gamer2"); groupBox2.Enabled = false; }
37、 if (radioButton1.Checked == true) { MessageBox.Show("先手:玩家一!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox
38、.Show("先手:玩家二!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); } canplay = true; //ready.Enabled = false; statue.Text = "對方已經(jīng)準備好,你可以開始游戲了!"; } else if (command.Substri
39、ng(0, 5) == "xiaqi") { int x = Convert.ToInt32(command.Substring(5, 1)); if (x==1) { canxiaqi("gamer1"); } else {
40、 canxiaqi("gamer2"); } //MessageBox.Show(command.Substring(6, command.Length - 6)); xiaqi(Convert.ToInt32(command.Substring(7, command.Length - 7))); netcanplay = true; } else
41、if (command.Substring(0, 3) == "win") { canxiaqi(""); netcanplay = false; MessageBox.Show(command.Substring(3, command.Length - 3), "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Information); }
42、 } } //發(fā)送上線信息 /// /// 向主機發(fā)送上線信息 /// public void co() { while (true) { send("connect:"+myipadd ); Thread.Sleep(3000); } } //發(fā)送信息 ///
43、 /// 發(fā)送信息 /// public void sendt() { try { //根據(jù)目標計算機地址建立連接 TcpClient MyTcpClient = new TcpClient(ip.Text, port); //獲得用于網(wǎng)絡(luò)訪問的數(shù)據(jù)流 NetworkStream MyTcpStream = MyTcpClient.G
44、etStream(); StreamWriter MyStream = new StreamWriter(MyTcpStream, System.Text.Encoding.GetEncoding("GB2312")); //將字符串寫入流 MyStream.Write(sendmessage ); //將緩沖數(shù)據(jù)寫入基礎(chǔ)流 MyStream.Flush(); //關(guān)閉網(wǎng)絡(luò)流
45、 MyStream.Close(); MyTcpClient.Close(); label14.Text = sendmessage; } catch { //MessageBox.Show("建立連接出錯!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } //發(fā)
46、送信息線程 /// /// 發(fā)送信息線程 /// /// 要發(fā)送的信息 public void send(string mes) { sendmessage = mes; sendt(); //ThreadStart ss = new ThreadStart(sendt); //sen = new Thread(ss); //sen.Start();
47、 //MessageBox.Show("started"); } //時鐘定時改變連接狀態(tài) private void timer1_Tick(object sender, EventArgs e) { statue.Text = "連接錯誤或?qū)Ψ郊合戮€!"; } //準備 private void ready_Click(object sender, EventArgs e) {
48、if (radioButton1.Checked == true) { send("start:1:"+player1 .Text ); } else { send("start:2:" + player2.Text); } } //退出程序 private void Form1_FormClosing(object
49、sender, EventArgs e) { try { se.Abort(); li.Abort(); sen.Abort(); } catch { //MessageBox.Show("退出程序時出錯!", "會飛的魚提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } } 10 / 10
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結(jié)
- 2024年小學高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學期小學語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告