计算机网络编程24分游戏课程设计.docx

上传人:b****3 文档编号:4930098 上传时间:2022-12-11 格式:DOCX 页数:24 大小:232.65KB
下载 相关 举报
计算机网络编程24分游戏课程设计.docx_第1页
第1页 / 共24页
计算机网络编程24分游戏课程设计.docx_第2页
第2页 / 共24页
计算机网络编程24分游戏课程设计.docx_第3页
第3页 / 共24页
计算机网络编程24分游戏课程设计.docx_第4页
第4页 / 共24页
计算机网络编程24分游戏课程设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

计算机网络编程24分游戏课程设计.docx

《计算机网络编程24分游戏课程设计.docx》由会员分享,可在线阅读,更多相关《计算机网络编程24分游戏课程设计.docx(24页珍藏版)》请在冰豆网上搜索。

计算机网络编程24分游戏课程设计.docx

计算机网络编程24分游戏课程设计

 

软件学院

课程设计报告书

 

课程名称计算机网络编程

设计题目24分游戏

专业班级软件09-2班

学号0920010214

姓名王翀

指导教师

2011年12月

1设计时间1

2设计目的1

3设计任务1

4设计内容1

4.1设计内容和基本要求1

4.2实验内容2

4.3设计过程2

4.3.1总体设计2

4.3.1详细设计3

4.4程序代码及测试3

4.4.1程序清单3

4.4.2测试结果18

5总结与展望20

参考文献21

成绩评定21

 

1设计时间

2011年12月13日-2011年12月15日

2设计目的

(1)加深对计算机网络的基本概念和原理,以及网络编程接口Socket概念及编程原理的理解;

(2)提高学生网络应用与编程的能力。

学生在七个设计题目中选择一个,提高其分析与解决问题的能力,为大型网络编程打下坚实基础;

(3)通过撰写课程设计报告,锻炼学生的逻辑组织和语言表达能力;

(4)培养学生理论运用于实践的综合应用和设计创新能力。

3设计任务

(1)设计完成与网络应用相关题目的网络应用软件;

(2)调试运行之后,要求边演示边解释设计的思想、过程及采用的方法;

(3)完成课程设计报告。

4设计内容

4.1设计内容和基本要求

设计任务书提供设计题目供学生选择。

在指导教师同意的情况下,学生也可以自己选择感兴趣的设计题目,以调动学生参加创新设计的积极性和创造性,给学生充分的自主空间。

基本要求:

1.熟练掌握网络的基本概念和原理;

2.熟练掌握网络编程接口Socket概念及编程原理;

3.掌握基于TCP、UDP协议的编程技术;

4.掌握基于FTP协议的编程技术;

5.掌握基于SMTP、POP协议的编程技术;

6.掌握软件开发工具的使用过程及方法;

•设计工作量为完成一个中小型规模的软件和1份软件设计报告书。

•设计必须根据进度计划按期完成。

4.2实验内容

题目:

24分游戏

软件名:

24分游戏(分服务器端和客户端两部分)

功能:

游戏后台运行一个服务器软件,游戏者通过客户端程序登陆后,服务器随机产生四个1-9之间的随机数供游戏者使用,游戏者根据计算得出结果。

若计算出结果,且在规定的时间内,则从客户端输入表达式,服务器端根据客户端的表达式计算,若正确,软件提示:

“对了”,如果错了,软件提示“错了”,若超时。

软件提示“超时”。

服务器同时记录并维护一个游戏玩家的TOP10排行榜,供玩家查询。

描述:

服务器端:

接收客户端的命令请求并提供相应的服务。

客户端:

完成游戏人机界界面的设计,以命令的方式向服务器请求服务,并显示相应的提示,主要的命令有:

1.CONNECTIP地址端口号

指定游戏服务器的IP地址和端口号,连接到服务器。

响应:

连接成功/失败。

2.LOGIN用户名

用户登录,报告服务器玩家的名字。

响应:

成功/失败。

3.COUNT表达式

计算。

响应:

对了/错了/超时。

4.LISTTOP10

请求显示TOP10排行榜。

响应:

显示TOP10排行榜。

5.EXIT

退出游戏。

4.3设计过程

4.3.1总体设计

本实验通过客户端与服务器端两部分完成,总体需要通过TCP、UDP协议FTP协议SMTP、POP协议等完成客户端与服务器端的连接,并且能够正常登陆运行游戏。

4.3.1详细设计

客户端:

客户端需要通过上述协议完成客户端的构建,能够正确连接服务器,并且具有游戏程序,在正常登陆后能正常激活游戏程序,并且在游戏出错时报错,完成游戏人机界界面的设计,以命令的方式向服务器请求服务,并显示相应的提示,并且显示出前十的玩家的记录。

服务器端:

建立完整的服务器,能够使客户端正常登陆,显示玩家姓名及登录信息。

4.4程序代码及测试

4.4.1程序清单

客户端程序:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.IO;

usingSystem.Threading;

usingSystem.Collections;

namespaceThe24Client

{

publicpartialclassMainForm:

Form

{

privateSystem.DateTimeStartTime;

privateTcpClientclient;

privateBinaryReaderbr;

privateBinaryWriterbw;

privateboolisExit=false;

IPAddresslocalAddress;

publicMainForm()

{

InitializeComponent();

buttonExit.Enabled=false;

buttonGetNum.Enabled=false;

buttonAnswer.Enabled=false;

buttonEnter.Enabled=false;

buttonLogin.Enabled=false;

buttonGetTop10.Enabled=false;

IPAddress[]addrIP=Dns.GetHostAddresses(Dns.GetHostName());

localAddress=addrIP[0];

textBoxIP.Text=localAddress.ToString();

textBoxDuank.Text="51000";}

privatevoidbuttonConnect_Click(objectsender,EventArgse)

{

buttonLogin.Enabled=true;

buttonConnect.Enabled=false;

buttonExit.Enabled=true;

try{

client=newTcpClient(Dns.GetHostName(),51000);

listBoxInfo.Items.Add("连接成功");

}

catch

{

listBoxInfo.Items.Add("连接失败");

buttonConnect.Enabled=true;

return;

}

NetworkStreamnetworkStream=client.GetStream();

br=newBinaryReader(networkStream);

bw=newBinaryWriter(networkStream);

SendMessage("CONNECT"+textBoxIP.Text);

ThreadthreadReceive=newThread(newThreadStart(ReceiveData));

threadReceive.IsBackground=true;

threadReceive.Start();

}

privatevoidReceiveData()

{

stringreceiveString=null;

while(isExit==false)

{try

{

receiveString=br.ReadString();

}

catch

{

if(isExit==false)

{

MessageBox.Show("与服务器失去联系。

");

}

break;

}

string[]splitString=receiveString.Split(',');

stringcommand=splitString[0].ToLower();

switch(command)

{

case"CONNECT":

break;

case"LOGIN":

listBoxInfo.Items.Add("用户名上传成功");

break;

case"EXIT":

listBoxInfo.Items.Add("连接失败或与服务器断开连接");

break;

case"COUNT":

listBoxInfo.Items.Add(string.Format("[用户{0}]检查结果并上传耗时",splitString[1]));

break;

default:

listBoxInfo.Items.Add(receiveString);

break;

}

}

Application.Exit();

}

privatevoidSendMessage(stringmessage)

{

try

{

bw.Write(message);

bw.Flush();

}

catch

{

listBoxInfo.Items.Add("发送失败!

");

}

}

privatevoidbuttonLogin_Click(objectsender,EventArgse)

{

buttonGetTop10.Enabled=true;

buttonGetNum.Enabled=true;

buttonLogin.Enabled=false;

NetworkStreamnetworkStream=client.GetStream();

br=newBinaryReader(networkStream);

bw=newBinaryWriter(networkStream);

SendMessage("LOGIN,"+textBoxUserName.Text);

ThreadthreadReceive=newThread(newThreadStart(ReceiveData));

threadReceive.IsBackground=true;

threadReceive.Start();

}

privatevoidbuttonGetNum_Click(objectsender,EventArgse)

{

buttonEnter.Enabled=true;

buttonAnswer.Enabled=true;

Randomrandom=newRandom(DateTime.Now.Millisecond);

intnumb1=random.Next(1,9);

intnumb2=random.Next(1,9);

intnumb3=random.Next(1,9);

intnumb4=random.Next(1,9);

label5.Text=numb1.ToString();

label6.Text=numb2.ToString();

label7.Text=numb3.ToString();

label8.Text=numb4.ToString();

StartTime=DateTime.Now;

timer1.Enabled=true;

}

privatevoidbuttonAnswer_Click(objectsender,EventArgse)

{

this.listBox1.Items.Clear();

runter();

timer1.Enabled=false;

}

privateboolisSame(inta,intb,intc,intd)

{

if(a==b||a==c||a==d||b==c||b==d||c==d)

{

returnfalse;

}

returntrue;

}

publicintcounter(inti,intsum,intnum)

{

if(i==0)

{

returnsum+num;

}

elseif(i==1)

{

returnsum-num;

}

elseif(i==2)

{

returnsum*num;

}

else

{

floattemp=(float)sum/num;

if(num!

=0)

{

if(temp>(sum/num))

{

return-1000;

}

else

{

returnsum/num;

}

}

else

{

return-1000;

}

}

}

privatestringoperators(inti)

{

if(i==0)

{

return"+";

}

elseif(i==1)

{

return"-";

}

elseif(i==2)

{

return"×";

}

else

{

return"÷";

}

}

privatevoidrunter()

{

boolisResult=false;

int[]numb={0,0,0,0};

numb[0]=Int16.Parse(label5.Text);

numb[1]=Int16.Parse(label6.Text);

numb[2]=Int16.Parse(label7.Text);

numb[3]=Int16.Parse(label8.Text);

intcount=0;

for(inta=0;a<4;a++)

{

for(intb=0;b<4;b++)

{

for(intc=0;c<4;c++)

{

for(intd=0;d<4;d++)

{

if(this.isSame(a,b,c,d))

{//+,-,*,/,循环********

for(inta1=0;a1<4;a1++)

{

for(intb1=0;b1<4;b1++)

{

for(intc1=0;c1<4;c1++)

{

count=this.counter(c1,this.counter(b1,this.counter(a1,numb[a],numb[b]),numb[c]),numb[d]);

if(count==24)

{

listBox1.Items.Add("结果:

(("+numb[a]+operators(a1)+numb[b]+")"+operators(b1)+numb[c]+")"+operators(c1)+numb[d]+"="+count);

isResult=true;

}

count=this.counter(c1,this.counter(a1,numb[a],this.counter(b1,numb[b],numb[c])),numb[d]);

if(count==24)

{

listBox1.Items.Add("结果:

("+numb[a]+operators(a1)+"("+numb[b]+operators(b1)+numb[c]+"))"+operators(c1)+numb[d]+"="+count);

isResult=true;

}

count=this.counter(b1,this.counter(a1,numb[a],numb[b]),this.counter(c1,numb[c],numb[d]));

if(count==24)

{

listBox1.Items.Add("结果:

("+numb[a]+operators(a1)+numb[b]+")"+operators(b1)+"("+numb[c]+operators(c1)+numb[d]+")"+"="+count);

isResult=true;

}

count=this.counter(a1,numb[a],this.counter(b1,numb[b],this.counter(c1,numb[c],numb[d])));

if(count==24)

{

listBox1.Items.Add("结果:

"+numb[a]+operators(a1)+"("+numb[b]+operators(b1)+"("+numb[c]+operators(c1)+numb[d]+"))"+"="+count);

isResult=true;

}

count=this.counter(a1,numb[a],this.counter(c1,this.counter(b1,numb[b],numb[c]),numb[d]));

if(count==24)

{

listBox1.Items.Add("结果:

"+numb[a]+operators(a1)+"(("+numb[b]+operators(b1)+numb[c]+")"+operators(c1)+numb[d]+")"+"="+count);

isResult=true;

}}}}

if(!

isResult)

{

MessageBox.Show("此副牌无解");

}

}

privatevoidtimer1_Tick(objectsender,EventArgse)

{

TimeSpants=DateTime.Now-StartTime;

label12.Text=ts.Seconds.ToString();

}

}

服务器端程序:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Net;

usingSystem.Net.Sockets;

usingSystem.Threading;

namespaceThe24Server

{

publicpartialclassMainForm:

Form

{

privateListuserList=newList();

IPAddresslocalAddress;

privateconstintport=51000;

privateTcpListenermyListener;

boolisNormalExit=false;

publicMainForm()

{

InitializeComponent();

listBoxStatus.HorizontalScrollbar=true;

IPAddress[]addrIP=Dns.GetHostAddresses(Dns.GetHostName());

localAddress=addrIP[0];

buttonStop.Enabled=false;

}

privatevoidbuttonStart_Click(objectsender,EventArgse)

{

myListener=newTcpListener(localAddress,port);

myListener.Start();

listBoxStatus.Items.Add(string.Format("开始在{0}:

{1}监听客户连接",localAddress,port));

ThreadmyThread=newThread(ListenClientConnect);

myThread.Start();

buttonStart.Enabled=false;

buttonStop.Enabled=true;

}

privatevoidListenClientConnect()

{

TcpClientnewClient=null;

while(true)

{

try

{

newClient=myListener.AcceptTcpClient();

}

catch

{

break;

}

Useruser=newUser(newClient);

ThreadthreadReceive=newThread(ReceiveData);

threadReceive.Start(user);

userList.Add(user);

listBoxStatus.Items.Add(string.Format("[{0}]进入",newClient.Client.RemoteEndPoint));

listBoxStatus.Items.Add(string.Format("当前连接用户数:

{0}",userList.Count));

}

}

privatevoidReceiveData(objectuserState)

{

Useruser=(User)userState;

TcpClientclient=user.client;

while(isNormalExit==false)

{

stringreceiveStr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1