C#编写网游客户端连接游戏服务器
生活随笔
收集整理的這篇文章主要介紹了
C#编写网游客户端连接游戏服务器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、編寫內容
- 二、準備工作
- 1. 創建項目
- 2. 界面設計
- 3. 連接服務器
- 4. 發送數據
- 5. 播放背景音樂
- 6. 變化背景圖片
- 7. 效果演示
- 三、完整代碼
- 四、參考
編譯軟件:Visual Studio 2019
編譯環境:Windows 10
使用語言:C#
一、編寫內容
本文章編寫一個網游客戶端,游戲服務器的校園內網IP地址為 10.160.230.74,端口為3900,采用TCP連接,主要功能有四個,如下:
①連接成功后,可以將服務器發來的消息不停地顯示在 textbox 中;
②客戶端要發給服務器的數據,通過 textbox 輸入或者點擊 button ;
③能夠播放背景音樂;
④每隔30秒,變換一次游戲背景圖片。
本文章涉及到了各個控件的基本使用、TCP的連接、客戶端與服務器端的數據傳輸等等。
二、準備工作
1. 創建項目
- 新建窗體應用,下一步,填寫項目名和路徑即可創建
- 添加WindowsMediaPlayer 控件后續播放背景音樂需要使用到,點擊工具,選擇工具箱項,即是下圖界面。
- 選擇 “ COM 組件 ” ,勾選上 “ Windows Media Player ” ,再點擊 “ 確定 ” 。
2. 界面設計
- textbox —— 2個(輸入框、顯示框)
- button —— 5個(發送、進入游戲、退出游戲、播放、停止)
- picturebox —— 1個(圖片顯示)
- trackbar —— 1個(音量調節)
- label —— 1個(音量顯示)
- groupbox —— 2個(控件容器)
- WindowsMediaPlayer —— 1個(媒體播放器)
- timer —— 1個(圖片變化)
axWindowsMediaPlayer
3. 連接服務器
實現功能:點擊連接游戲按鈕后,能連接服務器,若連接成功,則將服務器發來的消息不停地顯示在 textbox 中;若連接失敗,則在 textbox 中顯示 “ 服務器未啟動 ” 。
- 雙擊 “ 連接游戲 ” 按鈕,轉到代碼編輯區。
在 button2_Click 函數體內,編寫連接的代碼,
代碼:
4. 發送數據
實現功能:客戶端要發給服務器的數據,通過 textbox 輸入,然后點擊 button 發送出去,并將服務器端返回結果顯示在 textbox 中。
- 雙擊 “ 發送 ” 按鈕,轉到編輯代碼的文件中,在 button1_Click 函數中編寫以下的代碼。
5. 播放背景音樂
實現功能:當進入游戲后,開始播放背景音樂,并能調節音量大小。
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. 變化背景圖片
實現功能:每隔30秒我這里是3s方便演示,變換一次游戲背景圖片。
代碼:
private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"I:\IOT\CsProject\GameClient\data\pictures\" + flag + ".jpeg";//設置圖片填充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";}//分別創建 TcpClient 和 NetworkStream 的對象private NetworkStream stream;private TcpClient tcpClient = new TcpClient();//定義flag變量private int flag = 0;//字符串存儲音樂路徑private string s = @"I:\IOT\CsProject\GameClient\data\mp3\Bloom_of_Youth.mp3";/****************** 進入游戲*****************/private void button2_Click(object sender, EventArgs e){/** 連接服務器*/try{//向指定的IP地址的服務器發出連接請求tcpClient.Connect("10.1.230.74", 3900);textBox2.AppendText("連接成功!");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++){textBox2.AppendText(msg1[j]);}}}catch{textBox2.AppendText("服務器未啟動!");}/******************* 播放背景音樂******************///設置音量鍵值trackBar1.Value = 30;label1.Text = "30";//設置為循環播放axWindowsMediaPlayer1.settings.setMode("loop", true);//設置初始音樂的音量大小(范圍:0——100)axWindowsMediaPlayer1.settings.volume = 30;//設置播放歌曲的路徑axWindowsMediaPlayer1.URL = s;}private void axWindowsMediaPlayer1_Enter(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){//判斷連接是否斷開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++){ textBox2.AppendText(msg2[j]);}//刷新輸入框textBox1.Clear();//將光標集中到輸入框中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";//設置圖片填充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的詳細用法
總結
以上是生活随笔為你收集整理的C#编写网游客户端连接游戏服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔xmm6321平台camera闪光
- 下一篇: 传真机换色带