C#编写网游客户端连接游戏服务器
文章目錄
- 一、編寫內(nèi)容
- 二、準(zhǔn)備工作
- 1. 創(chuàng)建項(xiàng)目
- 2. 界面設(shè)計(jì)
- 3. 連接服務(wù)器
- 4. 發(fā)送數(shù)據(jù)
- 5. 播放背景音樂
- 6. 變化背景圖片
- 7. 效果演示
- 三、完整代碼
- 四、參考
編譯軟件:Visual Studio 2019
編譯環(huán)境:Windows 10
使用語言:C#
一、編寫內(nèi)容
本文章編寫一個(gè)網(wǎng)游客戶端,游戲服務(wù)器的校園內(nèi)網(wǎng)IP地址為 10.160.230.74,端口為3900,采用TCP連接,主要功能有四個(gè),如下:
①連接成功后,可以將服務(wù)器發(fā)來的消息不停地顯示在 textbox 中;
②客戶端要發(fā)給服務(wù)器的數(shù)據(jù),通過 textbox 輸入或者點(diǎn)擊 button ;
③能夠播放背景音樂;
④每隔30秒,變換一次游戲背景圖片。
本文章涉及到了各個(gè)控件的基本使用、TCP的連接、客戶端與服務(wù)器端的數(shù)據(jù)傳輸?shù)鹊取?/p>
二、準(zhǔn)備工作
1. 創(chuàng)建項(xiàng)目
- 新建窗體應(yīng)用,下一步,填寫項(xiàng)目名和路徑即可創(chuàng)建
- 添加WindowsMediaPlayer 控件后續(xù)播放背景音樂需要使用到,點(diǎn)擊工具,選擇工具箱項(xiàng),即是下圖界面。
- 選擇 “ COM 組件 ” ,勾選上 “ Windows Media Player ” ,再點(diǎn)擊 “ 確定 ” 。
2. 界面設(shè)計(jì)
- textbox —— 2個(gè)(輸入框、顯示框)
- button —— 5個(gè)(發(fā)送、進(jìn)入游戲、退出游戲、播放、停止)
- picturebox —— 1個(gè)(圖片顯示)
- trackbar —— 1個(gè)(音量調(diào)節(jié))
- label —— 1個(gè)(音量顯示)
- groupbox —— 2個(gè)(控件容器)
- WindowsMediaPlayer —— 1個(gè)(媒體播放器)
- timer —— 1個(gè)(圖片變化)
axWindowsMediaPlayer
3. 連接服務(wù)器
實(shí)現(xiàn)功能:點(diǎn)擊連接游戲按鈕后,能連接服務(wù)器,若連接成功,則將服務(wù)器發(fā)來的消息不停地顯示在 textbox 中;若連接失敗,則在 textbox 中顯示 “ 服務(wù)器未啟動(dòng) ” 。
- 雙擊 “ 連接游戲 ” 按鈕,轉(zhuǎn)到代碼編輯區(qū)。
在 button2_Click 函數(shù)體內(nèi),編寫連接的代碼,
代碼:
4. 發(fā)送數(shù)據(jù)
實(shí)現(xiàn)功能:客戶端要發(fā)給服務(wù)器的數(shù)據(jù),通過 textbox 輸入,然后點(diǎn)擊 button 發(fā)送出去,并將服務(wù)器端返回結(jié)果顯示在 textbox 中。
- 雙擊 “ 發(fā)送 ” 按鈕,轉(zhuǎn)到編輯代碼的文件中,在 button1_Click 函數(shù)中編寫以下的代碼。
5. 播放背景音樂
實(shí)現(xiàn)功能:當(dāng)進(jìn)入游戲后,開始播放背景音樂,并能調(diào)節(jié)音量大小。
private string s = @"I:\IOT\CsProject\GameClient\data\mp3\Bloom_of_Youth.mp3"; private void button4_Click(object sender, EventArgs e){axWindowsMediaPlayer1.Ctlcontrols.play();}private void button5_Click(object sender, EventArgs e){//用于暫停正在播放的背景音樂axWindowsMediaPlayer1.Ctlcontrols.pause();}6. 變化背景圖片
實(shí)現(xiàn)功能:每隔30秒我這里是3s方便演示,變換一次游戲背景圖片。
代碼:
private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"I:\IOT\CsProject\GameClient\data\pictures\" + flag + ".jpeg";//設(shè)置圖片填充pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;pictureBox1.Image = Image.FromFile(picturePath);if (flag == 4){flag = 0;}}7. 效果演示
三、完整代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace GameClient {public partial class Form1 : Form{public Form1(){InitializeComponent();trackBar1.Value = 0;label1.Text = "0";}//分別創(chuàng)建 TcpClient 和 NetworkStream 的對(duì)象private NetworkStream stream;private TcpClient tcpClient = new TcpClient();//定義flag變量private int flag = 0;//字符串存儲(chǔ)音樂路徑private string s = @"I:\IOT\CsProject\GameClient\data\mp3\Bloom_of_Youth.mp3";/****************** 進(jìn)入游戲*****************/private void button2_Click(object sender, EventArgs e){/** 連接服務(wù)器*/try{//向指定的IP地址的服務(wù)器發(fā)出連接請(qǐng)求tcpClient.Connect("10.1.230.74", 3900);textBox2.AppendText("連接成功!");stream = tcpClient.GetStream();byte[] data = new byte[1024];//判斷網(wǎng)絡(luò)流是否可讀 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++){textBox2.AppendText(msg1[j]);}}}catch{textBox2.AppendText("服務(wù)器未啟動(dòng)!");}/******************* 播放背景音樂******************///設(shè)置音量鍵值trackBar1.Value = 30;label1.Text = "30";//設(shè)置為循環(huán)播放axWindowsMediaPlayer1.settings.setMode("loop", true);//設(shè)置初始音樂的音量大小(范圍:0——100)axWindowsMediaPlayer1.settings.volume = 30;//設(shè)置播放歌曲的路徑axWindowsMediaPlayer1.URL = s;}private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){//判斷連接是否斷開if (tcpClient.Connected){//向服務(wù)器發(fā)送數(shù)據(jù)string msg = textBox1.Text;Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg + "\n");stream.Write(outbytes, 0, outbytes.Length);byte[] data = new byte[1024];//接收服務(wù)器回復(fù)數(shù)據(jù)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++){ textBox2.AppendText(msg2[j]);}//刷新輸入框textBox1.Clear();//將光標(biāo)集中到輸入框中textBox1.Focus();}}else{textBox2.AppendText("連接已斷開");}}private void button4_Click(object sender, EventArgs e){axWindowsMediaPlayer1.Ctlcontrols.play();}private void button5_Click(object sender, EventArgs e){//用于暫停正在播放的背景音樂axWindowsMediaPlayer1.Ctlcontrols.pause();}private void trackBar1_Scroll(object sender, EventArgs e){//控制音量大小axWindowsMediaPlayer1.settings.volume = trackBar1.Value;//控制音量顯示label1.Text = trackBar1.Value.ToString();}private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"I:\IOT\CsProject\GameClient\data\pictures\" + flag + ".jpeg";//設(shè)置圖片填充pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;pictureBox1.Image = Image.FromFile(picturePath);if (flag == 4){flag = 0;}}private void button3_Click(object sender, EventArgs e){if (stream != null){stream.Close();tcpClient.Close();}textBox2.Clear();//停止播放背景音樂axWindowsMediaPlayer1.Ctlcontrols.stop();}} }四、參考
AxWindowsMediaPlayer的詳細(xì)用法
總結(jié)
以上是生活随笔為你收集整理的C#编写网游客户端连接游戏服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔xmm6321平台camera闪光
- 下一篇: 计算机毕业设计asp.net考勤管理系统