⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game2dclient.cs

📁 c#网络编程及应用-刘瑞新
💻 CS
📖 第 1 页 / 共 2 页
字号:
		static void Main() 
		{
			Application.Run(new Game2DClient());
		}

		//开始新局,所有数据复位并重画网格
		private void reset()
		{
			this.labelChengJi1.Text="";
			this.labelChengJi2.Text="";
			for( int i = 0; i < 15; i++ )
			{
				for( int j=0; j<15; j++)
				{
					unsetDot((i+1)*20,(j+1)*20);
				}
			}
		}

		private void connectServer()
		{
			this.buttonStrat.Enabled=true;
			IPAddress serverIP=IPAddress.Parse("127.0.0.1");
			client=new TcpClient();
			client.ReceiveBufferSize=512;
			client.SendBufferSize=512;
			client.NoDelay=true;
			try
			{
				client.Connect(serverIP,6688);
			}
			catch
			{
				this.statusBarPanel1.Text="与服务器连接失败(可能服务器未开机或网络故障)"
					+",请退出本程序,等服务器开通后再玩。";
				this.buttonStrat.Enabled=false;
				this.buttonTalk.Enabled=false;
				return ;
			}
			this.statusBarPanel1.Text="与服务器连接成功。";
			//尚未登录
			IsLogin=false;
			myName="Name-"+Dns.GetHostName().ToString();
			SendMessage(myName);
			threadReceive=new Thread(new ThreadStart(receiveMessage));
			threadReceive.Start();
			return;
		}
		private void buttonExit_Click(object sender, System.EventArgs e)
		{
			GameExit();
			Application.Exit();
		}
		private void GameExit()
		{
			IsExit=true;
			try
			{
				sr.Close();           //关闭StreamReader
				sw.Close();           //关闭StreamWriter
				netStream.Close();    //关闭网络传输流
				threadReceive.Abort();
				client.Close();       //关闭与服务器的连接
			}
			catch(Exception err)
			{
				this.statusBarPanel1.Text="error close stream:"+err.Message;
			}
		}

		private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			int x=(e.X/20)*20;
			int y=(e.Y/20)*20;
			int color;
			if(start==true)
			{
				if(!(x/20<1 || x/20>15 || y/20<1 ||y/20>15))
				{
					if(Game2DGrid[x/20-1,y/20-1]==NONE)
					{
						return;
					}
					if(Game2DGrid[x/20-1,y/20-1]==BLACK)
					{
						color=BLACK;
					}
					else
					{
						color=WHITE;
					}
					SendMessage(string.Format("Undot{0,2}{1,2}{2,1}",x/20-1,y/20-1,color));
				}
			}
		}

		private void buttonStart_Click(object sender, System.EventArgs e)
		{
			start=true;
			SendMessage("Start");
			this.buttonStrat.Enabled=false;
		}

		private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
		{
			if(this.radioButton1.Checked)
			{
				SendMessage("Time-1"); 
			}
		}

		private void radioButton2_CheckedChanged(object sender, System.EventArgs e)
		{
			if(this.radioButton2.Checked)
			{
				SendMessage("Time-2");
			}
		
		}

		private void radioButton3_CheckedChanged(object sender, System.EventArgs e)
		{
			if(this.radioButton3.Checked)
			{
				SendMessage("Time-3");
			}

		}

		private void radioButton4_CheckedChanged(object sender, System.EventArgs e)
		{
			if(this.radioButton4.Checked)
			{
				SendMessage("Time-4");
			}

		}

		private void radioButton5_CheckedChanged(object sender, System.EventArgs e)
		{
			if(this.radioButton5.Checked)
			{
				SendMessage("Time-5");
			}

		}

		//重画棋盘所有点。防止用户最小化窗体时引起点消失
		private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			Graphics g=e.Graphics;
			for(int i = 0; i < 15; i++)
				for(int j= 0; j < 15; j++)
					if(Game2DGrid[i,j]!=NONE) imageList1.Draw(g,(i+1)*20,(j+1)*20,20,20,Game2DGrid[i,j]);
		}
		private void setDot(int i,int j,int DotColor)
		{
			Graphics tu=this.pictureBox1.CreateGraphics();
			Game2DGrid[i,j]=DotColor;
			imageList1.Draw(tu,(i+1)*20,(j+1)*20,20,20,DotColor);
		}

		private void unsetDot(int x,int y)
		{
			Game2DGrid[x/20-1,y/20-1]=NONE;
			Rectangle rc=new Rectangle(new Point(x,y),new Size(20,20));
			//使指定区域无效,以便下次更新时重画该区域
			pictureBox1.Invalidate(rc);
		}

		private void SetLevel(char ss)
		{
			switch(ss)
			{
				case '1':
					this.radioButton1.Checked=true;
					break;
				case '2':
					this.radioButton2.Checked=true;
					break;
				case '3':
					this.radioButton3.Checked=true;
					break;
				case '4':
					this.radioButton4.Checked=true;
					break;
				case '5':
					this.radioButton5.Checked=true;
					break;
			}
		}
	    
		private void receiveMessage()
		{
			IsExit=false;
			while(IsExit==false)
			{
				string str="";
				try
				{
					netStream=client.GetStream();
					sr=new StreamReader(netStream,System.Text.Encoding.Unicode);
					str=sr.ReadLine();
					this.statusBarPanel1.Text=str;
				}
				catch
				{
					this.statusBarPanel1.Text="error reading data";
					break;
				}
				if(str.Length<5)
				{
					this.statusBarPanel1.Text="error:"+str;
					continue;
				}
				switch(str.Substring(0,5))
				{
					case "Undot":
					{
						int x=20*(Int32.Parse(str.Substring(5,2))+1);
						int y=20*(Int32.Parse(str.Substring(7,2))+1);
						this.labelChengJi2.Text=str.Substring(9,4);
						this.labelChengJi1.Text=str.Substring(13,4);
						unsetDot(x,y);
						break;
					}
					case "Set--":
					{
						setDot(Int32.Parse(str.Substring(5,2)),
							Int32.Parse(str.Substring(7,2)),
							Int32.Parse(str.Substring(9,1)));
						break;
					}
					case "Time-":
					{
						SetLevel(str[5]);
						break;
					}
					case "Name-":
					{
						SetLevel(str[6]);
						if(str[5]=='1')
						{
							if(IsLogin==false)
							{
								ShowMessage(str.Substring(7)+"进入。\n");
								IsLogin=true;
							}
							this.label7.Text="对方(无)";
							this.label8.Text=str.Substring(7,6);
						}
						else
						{
							if(IsLogin==false)
							{
								this.listBox1.Items.Add(str.Substring(str.IndexOf("||")+2)+"进入。\n");
								IsLogin=true;
							}
							ShowMessage(str.Substring(7,str.IndexOf("||")-7)+"进入。\n");
							this.label7.Text=str.Substring(7,6);
							this.label8.Text=str.Substring(str.IndexOf("||")+2,6);
						}
						break;
					}
					case "Only1":
					{
						ShowMessage("对方退出,请重新开始或等其他人进入。\n");
						this.label7.Text="对方(无)";
						Restart("敌人逃跑了,我方胜利了!");
						break;
					}
					case "Win--":
					{
						if(str[5]=='1')
						{
							ShowMessage("你输了。本局得分:"+str.Substring(6)+"\n");
							Restart("\n"+"你输了。本局得分:"+str.Substring(6)+"\n");
						}
						else
						{
							string ww="";
							if(Int32.Parse(str.Substring(6,1))==BLACK) ww="黑方";
							else ww="白方";
							ww+="负!!!  黑方得分:"+str.Substring(7,4)
								+"   白方得分:"+str.Substring(11)+"   \n";
							ShowMessage(ww);
							Restart("\n"+ww);
						}
						break;
					}
					case "Sorry":
					{
						MessageBox.Show("连接成功,不幸的是服务器说不让玩。请退出等会再进入试试。","遗憾");
						this.buttonStrat.Enabled=false;
						this.buttonTalk.Enabled=false;
						IsExit=true;
						break;
					}
					default:
					{
						if(str.Substring(0,5)=="@@@@@")
						{
							ShowMessage(str.Substring(5));
						}
						break;
					}
				}
			}
		}

		private void ShowMessage(string showstr)
		{
			this.listBox1.Items.Add(showstr);
			this.listBox1.SelectedIndex=this.listBox1.Items.Count-1;
			this.listBox1.ClearSelected();
		}
		private void Restart(string showstr)
		{
			start=false;
			MessageBox.Show(showstr);
			reset();
			this.buttonStrat.Enabled=true;
		}

		private void SendMessage(string str)
		{
			try
			{
				netStream=client.GetStream();
				sw=new StreamWriter(netStream,System.Text.Encoding.Unicode);
				sw.WriteLine(str);
				sw.Flush();
			}
			catch
			{
				this.statusBarPanel1.Text="error sending message.";
			}
		}

		private void Game2DClient_Closing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			GameExit();
		}

		private void buttonHelp_Click(object sender, System.EventArgs e)
		{
			string str="\n    本游戏最多只准俩人玩,也可以独自一人玩。游戏玩法:用鼠标点击你所在\n\n"+
				"方颜色的点,每消失一个,得一分。当任何一方在同行或同列出现两个相邻的点\n\n"+
				"时,游戏就结束了,此时得分多的为胜方。注意:若你点击了对方的点,则对方\n\n"+
				"得分。\n";
			MessageBox.Show(str,"帮助信息");

		}

		private void buttonTalk_Click(object sender, System.EventArgs e)
		{
			//@@@@@表示对话
			SendMessage("@@@@@"+this.textBox1.Text);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -