已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘 要2第一章 绪论31.1 五子棋的历史31.2 传统五子棋软件与网络五子棋软件的异同5第二章 系统分析62.1 需求分析62.2 总体设计8第三章 总体设计及详细设计93.1总体设计93.2详细设计代码的实现10第四章 调试与测试14总结与心得16附录(源代码)17参考文献25摘要伴随着计算机技术和网络技术的发展,世界第一款图形化网络游戏网络创世纪问世。挟计算机与网络技术之高精尖,融传统视听与数码娱乐之精华,集娱乐性、竞技性、仿真性、互动性于一体,网络创世纪迅速风靡全球,备受青睐。 自此拉开了网络游戏的序幕。五子棋在我国的历史可谓是源远流长,喜爱它的玩家也是大有人在。但目前的五子棋软件一般都是单机版的,游戏无法在异地的玩家之间进行。基于上述原因,本人决定以当今广为流行五子棋软件为模版,以Microsoft公司的 Visual Basic程序设计语言为工具,结合软件工程的思路开发一款基于网络的五子棋对弈软件。网络五子棋软件能够通过两台联网的计算机实现异地间的双人对弈。并提供了更换棋盘背景图片,播放背景音乐,以及“和棋”、“认输”、“悔棋”等功能。关键词 :五子棋、VB第一章 绪论1.1 五子棋的历史五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英文称之为“Renju” 、“Gobang”或“FIR”(Five in a Row 的缩写),亦有“ 连五子”、“五子连”、“串珠” 、“五目”、“五目碰”、“五格”等多种称谓。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为广大人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。古代的五子棋的棋具与围棋相同。五子棋大约随围棋一起在我国南北朝时先后传入朝鲜、日本等地。据日本史料文献介绍,中国古代的五子棋是经由高丽(朝鲜),于1688年至1704年的日本元禄时代传到日本的。到日本明治32年(公元1899年),经过公开征名,“连珠”这一名称才被正式确定下来,取意于“日月如合壁,五星如连珠”。从此,五子棋经过了不断的改良,例如棋盘由原来的纵横各十七道改为现行的纵横各十五道的五子棋专用棋盘等等。二十世纪初,五子棋传入欧洲并迅速风靡了全欧洲。通过一系列的变化,使五子棋这一简单的游戏系统化、规范化,最终成为今天的职业连珠五子棋,同时也成为一种国际比赛棋。1.2 传统五子棋软件与网络五子棋软件的异同在很早以前五子棋软件就已经被开发出来了,当时的五子棋软件仅提供了“人机模式”与“双人模式”。“人机模式”是指,人与计算机进行对弈,计算机按照事先编写好的算法程序来进行下棋;“双人模式”是指,两个人通过交替使用同一台计算机来进行下棋。无论是选择哪一种模式,所有的操作都必须在同一台计算机上来往完成,棋局无法在异地计算机之间来进行,故而也叫单机版五子棋软件。随着计算机网络的迅猛发展,异地计算机之间的通信变得十分方便快捷。这也为异地间的用户通过网络来进行下棋提供了可能。网络五子棋软件利用TCP/IP协议,在异地的玩家之间建立起TCP连接,并用它来交换棋局的各种数据信息。所以,网络五子棋软件在下棋以前必须要对相关的网络参数进行设置,才能实现玩家双方的成功连接。连接成功后,玩家双方轮流下棋,并将每一步下棋的信息通过网络传送给对方,使得双方棋盘上的棋子保持一致。与单机版五子棋软件相同,网络版五子棋软件也提供了倒计时器、“认输”、“和棋”和“悔棋”等功能。但这些功能的都是通过网络来实现的,所以,实现过程较单机版要复杂。在胜负判别方面,单机版五子棋软件与网络版五子棋软件并没有什么不同,只是网络版的玩家双方各自有一套胜负判别的程序。当一方玩家下一步棋后,他的胜负判别程序就执行一次,然后再将落子的信息传送给对方,对方的胜负判别程序也将执行一次。这样就完成一次胜负的判别过程。 第二章 系统分析2.1 需求分析软件的需求分析是软件生存期中重要的一步,也是决定性的一步。只有通过需求分析才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。在此阶段,了解用户要求本软件必须满足的所有功能和限制,以及用户对软件功能和性能的要求,弄清用户想要软件“做什么”,准确地表达用户的要求。功能需求能通过网络进行下棋符合五子棋的基本规则提供“认输”、“和棋”、“悔棋”等功能提供双方的倒计时功能提供水平坐标和垂直坐标功能能在棋子上显示的落子的顺序数提供多种背景提供玩家之间的聊天功能有背景音乐可自行输入用户名称环境需求10/10Mbps共享式HUB一台装有Windows95/98/NT/XP操作系统的计算机两台计算机的CPU不低于PII450,内存不小于64M10/10Mbps自适应网卡每台计算机各一块,SB兼容声卡各一块,5类双绞线若干米每台计算机都应配置有TCP/IP协议用户界面需求界面友好、亲切界面简洁、不花哨操作界面直观、不繁琐异常处理需求当端口号冲突时,错误提示并可重新输入当出现错误行列时,此次操作无效如果网络非正常断开,则终止此局2.2 总体设计Visual Basic是Microsoft公司推出的程序设计语言,它具有简单易学、功能强大、软件费用支出低、见效快等特点。它提供了开发Windows应用程序最快速、最简捷的方法。它不但是专业人员得心应手的开发工具,而且易于被非专业人员掌握并使用,全世界有数以百万计的程序设计人员在使用Visual Basic来开发各种类型的软件。Visual Basic提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。故而,实现本系统Visual Basic是一个相对较好的选择。在需求分析结束后,已经弄清楚了软件的各种需求,较好地解决了用户要软件“做什么”的问题,接下来就将着手实现软件的需求,即要着手解决“怎么做”的问题。在这个阶段着重实现需求的程序模块设计问题,并将需求转化为软件的系统结构,进行模块的划分,确定每个模块的功能、接口及模块之间的调用关系。第三章 总体设计及详细设计3.1总体设计棋盘中Chess是棋盘,一个数组Type型变量,最大下维Chess(16,16)。 Cer代表落棋者:1白方 2黑方,在棋盘中也这样表示,若棋盘Chess的某个变量为0(比如Chess(1,1).Value=0)表示该棋盘的位置还没有棋子。 Rem 判断棋盘a,b位置的棋子的横、竖、交叉四方向的其中一个方向是否有连成五子,由于棋盘采用的是全盘搜索,因而只向正方向搜索。也就是说,假如搜索棋盘a位置,只搜索a、a+1、a+2,而不搜索a-1、a-2位置的棋子。 3.2详细设计代码的实现Public Function FiveLine(ByVal a As Integer, ByVal b As Integer, Cer As Byte, ByVal Cn As Byte) As Boolean Dim i As Byte, j As Byte, k As Byte Cn = Cn - 1 连同起使格算起的格数刚好为Cn,故此Cn要减1 FiveLine = Flase k = Chess(a, b).Chess 记录a,b位置的棋子 If k Cer Then Exit Function 当前棋盘的位置非Cer方的,不再运算 Rem 检查横方向 If a + Cn 16 Then GoTo HengOK 超出棋盘 For i = a To a + Cn If Chess(i, b).Chess k Then k = 100: i = a + Cn Next i If k 100 Then FiveLine = True: Exit Function 横向5个棋子完全一样,返回True HengOK: Rem 检查竖方向 If b + Cn 16 Then GoTo ShuOK 超出棋盘 k = Chess(a, b).Chess For i = b To b + Cn If Chess(a, i).Chess k Then k = 100: i = b + Cn 竖向5个棋子完全一样,返回True Next i If k 100 Then FiveLine = True: Exit Function 竖向5个棋子完全一样,返回True ShuOK: Rem 检查斜1方向 If a + Cn 16 Or b + Cn 16 Then GoTo Xie1OK 超出棋盘 k = Chess(a, b).Chess For i = 0 To Cn If Chess(a + i, b + i).Chess k Then k = 100 Next i If k 100 Then FiveLine = True: Exit Function 斜1方向5个棋子完全一样,返回True Xie1OK: Rem 检查斜2方向 If a - Cn 16 Then GoTo Xie2OK 超出棋盘 k = Chess(a, b).Chess For i = 0 To Cn If Chess(a - i, b + i).Chess k Then k = 100 Next i If k 100 Then FiveLine = True: Exit Function 斜1方向5个棋子完全一样,返回True Xie2OK: Rem 检查斜3方向 If a + Cn 16 Or b - Cn 0 Then GoTo Xie3OK k = Chess(a, b).Chess For i = 0 To Cn If Chess(a + i, b - i).Chess k Then k = 100 Next i If k 100 Then FiveLine = True: Exit Function 斜1方向5个棋子完全一样,返回True Xie3OK: End Function第四章 调试与测试经过多次的调试之后,运行无误。在Microsoft Visual Basic 6.0 中文版软件中,载入已经编译好的的文件,运行并出现图1玩家黑棋先行,电脑白棋后行玩家胜利了。图2所示电脑胜利了。图3所示玩家与电脑平分秋色,都没有取得胜利,视为和棋。图4所示 总结与心得通过本次VB程序课程设计,我觉得对自己提高很大:克服了的偷懒的毛病,这在我以后的学习和工作中的心理定位与调节有很大的帮助。我感受到了编程是一项非常烦琐周密的活动,他不但需要一个人周密的思考问题的能力,处理问题的能力,还需要有足够的耐心和严谨治学的作风,来不得半点马虎。通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道如何去查找资料和整合处理这些资料的能力,这为以后的大学毕业设计论文打下了一个初步的基础使我收益最大的是享受到了一种成功的喜悦,在这两个星期之中从开始的确定论文题目,然后是上网和上图书馆查找资料,编写VB原程序,然后是进行编译,这个环节是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于自己是有很大的提高的。这个五子棋游戏原程序的最大特点是采用了在主函数中调用子函数思想,每一种功能都是用子函数的办法来进行处理,简洁,清晰,方便,不容易出现错误。 在输入错误时本来想用一种警告的铃声来提醒用户,由于所学的知识不多,自己的编程经验不足,按现有的知识水平有些东西暂时还无法解决,还有待于在以后的学习中不断提高和改进!附录源代码:FormPrivate Sub Form_Load()棋盘初始化Call MapInit游戏数据初始化Call GameInitEnd SubGimagePrivate Sub GImage_Click(Index As Integer)If IsTrue = True And IsOver = False Then Call PersonPlay(Index)End IfEnd SubProject1-mapmodule (code):Public Sub MapInit()Dim i, m, n As IntegerDim GWid, GHed As IntegerForm1.GImage(0).Left = 0Form1.GImage(0).Top = 0For i = 1 To 99 Load Form1.GImage(i) Form1.GImage(i).Visible = TrueNext iGWid = Form1.GImage(0).WidthGHed = Form1.GImage(0).HeightFor n = 0 To 9 For m = 0 To 9 Form1.GImage(n * 10 + m).Left = GWid * m Form1.GImage(n * 10 + m).Top = GHed * n Next mNext nForm1.Height = GHed * 10 + Form1.GStaBar.Height + 750Form1.Width = GWid * 10 + 150Form1.GStaBar.Panels(1).Text = 黑方先下End SubProject1-wincheckmodule (code)Dim i As Integer, j As Integer, k As IntegerDim PTab(9, 9, 191) As Boolean, CTab(9, 9, 191) As BooleanDim GBoard(9, 9) As BooleanDim GWin(1, 191) As IntegerPublic IsOver As Boolean, IsTrue As BooleanDim Count As IntegerDim ChessNum(1) As Integer初始化存储数据表Public Sub GameInit()Count = 0横向存储结构For i = 0 To 9 For j = 0 To 5 For k = 0 To 4 PTab(i, j + k, Count) = True CTab(i, j + k, Count) = True Next k Count = Count + 1 Next jNext i竖向存储结构For i = 0 To 5 For j = 0 To 9 For k = 0 To 4 PTab(i + k, j, Count) = True CTab(i + k, j, Count) = True Next k Count = Count + 1 Next jNext i正斜方向的存储结构For i = 0 To 5 For j = 0 To 5 For k = 0 To 4 PTab(i + k, j + k, Count) = True CTab(i + k, j + k, Count) = True Next k Count = Count + 1 Next jNext i反斜方向的存储结构For i = 0 To 5 For j = 4 To 9 For k = 0 To 4 PTab(i + k, j - k, Count) = True CTab(i + k, j - k, Count) = True Next k Count = Count + 1 Next jNext iDebug.Print Count初始化棋盘的是否可下For i = 0 To 9 For j = 0 To 9 GBoard(i, j) = True Next jNext i初始化判断胜负数据For i = 0 To 191 GWin(0, i) = 0 GWin(1, i) = 0Next i棋子数ChessNum(0) = ChessNum(1) = 1IsOver = FalseIsTrue = TrueEnd Sub玩家下棋Public Sub PersonPlay(Index)Dim XBoard As Integer, YBoard As IntegerXBoard = Int(Index / 10)YBoard = Index Mod 10If GBoard(XBoard, YBoard) = True Then ChessNum(0) = ChessNum(0) + 1 Set Form1.GImage(Index).Picture = Form1.GImageList.ListImages(1).Picture GBoard(XBoard, YBoard) = False Form1.GStaBar.Panels(1).Text = 目前玩家累计步数: & ChessNum(0) Else Form1.GStaBar.Panels(1).Text = 警告:此处不可以下棋! Exit SubEnd IfFor i = 0 To 191 If PTab(XBoard, YBoard, i) = True Then CTab(XBoard, YBoard, i) = False GWin(0, i) = GWin(0, i) + 1 GWin(1, i) = 8 End If If GWin(0, i) = 5 Then MsgBox 恭喜,玩家胜利! IsOver = True End End IfNext iIsTrue = FalseIsOver = FalseForm1.GStaBar.Panels(1).Text = 电脑思考中,请稍后.Call ComputerPlay End Sub电脑AI判断下棋Public Sub ComputerPlay()Dim Score(1, 9, 9) As LongDim Max As Long, l As Integer, m As IntegerMax = 0For i = 0 To 9 For j = 0 To 9 Score(0, i, j) = 0 Score(1, i, j) = 1 If GBoard(i, j) = True Then For k = 0 To 191 计算玩家在此空格上的分数 If PTab(i, j, k) = True And GWin(0, k) 8 Then Select Case GWin(0, k) Case 0 Score(0, i, j) = Score(0, i, j) + 1 Case 1 Score(0, i, j) = Score(0, i, j) + 200 Case 2 Score(0, i, j) = Score(0, i, j) + 400 Case 3 Score(0, i, j) = Score(0, i, j) + 2000 Case 4 Score(0, i, j) = Score(0, i, j) + 10000 End Select End If 计算电脑在此空格上的分数 If CTab(i, j, k) = True And GWin(1, k) 8 Then Select Case GWin(1, k) Case 0 Score(1, i, j) = Score(1, i, j) + 1 Case 1 Score(1, i, j) = Score(1, i, j) + 210 Case 2 Score(1, i, j) = Score(1, i, j) + 420 Case 3 Score(1, i, j) = Score(1, i, j) + 2100 Case 4 Score(1, i, j) = Score(1, i, j) + 12000 End Sel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生 食品安全 主题班会课件
- 防暑安全课件
- 上海安全员C证考试(专职安全员)题及答案
- 人员的风险管理标准和管理措施规范(10篇)
- 小学生安全知识竞赛试题
- 国防知识竞赛题及其答案
- 单病种质量管理考试题库及答案
- 2024审计考试真题及答案
- 国开经济法形考任务1-4试题及答案
- 中班午睡安全教育课件
- 杭州萧山交通投资集团有限公司Ⅱ类岗位招聘7人笔试考试备考试题及答案解析
- 2026云南云天化石化有限公司校园招聘9人笔试考试备考试题及答案解析
- 资质转让售卖合同范本
- 保卫工作个人述职报告
- 电气元件符号知识培训课件
- 2025贵州贵安商业资产运营管理有限公司招聘11人考试笔试备考题库及答案解析
- 2025年人力资源公司猎头服务管理制度
- 2025年高校教师资格证之高等教育学测试卷附答案
- 工程项目质量管理体系标准模板
- 老年人血压自测
- 安全生产风险管控管理制度
评论
0/150
提交评论