一、创建项目前试试控制台窗口进入游戏
1.创建前准备,打开cmd输入ping 10.1.230.74,ping通如下
2.输入telnet
如果输入telnet没有成功,可查看链接:win7 telnet不是内部命令或外部命令,也不是可运行的程序
3.再输入open 10.1.230.74 3900,可进入控制台窗口的游戏界面
4…打开vs,创建一个windows窗口项目
二、设计窗口
1.先上效果图,比较直观
2.用到的控件,从左上工具箱打开拖动到form窗口中,工具箱可以用ctrl+alt+x快捷方式打开
3.需要设置的控件,双击控件可获得控件函数,可直接在函数操作
①textbox1,enabled属性改成ture
②timer1,enabled属性改成ture,interval属性改为1000(1000ms就是1s,也可自行修改时间,这时间是图片轮播时间)
三、代码实现
1.定义变量,放在public Form1()前面
private NetworkStream stream;
private TcpClient tcpClient = new TcpClient();
private int flag = 0;
SoundPlayer player = new SoundPlayer("C:/Users/ASUS-JH/Music/许嵩-玫瑰花的葬礼.wav");
//定义发送数据的套接字
Socket socket_send;
2.receiver_stream函数,功能是接收网络流并显示在listbox里显示
/*
* 将字节流用GBK格式编码在listbox里显示
*/
void receive_stream()
{
byte[] receive_data = new byte[1024];
//定义编码格式
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//为使用GB2312做准备
System.Text.Encoding GBK = System.Text.Encoding.GetEncoding("GBK");
if (stream.CanRead)
{
int len = stream.Read(receive_data, 0, receive_data.Length);
string msg = GBK.GetString(receive_data, 0, receive_data.Length);
string str = "\r\n";
char[] str1 = str.ToCharArray();
//乱码集合
string[] messy_code = { "??[2J ", "[5m", "[44m", "[37;0m", "[1;33m", "[1;32m", "[1;31m" };
string[] msg1 = msg.Split(str1);//以换行符为分隔符
for (int j = 0; j < msg1.Length; j++)//逐行显示
{
//过滤乱码
msg1[j] = msg1[j].Replace(messy_code[0], " ");
msg1[j] = msg1[j].Replace(messy_code[1], " ");
msg1[j] = msg1[j].Replace(messy_code[2], " ");
msg1[j] = msg1[j].Replace(messy_code[3], " ");
msg1[j] = msg1[j].Replace(messy_code[4], " ");
msg1[j] = msg1[j].Replace(messy_code[5], " ");
msg1[j] = msg1[j].Replace(messy_code[6], " ");
listBox1.Items.Add(msg1[j]);
}
}
}
3.send_stream函数,发送网络流的函数
void send_stream(string str)
{
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//为使用GB2312做准备
System.Text.Encoding GBK = System.Text.Encoding.GetEncoding("GBK");
byte[] buffer = GBK.GetBytes(str+"\n");
stream.Write(buffer, 0, buffer.Length);
}
4.连接客户端(开始游戏button的代码)
private void start_game_Click(object sender, EventArgs e)
{
tcpClient = new TcpClient();
//套接字建立连接
socket_send = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint point = new IPEndPoint(IPAddress.Parse("10.1.230.74"), 3900);
socket_send.Connect(point);
try
{
//向指定的IP地址的服务器发送连接请求
tcpClient.Connect("10.1.230.74", 3900);
listBox1.Items.Add("连接成功");
stream = tcpClient.GetStream();
receive_stream();//接收字节流并显示在屏幕上
}
catch
{
listBox1.Items.Add("服务器未启动");
}
}
5.退出游戏控件button的代码
private void end_game_Click(object sender, EventArgs e)
{
if (stream != null)//关闭连接,关闭流
{
stream.Close();
tcpClient.Close();
socket_send.Close();
}
listBox1.Items.Add("已经退出游戏");
}
6.音乐播放和暂停button的代码
private void button4_Click(object sender, EventArgs e)
{
player.Load();
player.Play();
}
private void button5_Click(object sender, EventArgs e)
{
player.Stop();
}
7.图片轮播代码
private void timer1_Tick(object sender, EventArgs e)
{
flag++;
string picturePath = @"C:\\Users\ASUS-JH\Pictures\Saved Pictures\123456\" + flag + ".jpeg";
pictureBox1.Image = Image.FromFile(picturePath);
if (flag == 4)
{
flag = 0;
}
}
图片文件,图片需要改名为1,2,3,4
四、结果
五、总结
这一次完成了windows界面的一个简单设计和连接游戏,更加熟悉了C#语言和窗口设计
六、参考链接
七、完整代码和结果视屏(播放的音乐也有)
项目和结果视屏:https://github.com/Xuhongyu20/game
音乐链接:https://pan.baidu.com/s/1c5M7pOLka2OLhs5ihGnVqw
提取码:dfop