基于C#简单的游戏客户端编程(VS)
嘿!我是目录
- 前言
- 一、创建项目
- 二、界面设计
- 三、代码
- 3.1 连接服务器并接收数据
- 3.2 客户端发送数据到服务器
- 3.3 播放背景音乐
- 3.4 定时自动更换游戏背景图片
- 四、实验结果
- 小小的总结
- 参考文献
前言
编写一个网游客户端,游戏服务器的校园内网IP地址为 10.1.230.74,端口为3900,采用TCP连接。
1)连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;
2) 客户端要发给服务器的数据,通过 textbox输入 或者点击button;
3) 能够播放背景音乐;
4) 每隔30秒,变换一次游戏背景图片。
这里的IP地址要在连接笔主本校的WiFi网络的情况下,才能连接成功。
一、创建项目
- 笔主这里因为电脑存储空间限制,用的是VS2017版本,其他版本可能略有不同,但内容是一致的。
二、界面设计
- 一个listBox,几个button,几个textBox,和一个pictureBox
三、代码
3.1 连接服务器并接收数据
- 双击 进入游戏 的button
private void button1_Click(object sender, EventArgs e){try{//向指定的IP地址的服务器发出连接请求tcpClient.Connect("10.1.230.74", 3900);listBox1.Items.Add("连接成功!");stream = tcpClient.GetStream();byte[] data = new byte[1024];//判断网络流是否可读 if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg1 = msg.Split(str1);for (int j = 0; j < msg1.Length; j++){listBox1.Items.Add(msg1[j]);music_play();}}}catch{listBox1.Items.Add("连接失败!");}}
3.2 客户端发送数据到服务器
- 双击 确定 的button
private void button12_Click(object sender, EventArgs e){music_play();if (tcpClient.Connected){//向服务器发送数据string msg = textBox1.Text;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg + "\n");stream.Write(outbytes, 0, outbytes.Length);byte[] data = new byte[1024];//接收服务器回复数据if (stream.CanRead){int len = stream.Read(data, 0, data.Length);string msg1 = Encoding.Default.GetString(data, 0, data.Length);string str = "\r\n";char[] str1 = str.ToCharArray();string[] msg2 = msg1.Split(str1);for (int j = 0; j < msg2.Length; j++){listBox1.Items.Add(msg2[j]);}}}else{listBox1.Items.Add("连接已断开");}textBox1.Clear();}
3.3 播放背景音乐
- 双击打开
- 选择一个.wav音频文件
注意文件类型是.wav,这里不能简单改后缀名,要用格式转换工具进行转换。
一个可以下载.wav格式音频的网站:下载wav音频
- 在代码中添加播放函数
private void music_play(){SoundPlayer sp = new SoundPlayer();sp.SoundLocation = @"D:\VSdaima\playgame\playgame\费玉清 - 夏之旅.wav"; //你的音乐文件名称,且注意必须是wav文件sp.PlayLooping();}
3.4 定时自动更换游戏背景图片
- 回到Form1.cs[设计]的窗口
- 在工具箱中找到Timer控件,将它拖动到窗口空白区域
- 点击timer1,找到设置中的Interval,设置为1000,将Enable设为true
- 准备好背景图片,在这里使用的是jpg图片,将图片分别命名为从1开始的数字
- 双击timer,添加代码:
private void timer1_Tick(object sender, EventArgs e){Thread th = new Thread(pic_play);th.IsBackground = true;th.Start();}
- 添加图片切换函数
在添加前要先设置路径(存放前面图片的路径):
- SizeMode选择StrechImage,会把PictureBox图片框铺满,自适应图片框的大小
- 代码
void pic_play(){picture++; //记得在前面定义变量picturestring picturePath = @"D:\VSdaima\playgame\playgame\tu\" + picture + ".jpeg";//设置图片填充pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;pictureBox1.Image = Image.FromFile(picturePath);if (picture == 5)picture = 0;}
四、实验结果
- 最终实验结果:
小小的总结
C#做可视化界面很方便,新手小白都可以直接上手了,只需要拖动控件,双击控件就可以编写对应的函数。
搭建网络连接也很方便,不过此次的IP只能在笔主本校的WiFi网络情况下才能ping成功,其他网络不行!!!笔主踩进的坑。。。
在连接一个网络IP的时候,可以先在 win+R->cmd里,先ping试一下。
参考文献
- telnet不是内部或外部命令
- 【C#】VS编写简单的网游客户端
基于C#简单的游戏客户端编程(VS)相关推荐
- 【C#】游戏客户端编程
目录 一.NetworkStream网络流介绍 二.连接服务器 三.客户端向服务器发送数据 四.实现背景音乐的播放功能 五.实现游戏背景变换 六.总结 七.参考 一.NetworkStream网络流介 ...
- java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端
//郑州轻工业大学 //题号:实验四 第二题 //题目:使用基于UDP的网络编程方法,完成客户端和服务器间的聊天功能.要求图形界面. java网络编程作业 基于UDP简单聊天窗口,图形化界面,包含客户 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(一)
TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于 ...
- pygame网络游戏_5_5:网络编程_游戏客户端【终章!】
项目源码地址:https://github.com/zxf20180725/pygame-jxzj,求赞求星星~ 1.本章效果 2.回顾 哎呀呀,好久没更新了,这几天一直在搞我的pygame新项目仙剑 ...
- 【游戏开发】基于MMORPG的游戏客户端逻辑效率开发思路
思考:如何提升游戏逻辑开发效率 提升游戏逻辑开发效率的关键在于:游戏新增或修改功能时,需要尽可能减少程序需要重复开发的代码量. 下面主要考虑以下三种减少编码工作量的方法: <1>.尽可能将 ...
- Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏
Py:递归求解汉诺塔,简单的几行编程可以搞定很高层的三柱汉诺塔游戏 目录 输出结果 核心代码 输出结果 核心代码 def hanoi(n,x,y,z):if n==1:print(x,'--→',z) ...
- kafka java编程demo_Kafka简单客户端编程实例
今天,我们给大家带来一篇如何利用Kafka的API进行客户端编程的文章,这篇文章很简单,就是利用Kafka的API创建一个生产者和消费者,生产者不断向Kafka写入消息,消费者则不断消费Kafka的消 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- 游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇
二 游戏编程起步 1.一个简单的游戏-贪吃蛇 1.贪吃蛇游戏剖析 1)游戏的目标.在不被撞死的前提下,吃掉奖子增加自己的长度,来完成升级. 2)游戏中的物体.蛇,墙壁,奖子. 3)动作.蛇移动,蛇吃奖 ...
最新文章
- 不借助第三方 Windows 7搞定无法删除文件
- PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)
- @ConfigurationProperties 注解
- java源码 1.8_Java源码下载和阅读(JDK1.8/Java 11)
- variable `xxx' has initializer but incomplete type
- 创业公司如何做数据分析(四)ELK日志系统
- SAP Commerce web service 的扩展
- 呆在实验室到深夜的小随笔
- Android - Glide4.4.0使用
- Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
- php运行的四个黄金组合,PHP168与Phpwind强势整合 打造黄金组合
- 系统学习深度学习(二) --自编码器,DA算法,SDA,稀疏自编码器
- 【SpringBoot】整合jdbc
- android模拟器检测常用方法,Android模拟器检测方案优化
- 常用服务和开放端口对照表
- 如何让 PPT 中的多张图大小一致?
- 历年至今TVB剧集目录(持续更新...我已看过的推荐)
- 汇编语言更象是野球拳,哈哈……
- VBA中Sheets(String)和Sheets(Long)的速度
- 手持PDA和手机有什么区别?