




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络应用程序开发报告专 业 计算机网络技术 班 级 Z090553 学 号 Z09055309 学生姓名 宋秀华 指导教师 刁文广 设计时间 2011-6-20 2010年 月 日13洛阳理工学院计算机与信息工程系1 概述游戏说明五子棋在我国的历史可谓是源远流长,喜爱它的玩家也是大有人在,是很多人的娱乐首选,也是一种竞技项目。但很多的五子棋软件一般都是单机版的,游戏无法在两个玩家之间进行。基于上述原因,五子棋作为一个古老而又有广泛群众基础的游戏,他的完善性无疑是家玩家有很大的影响在互联网迅速发展的今天,五子棋的流行已经不仅仅只是在现实生活中的面对面的娱乐竞技,在网上也已经是广大玩家的首选娱乐游戏。为适应当今社会五子棋软件化的需求,通过对一般的五子棋软件进行设计,通过本设计希望能在五子棋的软件发展上起点微不足道的推动作用。实现当今社会五子棋软件化的需求。软件设计采用visual studio2008版作为开发平台,运用软件工程的分析和编写方法,收集主要相关文献资料,对系统作详细的分析和设计,实现五子棋的基本功能需求,达到一般五子棋的游戏功能和规则设置。在设计上,主要解决的问题有五子棋的各个方向判断胜负算法的分析,以及五子棋中“聊天,重新开始”等基本功能的实现。需求分析一款游戏项目的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求或者是出于公司自身发展和实力的情况,其中玩家的实际需求也就是说市场需求最为重要.面对游戏拥有不同知识和理解层面的玩家,项目的负责人(或者游戏制作人)对玩家需求的理解程度,在很大程度上决定了此类游戏开发项目的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给参与项目开发的每个成员,保证开发过程按照满足玩家需求为目的正确项目开发方向进行,是每游戏开发项目管理者需要面对的问题.而作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适2 实现2.1 设计思路2.2 具体实现2.2.1 界面设计界面主要分四大部分:棋盘、ip地址、棋子选择和聊天窗口,程序运行开始,先要输入要连接的主机ip地址,然后选定棋子颜色,就可以下棋了。输入文本的控件我选择了comboBox空间,在其下拉表中预先输入一些常用的语句,如:你好,嗨等,这样方便聊天。聊天记录窗口我用了listBox,当聊天内容比较多时,会自动添加滚动条,便于用户阅读聊天信息2.2.2按钮功能实现(1)重新开始按钮public void Restart() radBlack.Enabled = true; radWhite.Enabled = true; for(int i=0;iLevel;i+) for (int j = 0; j Level; j+) pici, j.Image = Image.FromFile(Board.jpg); flagi, j = false; doubleFlagi, j = false; this.AllowClick = true; private void button2_Click(object sender, EventArgs e) this.Restart(); (2)发送按钮private void btnSend_Click(object sender, EventArgs e) String ForeStr = rn + txtSelfIP + 【 + DateTime.Now.ToShortDateString() + + DateTime.Now.ToShortTimeString() + 】:rn; this.Sender.send(txtIP.Text.Trim(),txtSend.Text.Trim(), 12001); txtShow.Text += ForeStr; int BeforeIndex = txtShow.Text.Length; txtShow.Text += txtSend.Text; txtShow.Select(BeforeIndex, txtShow.Text.Length); txtShow.SelectionBackColor = Color.White; txtShow.SelectionColor = SelfFontColor; /滚动 txtShow.Select(txtShow.Text.Length, 0); txtShow.ScrollToCaret(); txtSend.Text = ; 2.2.3棋子位置判断获得所下的棋子位置的下标:RowIndex = (p.Location.Y - 30) / (p.Height);ColIndex = (p.Location.X - 30) / (p.Width);判断是否有棋子添加到棋盘上,是通过Button1是否产生单击事件来判定的,在Button按钮单击事件中,编入了输赢的判断代码,结果用messagebox的形式显示出来,还有一些对不合规则下棋方法的判断及给出相应的提示private void button1_Click(object sender, EventArgs e) if (this.AllowClick) this.radBlack.Enabled = false; this.radWhite.Enabled = false; PictureBox p = (PictureBox)sender; p.Image = Image.FromFile(PictureFileName); /获得所下的棋子位置的下标 RowIndex = (p.Location.Y - 30) / (p.Height); ColIndex = (p.Location.X - 30) / (p.Width); String Message;Message = Pos + Splitor + RowIndex.ToString() + Splitor + ColIndex.ToString(); /发送的信息字符串FlagRowIndex, ColIndex = true; /记录if (this.Judge1() | this.Judge2() | this.Judge3() | this.Judge4()Message += Splitor + this.WinStr; try int Port = Convert.ToInt32(txtPort.Text.Trim(); if (doubleFlagRowIndex, ColIndex) picRowIndex, ColIndex.Image = Image.FromFile(OtherPictureFileName); MessageBox.Show(不能在有棋子的地方下棋, 消息); AllowClick = true; else Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); Sender.send(txtIP.Text.Trim(), Message, Port); AllowClick =false; catch (Exception ex) MessageBox.Show(ex.Message, 错误!); this.Restart(); doubleFlagRowIndex, ColIndex = true; /双方记录 if (this.Judge1() | this.Judge2() | this.Judge3() | this.Judge4() this.WinCount += 1;MessageBox.Show(胜利!胜负情况: 胜+ WinCount.ToString()+负+ LoseCount.ToString(), 对战结束);this.Restart(); else MessageBox.Show(不能抢下棋子); public Form1() InitializeComponent(); for (int i = 0; i Level; i+) for (int j = 0; j Level; j+) pici, j = new PictureBox(); pici, j.Click += new EventHandler(this.button1_Click); public void StartListen() while (true) int Port = Convert.ToInt32(txtPort.Text.Trim(); udpclient = new UdpClient(Port); IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, Port);try byte bytes = udpclient.Receive(ref ipendpoint); String StrReceive = ;StrReceive = Encoding.GetEncoding(gb2312).GetString(bytes, 0, bytes.Length); String parts = StrReceive.Split(Splitor); if (parts0.Equals(Pos) ReceivedRow = Convert.ToInt32(parts1); ReceivedCol = Convert.ToInt32(parts2); picReceivedRow, ReceivedCol.Invoke(new MyDelegate(this.InvokeFun); doubleFlagReceivedRow, ReceivedCol = true;try if (partsparts.Length - 1.Equals(this.WinStr) MessageBox.Show(对方胜利!胜负情况: 胜 + WinCount.ToString() + 负 + LoseCount.ToString(), 对战结束); this.LoseCount += 1; this.Restart(); catch (Exception) this.AllowClick = true; StrReceive = ; catch (Exception ex) String s = ex.Message; break; finally udpclient.Close(); /关闭UDPClient 2.2.4变量声明#region 变量声明 Send Sender = new Send(); UdpClient udpclient, udpclient2; int Level = 30; String PictureFileName = Black.jpg; String OtherPictureFileName = White.jpg; public PictureBox, pic=new PictureBox30,30 ; public bool, flag=new bool30,30; public bool, doubleFlag = new bool30, 30; public const char Splitor=Q; /只需要判断自己是否胜利即可,将胜利的消息发出 /被点击的元素的下标: int RowIndex, ColIndex; int ReceivedRow, ReceivedCol; Thread mythread,ChatThread; delegate void MyDelegate(); delegate void ChatDelegate(); String WinStr = Finish; String ChatMessage = ; bool AllowClick = true; /防止抢下棋子 int WinCount = 0; int LoseCount = 0;Color SelfFontColor=Color.Blue, OtherFontColor=Color.Red; /聊天字体颜色处理 #endregion2.2.5 棋盘设计棋盘式有一个一个的picturebox,拼接而成的,每个picturebox,加载image组成棋盘方格,选用picturebox便于记录棋子的位置,可以减少许多不必要的麻烦,具体代码:for (int i = 0; i Level; i+) y = i * 20; for (int j = 0; j Level; j+) x = j * 20; pici, j.SetBounds(x+30,y+30,20,20); flagi, j = false; /记录变量 pici, j.Image = Image.FromFile(Board0.jpg); this.Controls.Add(pici, j); 2.2.6 、四个判断胜利与否的函数编写了四个函数,分别从横向、纵向、上三角(2种)、下三角(2种)的角度来判断棋子的个数,若满足5子连线,则返回胜利标志 public bool Judge1() /横向判断 int count = 0; for (int i = 0; i Level; i+) for (int j = 0; j = 5) return true; else if(!flagi,j) count = 0; count = 0; return false; public bool Judge2() /纵向判断 int count = 0; for (int i = 0; i Level; i+) for (int j = 0; j = 5) return true; else count = 0; count = 0; return false; public bool Judge3() /左上右下 int count = 0; /上三角 int j; for (int h = 0; h Level - 3; h+) j=h; for(int i=0;iLevel&j= 5) return true; else count = 0; count = 0; /下三角 for (int row = 1; row Level - 3; row+) j = row; for (int col = 0; col Level & j = 5) return true; else count = 0; count = 0; return false; public bool Judge4() /左下右上 int count = 0; int h; /上下三角 for(int c=0;c=0; j-) h = j; for (int i = c; i =0; i+) if (flagi,h) count+; if (count = 5) return true; else count = 0; h-; count = 0; return false; 2.27、聊天监听public void ListenChat() while (true) try int Port = 12001; udpclient2 = new UdpClient(Port); IPEndPoint ipendpoint2 = new IPEndPoint(IPAddress.Any, Port); byte bytes = udpclient2.Receive(ref ipendpoint2); this.ChatMessage = Encoding.GetEncoding(gb2312).GetString(bytes, 0, bytes.Length); udpclient2.Close(); txtShow.Invoke(new ChatDelegate(this.ChatInvoke); catch (Exception) udpclient2.Close(); break; this.ChatMessage = ; public void ChatInvoke() String ForeStr = rn + this.txtIP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 首都精神文明汇报
- 员工培训财务制度
- 2025至2030中国天然调味料载体行业项目调研及市场前景预测评估报告
- 二甲医院特需门诊建设与管理
- 危险化学物品培训
- 三进教学工作汇报
- 离婚协议女方不忠情况下的财产分割与精神抚慰金合同
- 网络游戏IP授权合同:游戏版权授权与运营协议
- 离婚协议无效确认及子女抚养权变更执行异议起诉书
- 2025至2030中国慢性淋巴细胞白血病行业产业运行态势及投资规划深度研究报告
- 学习提高阅读速度的方法 课件
- 第一单元知识盘点(含字词、佳句、感知、考点) 四年级语文上册 (部编版有答案)
- 钻井工程钻柱课件
- 小学硬笔书法课教案(1-30节)
- 卫生政策学之政策问题根源分析
- 周口市医疗保障门诊特定药品保险申请表
- 校园物业考评表
- 千米、分米和毫米的认识单元备课
- 重大医疗事件报告及处理制度
- 爆破作业人员培训考核题库
- 构造地质学03章-地质构造分析的力学基础
评论
0/150
提交评论