📄 game2dclient.cs
字号:
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 + -