局域网五子棋网络课程设计报告
五子棋联网的课程设计
五子棋联网的课程设计一、课程目标知识目标:1. 让学生掌握五子棋的基本规则和技巧,了解其历史与发展。
2. 帮助学生理解联网对战的基本原理,学会使用网络平台进行五子棋对战。
3. 使学生能够运用所学知识,分析棋局走势,提高五子棋竞技水平。
技能目标:1. 培养学生独立思考、判断和解决问题的能力。
2. 提高学生的团队协作和沟通能力,学会在联网对战中尊重对手、友好交流。
3. 培养学生运用信息技术手段,自主查找五子棋相关资料,拓展知识面。
情感态度价值观目标:1. 培养学生对五子棋的兴趣,激发学生学习传统文化的热情。
2. 引导学生树立公平竞争、诚信待人的价值观,培养良好的竞技道德。
3. 培养学生面对挫折和挑战时的积极心态,增强自信心和抗挫折能力。
本课程针对年级特点,结合五子棋知识和联网对战技能,旨在提高学生的综合素质。
课程注重实践性和趣味性,让学生在轻松愉快的氛围中学习,达到课程目标。
同时,课程目标具体、可衡量,方便教师进行教学设计和评估。
二、教学内容1. 五子棋基本知识:包括棋盘、棋子、基本规则、胜负判定方法等,结合课本相关章节,让学生全面了解五子棋的基本知识。
2. 五子棋技巧:讲解常用的攻防策略、开局、中局、残局技巧,结合实例分析,提高学生的实战能力。
3. 联网对战原理:介绍网络五子棋对战的基本原理,包括服务器、客户端、通信协议等,使学生了解联网对战的运行机制。
4. 网络平台使用:指导学生注册、登录网络五子棋平台,熟悉平台操作,学会进行联网对战。
5. 五子棋文化:介绍五子棋的历史发展、民间传说、竞技赛事等,拓展学生的知识视野。
教学大纲安排如下:第一周:五子棋基本知识学习,熟悉棋盘和规则。
第二周:五子棋技巧学习,分析典型棋局,提高实战技巧。
第三周:联网对战原理学习,了解网络五子棋平台的运行机制。
第四周:网络平台使用教学,学会注册、登录和进行联网对战。
第五周:五子棋文化学习,了解五子棋的历史和民间传说。
教学内容与课本紧密关联,系统性强,有利于学生循序渐进地掌握五子棋相关知识。
网络对战五子棋游戏设计与实现报告
课程设计说明书2020-2020学年第1 学期目录1课程设计背景介绍 (3)2课程设计的目标 (3)3课程设计技术介绍 (3)4工具/预备工作 (4)5设计分析与方式 (4)5.1系统的架构图与流程图 (4)5.2通信协议设计 (6)5.3要紧类、数据结构设计 (6)5.4要紧代码段分析 (8)6设计结果 (12)6.1大体数据 (12)6.2测试结果与分析 (13)7设计体会与收成 (14)7.1设计进程中碰到的问题与解决进程 (14)7.2问题及心得体会 (15)8参考文献 (15)网络五子棋对战游戏1 课程设计背景介绍21世纪,随着运算机科学的进展,网络应用愈来愈普遍,为广大网络用户提供了加倍周到和人性化的效劳。
个性化已慢慢成为现今网络应用的潮流。
网络对战五子棋利用TCP/IP协议,在异地的玩家通过与同一效劳器成立起TCP连接,并用它来互换棋局的各类数据信息。
效劳器可同时效劳多个客户,本设计包括谈天和游戏两个模块,游戏模块具有认输、逃跑、和棋功能。
但这些功能都是通过网络来实现的,因此实现进程较单机版要复杂。
2 课程设计的目标编写一个能够通过因特网对弈的五子棋游戏。
其要紧功能如下:1)能通过网络进行下棋。
2)符合五子棋的大体规那么3)提供“认输”、“和棋”功能4)提供背景音乐和成效音乐功能5)提供同一桌两个玩家之间的谈天功能6)玩家可自行输入用户名称7)提供显示玩家头像功能8)提供系统时刻显示功能3 课程设计技术介绍本设计依照通信原理结合用C#语言来编写网络五子棋游戏。
程序采纳C/S 模式。
所有客户端之间的通信都是通过效劳端进行转发。
为了能有序的正确的转发每一个用户的数据。
效劳端采纳多线程机制,每一个线程对应一个客户端。
第一效劳端有一个监听主线程,监听用户的连接。
一旦有某个用户连接了效劳端,效劳端便产生一个子线程负责处置该客户的业务。
程序利用TcpListener类与TcpClient类来完成效劳端与客户端之间的通信,而且多处利用了线程的委托和回调函数。
五子棋设计报告(完整版)
《计算机网络》设计报告题目:局域网五子棋设计班级:计算机08.2班姓名:颜晓云指导教师:杨松波2011年7 月15日目录1、概论 .......................................................................... 错误!未定义书签。
2、功能介绍 ........................................................................ 错误!未定义书签。
3、程序流程图 .................................................................... 错误!未定义书签。
4、实现代码 ........................................................................ 错误!未定义书签。
5、总结体会 ....................................................................... 错误!未定义书签。
-6、参考文献 ........................................................................ 错误!未定义书签。
第一章绪论主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。
当然,Event 监听器等也是这个程序的重要部分。
程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。
程序编写的思路来源于网上和书上的资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。
第二章功能介绍(1)程序在设计初就定义黑棋先行,白棋随后。
从第一个棋子开始开始相互顺序落子。
(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。
最新 C032五子棋游戏(网络版)的设计与开发-精品
C032五子棋游戏(网络版)的设计与开发目录1 引言 11.1 网络游戏背景 11.2 五子棋游戏现状及研究意义 12 游戏开发环境介绍 12.1 环境介绍 12.2 Visual C++6.0介绍 12.3 OSI模型介绍 22.4 TCP/IP模型介绍 22.5 Winsock技术 32.5.1 Winsock编程流程简介 32.5.2 CAsyncSocket类介绍 42.5.3 CSocket类介绍 52.5.4 多媒体MCI接口介绍 63 五子棋游戏(网络版)研究方法 73.1 五子棋游戏(网络版)需求分析 73.2 五子棋游戏(网络版)研究思路 84 五子棋游戏(网络版)设计 94.1 五子棋游戏(网络版)流程 94.2 五子棋游戏(网络版)功能设计方案 94.2.1 主要类介绍 94.2.2 主要类的工作示意图 104.3 五子棋游戏实现 104.3.1 游戏连接——CServerSocket类的实现 104.3.2 游戏连接——CClientSocket类的实现 124.3.3 网络信息——CMessg类的实现 144.3.4 下棋算法——Match类的实现 144.3.5 主界面——CFiveChessView类的实现 164.3.6 多媒体——CSoundThread类的实现 224.3.7 定时器的实现 235 游戏测试 245.1 五子棋下棋功能测试 245.2 音乐播放测试 245.3 定时器以及其他响应测试 25结论 25参考文献 25致谢 26声明 27。
网络五子棋
辽宁科技大学课程设计说明书设计题目:用Socket通信的五子棋学院、系:电子与信息工程学院专业班级:学生姓名:指导教师:成绩:2010 年7 月22 日目录摘要 (3)第一章概述 (4)1.1开发背景 (4)1.2开发工具及其介绍 (4)第二章技术背景 (5)2.1客户机/服务器技术 (5)2.2TCP通讯技术 (5)2.3S OCKET通讯技术 (5)2.4S OCKET编程 (6)第三章总体设计 (8)3.1界面设计 (8)3.2功能模块划分 (8)3.2.1 建立服务器模块 (8)3.2.2 建立客户端模块 (8)3.2.3 五子棋游戏规则管理模块 (8)3.2.4 聊天模块 (9)第四章主要功能模块详述 (10)4.1系统总述 (10)4.2模块功能详述 (10)4.2.1 贯穿整个设计的两个类 (10)4.2.2 服务器端等待连接的流程 (12)4.2.3 服务器端代码实现 (12)4.2.4 客户端接收信息的流程 (13)4.2.5 客户端接收信息的代码实现 (13)4.2.6五子棋游戏规则管理模块 (15)第五章总结与展望 (19)第六章心得体会 (18)致谢 (20)参考文献 (21)摘要网络五子棋程序主要通过传输文本命令来实现彼此的沟通、信息的交流。
本程序设计主要运用了Visual C++编程环境,实现了用户的即时网络对战功能。
本程序涉及到了客户机/服务器的基本原理和TCP网络通信技术。
应用Socket通信技术方便地实现了客户端与服务器端之间的通信。
同时还实现了实时聊天的功能。
关键词:网络通信,Socket编程,聊天,Visual C++第一章概述1.1开发背景随着网络的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,网络游戏,实现彼此的沟通,信息的交换。
甚至网络游戏在部分人们的生活中,充当休闲放松的主要手段。
本程序即针对局域网内的用户,实现其用户之间的实时游戏对战。
网络五子棋系统设计报告
青岛理工大学琴岛学院设计报告课题名称:网络五子棋系统学院:青岛理工大学琴岛学院专业班级:计算机科学与技术10-2 学号:20100301031学生:王莹指导教师:侯世中青岛理工大学琴岛学院教务处2013年01月04日学生王莹指导教师侯世中课题名称网络五子棋系统设计时间2012/12/24-2013/1/4 设计地点 8教205设计目的1、通过本次课程设计,熟练掌握开发语言C#和开发环境.NET2、加深对C#软件的理解,训练编写程序的良好习惯3、培养良好的程序设计风格(模块划分、接口设计、函数和变量命名规则)和习惯(程序备份、版本更新与控制),提高软件测试、调试的能力与技巧4、提高团队的合作精神设计内容:一、项目背景进入21世纪,随着计算机网络技术和Internet的不断发展,网络游戏越来越受到广大群众的喜爱,它不仅丰富了人们的业余生活,也增强了人们的思维能力,提高了智力,人们的娱乐方式也随之发生了深刻的变革。
由于我对五子棋游戏和网络编程非常感兴趣,所以我的设计报告的题目选为“网络五子棋系统”。
网络五子棋作为网络游戏的代表,以其简单的游戏规则,深刻的智慧深受广大人们的喜爱。
同时网络技术使得这一古老的游戏散发出新的活力,更加促进了人类文化的传承。
网络五子棋适用面广,老少皆宜,是一种对提高人们智力,提高人们创新能力有着极好帮助的游戏。
因此网络五子棋得以迅速的传播。
当前网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是网络对战不能够一起实现,所以我们决定开发一个能够进行网络对战的五子棋系统。
二、设计目的为了更深入地理解TCP协议的具体应用编程技巧,本设计使用功能强大的VS2010开发工具和C#开发语言,开发出一个拥有自己特色的五子棋程序,其中VS2010是一个能开放代码的开发工具,基本C#的扩展平台。
就该五子棋程序来讲,它只是一个框架和一组服务,用于通过插件,组件,控件构建开发环境。
通过本次课程设计,希望可以熟练掌握开发语言C#和开发环境.NET。
【报告】c五子棋实验报告
【关键字】报告c五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:一、实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。
1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。
drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。
importjavax.swing.*;importjava.awt.*;;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanel{private static final long serialVersionUID = 1L;private int space=20; //网格间的距离private int grids=30; //棋盘的网格数private int radius=space/2; //棋的半径Clientsktskt;//当chesses[i][j]=0,表示网格节点(i,j)上无棋//当chesses[i][j]=1,表示网格节点(i,j)上放白棋//当chesses[i][j]=2,表示网格节点(i,j)上放黑棋privateint[][] chesses=new int[grids+1][grids+1];private intcurrColor=1; //当前棋的颜色privateMouseListenerplayChessHandler=new MouseAdapter(){public void mouseClicked(MouseEvent e){if(skt.reMouseGo()){int x=e.getX();int y=e.getY();//放一颗棋子if(x=0 && y=0)if(chesses[round(x)][round(y)]==0){chesses[round(x)][round(y)]=currColor;repaint(); //刷新图形skt.dataout("x:"+String.valueOf(round(x)));skt.dataout("y:"+String.valueOf(round(y)));skt.setMouseGo(false);if(gameOver(currColor)){skt.dataout("g:你输了");ClientMyDialog(skt.chat,"你赢了");;}currColor=currColor==1?2:1; //切换棋子的颜色}}}};public int round(float a){ //获得接近a的网格节点坐标float f=a/space;returnMath.round(f);}publicClientChessPanel(intspace,intgrids,Clientsktskt){ this.space=space;this.grids=grids;this.radius=space/2;this.skt=skt;setBackground(Color.BLUE);setSize(space*grids,space*grids);addMouseListener(playChessHandler);startChess();}public void startChess(){clearGrids(); //清空棋盘currColor=1;repaint(); //刷新图形private void clearGrids(){for(inti=0;i for(int j=0;j chesses[i][j]=0;}//画一颗棋子private void drawChess(Graphics g,intx,inty,int color){g.setColor(color==1?Color.GREEN:Color.BLACK);g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);}//画网格private void drawGrids(Graphics g){g.setColor(Color.DARK_GRAY);for(inti=0;i g.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,grids*space);}}//接收对方下的棋坐标public void paintChess(intx,int y){if(x=0 && y=0){if(chesses[x][y]==0){chesses[x][y]=currColor;currColor=currColor==1?2:1; //切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true);repaint(); //刷新图形}}}//判断游戏是否结束publicbooleangameOver(intgameOver){int five=0;//用于判断是否有连续5个子for(inti=0;i for(int j=0;j if(chesses[i][j]==gameOver){five++;for(in(本文来自:小草范文网:c五子棋实验报告)t k=1;k if(chesses[i][j+k]==gameOver){five++;if(five==5){return true;}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j+k]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k4;k++){//左斜向比较if(chesses[i+k][j-k]==gameOver){five++;if(five==5){return true;}}else{five=1;}}}}five=0;}return false;}public void paintComponent(Graphics g){ //覆盖paintComponent()方法super.paintComponent(g); //必须先调用父类的方法drawGrids(g); //画网格for(inti=0;i for(int j=0;j if(chesses[i][j]!=0)drawChess(g,i,j,chesses[i][j]); //画棋子}}2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。
五子棋游戏程序的设计报告
计算机学院网络工程专业《程序设计综合课程设计》报告(2011/2012学年第一学期)学生姓名:学生班级:网络工程学生学号:指导教师:2011年12月30日双人五子棋目录第一章课程设计目的和要求 (1)1.1课程设计的目的 (1)1.2课程设计的要求 (1)第二章课程设计任务内容 (2)2.1课程设计的主要内容 (2)2.2系统设计原则 (2)第三章设计说明 (3)3.1游戏分析和介绍 (3)3.1.1游戏分析 (3)3.1.2游戏介绍 (3)3.2重点模块说明 (3)3.2.1棋盘界面Showboard() (3)3.2.2下棋Play() (4)3.2.3覆盖棋盘Recoverboard() (7)3.2.4游戏结束后初始化棋盘Unitboard() (7)3.2.5保存棋盘CopyB() (8)3.3函数清单 (8)3.4接口 (9)第四章软件使用说明 (10)4.1测试 (10)4.2限制条件 (13)第五章课程设计心得体会 (14)附录一程序流程图 (15)附录二程序代码 (16)附录三参考文献 (26)第一章课程设计目的和要求1.1课程设计的目1,学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。
2,全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计.3,掌握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。
4,运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。
1.2课程设计的要求1,与同学合作设计、编制、调试出一款双人五子棋游戏,并单独完成其中一定量的函数模块。
2,要求该游戏具有趣味性和可操作性,能够正常运行。
其中用到C++语言中的各种语句、结构。
(如其中需要注意全局变量和局部变量的申明,数组的使用等)3,双人五子棋要求能够进入欢迎界面,二人对弈,当有五颗同色棋子相连时,判断出输赢等一系列游戏流程。
五子棋联网课程设计
五子棋联网课程设计一、课程目标知识目标:1. 学生能理解五子棋的基本规则,掌握五子棋的棋谱记录方法。
2. 学生能了解五子棋的发展历程,了解我国五子棋文化。
3. 学生能掌握五子棋的基本战术,如连五、活四、眠四等。
技能目标:1. 学生能运用所学知识,独立进行五子棋对弈。
2. 学生能在联网对弈中,运用所学战术与策略,提高自己的竞技水平。
3. 学生能通过联网课程,培养团队协作和沟通能力。
情感态度价值观目标:1. 学生对五子棋产生兴趣,培养良好的竞技体育精神。
2. 学生在联网对弈中,学会尊重对手,培养公平竞争意识。
3. 学生通过团队协作,培养合作精神,提高人际交往能力。
课程性质:本课程为五子棋联网课程,结合线上对弈平台,让学生在实践操作中掌握五子棋知识。
学生特点:学生为小学四年级学生,对五子棋有一定了解,但技能水平有限,好奇心强,喜欢尝试新鲜事物。
教学要求:教师需关注学生个体差异,因材施教,注重实践操作,提高学生五子棋技能。
同时,关注学生情感态度价值观的培养,使学生在学习过程中形成良好的竞技体育精神。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 五子棋基本规则:包括棋盘、棋子、落子方法、胜利条件等。
教材章节:《五子棋入门》第一章2. 五子棋棋谱记录方法:学习棋谱的书写和阅读。
教材章节:《五子棋入门》第二章3. 五子棋发展历程与我国五子棋文化:了解五子棋的历史背景和文化内涵。
教材章节:《五子棋文化》第一章4. 五子棋基本战术:学习连五、活四、眠四等基本战术。
教材章节:《五子棋战术》第一章5. 联网对弈实践:运用所学知识进行线上对弈,提高实战能力。
教材章节:《网络五子棋实战》6. 团队协作与沟通能力培养:分组进行联网对弈,交流战术与心得。
教材章节:《五子棋团队协作》教学内容安排与进度:第一课时:五子棋基本规则及棋谱记录方法第二课时:五子棋发展历程与我国五子棋文化第三课时:五子棋基本战术学习第四课时:联网对弈实践与团队协作沟通能力培养在教学过程中,教师需确保内容的科学性和系统性,关注学生个体差异,合理安排教学进度。
网络对战五子棋总报告
计算机综合实践实验报告设计题目:网络对战五子棋专业: 计算机科学与技术班级:姓名:学号:指导教师:中国矿业大学计算机科学与技术学院年月徐州目录1绪论 (4)1.1 网络对战五子棋的研发背景 (5)1.2 网络五子棋研究的目的和意义 (5)1.3 开发语言JA V A简介 (6)1.3.1 JA V A的基本特点 (6)1.3.2 Java中输入/输出流概念 (7)1.3.3 Socket 机制 (7)1.3.4 JA V A工具 (8)2需求分析 (9)2.1 软件设计目标 (9)2.2功能描述 (9)2.3 功能需求用例图 (10)3概要设计 (11)3.1 总体说明 (11)3.2 游戏的总体构思 (12)3.2.1 C/S模式交互图 (12)3.2.2网络通信的实现 (13)3.2.2.1数据的传输 (13)3.2.3客户端设计 (13)3.2.3.1客户端界面设计 (13)3.2.4 服务器端设计 (14)3.2.4.1服务器界面设计 (14)3.2.4.2网络通信功能设计 (14)3.2.5游戏规则与对战设计 (14)4详细设计......................................................................................................... 错误!未定义书签。
4.1客户端设计类 (15)4.2 服务器端设计类 (18)4.2.1服务器界面设计 (18)4.2.2网络通信功能设计 (18)4.2.3服务器端整体框架类设计 (19)4.3数据流程图 (21)4.5 顺序图 (22)4.6 游戏运行界面 (23)4.7游戏中的主要代码: (25)4.8开发环境及运行环境 (27)4.8.1开发环境 (27)4.8.2运行环境 (27)5 代码管理SVN (28)5.1版本更新日志 (28)6结论 (32)6.1总结 (32)6.2用户手册 (32)6.3参考资料 (32)1绪论五子棋是起源于中国古代的传统黑白棋种之一。
网络对战五子棋系统设计
河北农业大学本科毕业论文(设计)题目:网络对战五子棋摘要五子棋游戏以其优秀的人工智能深受广大玩家的喜爱,而对于初步探究网络编成的编程爱好者来说,编制五子棋程序因其规则简单而大受欢迎,然而它却要求程序员对五子棋规则有相当深入的了解。
程序员考虑得越周到,其五子棋程序就越智能。
五子棋游戏软件设计的主要内容是:根据五子棋的基本规则,要让对方客户端知道该在哪一点下子,就要根据盘面的形势,并把棋盘棋子的重新绘制绘制,也就是更新该点的位置,然后再通过监听网络传递的消息,直到新的位置放在棋盘的什么位置上,在进行修改,并通过计算,得出玩家是否获得胜利.,因此玩家就能反复的进行联机游戏。
本文论述了采用联机对战的方式体现出五子棋程序的分析与设计,并采用面向对象的开发工具C#来具体实现。
关键字:Socket ;C/S;五子棋;网络对弈;C#AbstractGobang game with excellent artificial intelligence by the vast number of players who, for the initial research network organization programming enthusiasts, Gobang procedures for the preparation of the rules simple and popular, but it requires programmer to Gobang game has a deep understanding of the rules. Other thoughtful consideration they treat their Gobang game procedures more wisdom.Gobang game software design is the main content: According Gobang basic rules to know each other's customers - in violation of the West, we must under Permian situation, and the board pawn re-mapping mapping, that is updating the point position, and then through the monitoring network news until the new location on the board what position, Following changes, and through the calculation, resulting in players is victory. , the on-line game players can repeatedly.This article discusses the use of on-line way reflect those Gobang procedures analysis and design, object-oriented development tools and the adoption of specific C# to achieve.Key Words : Socket; C/S; Gobang; play chess on network,C#目录1绪论 (4)1.1选题背景和意义 (4)1.2国内外研究现状和发展趋势 (4)1.3 研究内容与目标 (5)2相关理论与技术 (6)2.1五子棋简介 (6)2.2相关技术简介 (6)2.2.1 C/S体系结构 (6)2.2.2 SOCKET简介 (7)2.2.3 面向对象的理论知识 (9)2.2.4 C#.NET 相关知识介绍 (9)3系统的分析与设计 (10)3.1需求分析 (10)3.2 功能分析 (10)3.3运行环境 (11)4系统的实现 (11)4.1概要设计 (11)4.2流程图 (12)4.3程序详细设计 (13)5总结 (30)致谢 (1)参考文献 (1)1绪论1.1选题背景和意义五子棋是起源于中国古代的传统黑白棋种之一。
C++程序设计课程设计实验报告—网络五子棋
计算机学院实验报告课程名称:C++程序设计课程设计开课学期:2010—2011学年第2学期院班:计算机学院093指导老师:项目题目:网络五子棋学生姓名(学号):提交时间:一、实验目的……………….二、实验内容编写程序具有如下功能(写明分工):……………….三、游戏描述本游戏用C++语言编写,运行环境为V isual C++ 6.01、菜单:在fivechess resources中插入菜单(IDR_MAIN_MENU)a)菜单项:新游戏(ID_NEW_GAME_MENU)b)子菜项:和棋(ID_DRAW_GAME_MENU)c)子菜项:退出游戏:(ID_EXIT_GAME_MENU)d)成员变量有2、在dialog中的fivechess resources里的IDD_FIVECHESS_DIALOG的属性中把这个菜单(IDR_MAIN_MENU)加载进来(在游戏开始之后它就会自动的加载进来)然后我们通过类向导给它添加响应函数Objects ID;ID_EXIT_GAME_MENU Messages;COMMANDMember function Name;OnExitGameMenuObjects ID;ID_NEW_GAME_MENU Messages;COMMANDMember function Name;OnNewGameMenuObjects ID;ID_DRA W_GAME_MENU Messages;COMMANDMember function Name;OnDrawGameMenu2、我们开始实现函数;a)首先我们实现退出函数;退出函数比较简单,我们只要调用基类的CDialog::OnCancel()函数就可以实现退出函数的功能b)新游戏菜单OnNewGameMenu的实现我们需要首先调用设置对话框void CFiveChessDlg::OnNewGameMenu(){if(IDOK==m_setup_dlg.DoModal())//在这里而我们暂且把这个对话框命名为本类的一个子对象,当他的模式弹出对话框{Restart();//NewGameStart(m_setup_dlg. m_isHost);// 当他点击确定以后,我们就可以调用NewGameStart这个游戏开始接口函数,这个m_isHost是CSetupDlg中的一个成员变量,他描述了本次主机还是客户机差别,调用这个函数后就可以开始新游戏}}同样和棋OnDrawGameMenu我们也需要游戏提供一个接口,这个时候我们可以在菜单中调用这个和棋函数void CFiveChessDlg::OnDrawGameMenu(){DrawGame();}好完成了菜单的设计3、接下来是网络设置对话框的设计a)我们在资源视图中的Dialog中右键单击InsertDialog加入一个对话框ID:IDD_SETUP_DLG Caption:网络设置双击这个对话框上的OK按钮,这里是给这个对话框建一个类CSetupDlg网络设置O 主机类型选择O客户机IDC_HOST_OPTION IDC_CLIENT_OPTIONIP地址:IDC_IP_ADDRESS__EDIT端口号:IDC_NET_PORT_EDIT| 确定| | 取消|然后我们给这两个对象建立两个相关的变量Member number name:Category:V ariable type:IDC_ID_ADDRESS_EDIT Control CIPAddressCtrlMember number name:Category:V ariable type:IDC_NET_PORT_EDIT UNIT m_net_portMinimum:1Maximum:65530现在来实现他的类首先要实现他其中的ok函数和cancel函数FiveChess.cpp Object IDs: Messages:FiveChess.rc IDCANCEL BN_CLICKEDFiveChessDlg.cpp IDOK BN_CLICKED-----------------------| SetupDlg.cpp |----------------------StdAfx.cpp在点击了ok按钮以后就需要把IP地址的端口号记录下来,那么我们就需要定义一个CString类的一个IP地址和Port;void CSetupDlg::OnCancel(){CDialog::OnCancel();}void CSetupDlg::OnOK(){CString strIP, strPort;UpdateData(TRUE);//然后我们更新数据朝变量m_ip_addr.GetWindowText(strIP);//把IP地址得到m_strHostIP = strIP;strPort.Format("%d", m_net_port);//然后也得到端口号,把它格式化出来if(m_isHost)//在SetupDlg.h头文件中声明一个Host是否是主机的标识位,这里我们用BOOL型来代替(public: BOOL m_isHost;)并在初始化的时候设置为FALSE(在SetupDlg.cpp中的初始化函数中CSetupDlg::CSetupDlg(CWnd* pParent /*=NULL*/) : CDialog(CSetupDlg::IDD, pParent){//{{AFX_DA TA_INIT(CSetupDlg)m_net_port = 0;m_is_Host = FALSE;//}}AFX_DA TA_INIT}){WritePrivateProfileString("HOST", "PORT", strPort, ".\\config.ini");//然后我们先判断是否是主机,如果是那么我们就把相应的数据写入到配置文件中,他的HOST碟的PORT端口的里面,当前目录下的".\\config.ini"}Else//否则我们认为他是客户机{WritePrivateProfileString("CLIENT", "IP", strIP, ".\\config.ini");WritePrivateProfileString("CLIENT", "PORT", strPort, ".\\config.ini");//然后把PORT端口号也写入,然后返回}CDialog::OnOK();}这里要注意我们写的配置文件是怎么样的呢,这里我们可以先写一下配置文件,来定义一下[HOST]PORT = 10000[CLIEVT]IP = 127.0.0.1//就是默认的本机地址PORT = 10000然后保存在当地文件夹下的bin文件夹中命名为config.ini浩,有了这个配置文件后,我们就可以操作了,就可以写入了又因为if(m_ip_Host)如何知道用户点击了Host?这时候我们可以使用类向导,把另外两个控件给选出来Objects IDs:Messageses:Addfunction:IDC_CLIENT_OPTION BN_CLICKED OnClientOptionIDC_HOST_OPTION BN_CLICKED OnHostOption void CSetupDlg::OnClientOption() //当用户选择CLIENT的时候,也就是客户机{//char str[128] = {0};//将用户的选择写进m_ip_addr.EnableWindow(TRUE);//因为选择主机的时候我们可以这样考虑,它选择主机的时候因为不需要输入IP地址,他就是本机的IP地址,而输入客户机的时候只需要数IP 这时候我们为了方便,就把在输入选择用户的时候把IP地址输入框激活,而选择主机的时候,不让它激活,他就没有办法输入IP 地址,默认的就是本机IP地址GetPrivateProfileString("CLIENT", "IP", "", str, 127, ".\\config.ini");//然后读取配置文件,可以调用这个API函数,这是默认的就是空””,就是没读到,然后把它读到str里面,它的最大文件是127,把它读到,m_ip_addr.SetWindowText(str);//获得以后把这个数据给设进去memset(str,0, 128);//然后把它置空GetPrivateProfileString("CLIENT","PORT","5000", str, 127, ".\\config.ini");//同时除了IP以外,客户机…..m_net_port = atoi(str);m_isHost = FALSE;//这样当用户点击了这个以后我们就把这个数据读出来,并设置进去,然后更新数据显示,而当这时候,这里就把它设置成了FALSEUpdateData(FALSE);}void CSetupDlg::OnHostOption(){char str[128] = {0};//而当用户点击了主机的时候,首先也是一样,定义数组来用来存储我们后面读到的端口号m_ip_addr.EnableWindow(FALSE);GetPrivateProfileString("HOST", "IP", "", str, 127, ".\\config.ini");//然后把从数据里面读出来的这里,这里注意文件来自于当前目录下的config.ini,我们这里可以不用”IP”段m_ip_addr.SetWindowText(str);memset(str,0, 128);//一样把它置为空GetPrivateProfileString("HOST", "PORT", "5000", str, 127, ".\\config.ini");m_net_port = atoi(str);m_isHost = TRUE;//设置为TRUEUpdateData(FALSE);//更新数据}这个时候请注意,这些都只是按键的响应,但是在初始化对话框的时候还差缺少一个东西,因为调用对话框的时候,他就会进行初始化,我们去把…....数据读出来,那么怎么办呢,这时候我们就需要调用一个初始化函数CSetup WM_INITDIALOG ADD Function选择初始化消息添加方法编辑这时候我们就默认设置连接的是主机BOOL CSetupDlg::OnInitDialog(){CDialog::OnInitDialog();//指定对话框是否对它的一个控件设置输入焦点。
局域网对战五子棋游戏设计
目录一、需求分析........................................................................................ - 1 -1.1 开发背景 .................................................................................. - 1 -1.2 项目目标 .................................................................................. - 1 -1.3 运行环境 .................................................................................. - 1 -1.4 游戏说明 .................................................................................. - 2 -1.5 项目任务书 .............................................................................. - 2 -二、总体设计........................................................................................ - 3 -2.1 总体方案 .................................................................................. - 3 -2.2 详细设计 .................................................................................. - 5 -三、工程进度...................................................................................... - 30 -3.1 前期准备部分(第1-3天)................................................. - 30 -3.2中期实现功能部分(第4-7天).......................................... - 30 -3.3后期总结完善部分(第8-10天)........................................ - 30 -四、测试报告...................................................................................... - 31 -4.1 测试棋谱 ................................................................................ - 31 -4.2 网络连接测试 ........................................................................ - 31 -4.4游戏互动测试 ......................................................................... - 32 -4.5总体测试 ................................................................................. - 33 -五、个人小结 ............................................................................. - 33 -一、需求分析1.1 开发背景五子棋是起源于中国古代的传统黑白棋种之一。
五子棋游戏(网络版)的设计与开发
The Design and Development of the on -line Black&White Game Abstract
On-line games bring to a new form of entertainment. Until now, on-line games is charming more and more players. As the development of game industry, there will be more and more developers join in the game development team.
本论文从基本网络套节字开始入手,介绍了一些本系统相关的理论知识,随 后详细介绍了五子棋游戏(网络版)的开发过程。包括服务器端、客户端的 socket 编程,五子棋服务器和客户端通信的实现,五子棋判断算法的实现,主界面视图, 多媒体播放以及定时器等附加功能的实现。最后对系统进行测试并对所做工作进 行总结。
The thesis start with introduction of network socket programming, the development processing of the on -line Black&White game are introduced in detail as followed. The thesis have a full touch on server and client socket programming, the communication between server and client was implemented, the algorithm of the five-in-a-row game, the multimedia playback functions.
五子棋程序设计报告参考模板
五子棋程序设计报告班级:姓名:学号:指导老师:2012/1/07一、课程设计题目与要求题目:网络五子棋游戏。
功能要求:该软件应包括服务器端程序和客户端程序两个部分,要求实现的功能如下。
客户端功能要求:(1)友好的用户登录界面设计;(2)登录服务器后,请求用户列表;(3)相其他用户发出邀请,做游戏;(4)当用户加入或离开时,客户端接受服务器发送的成员列表,更新用户列表;(5)当用户开始游戏或游戏结束时,服务器通知客户端用户更新该用户状态,客户端接受该消息后,更新该用户状态;(6)根据五子棋的游戏规则实现五子棋的游戏功能,包括游戏判断、画图等。
服务器端功能要求:(1)服务器接受用户注册信息,服务器最多容纳64 个成员,成员信息包括:用户名、IP 地址、端口和状态,当服务器退出时,保存用户信息;(2)当用户加入或退出,服务器向所有用户发送成员列表,通知客户端更新成员列表;(3)当用户开始游戏或者结束游戏时,服务器通知其他用户更新该用户状态,通知客户端更新成员状态;(4)和客户端一起维护游戏的进行,发送游戏信息。
二、需求分析以及模型框架1. 五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。
而且我对五子棋有着独特的爱好,希望自己也可以编写出一款可以实现人机对战的五子棋游戏。
把自己的思想付给电脑,让自己有些成就感,给自己继续努力的动力。
借此次课程设计的机会,把想法变成现实。
而且五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
所以此次c++课程设计选择五子棋这个题目。
2.程序所实现的功能通过给电脑赋予人工智能,利用电脑运算速度快的特点,结合五子棋的游戏规则,给电脑设定固定的扫描方式,设定权值,使电脑能够选择最合适的落子点,然后调用加载已做好的棋盘棋子图像,最终实现简单的人机对弈。
五子棋的网络对战功能课程设计
暑假生产实习报告书专业:计算机科学与技术班级:090411学生姓名:左胜平学号:09041109指导教师:艾菊梅2011年8月5号目录1.需求分析 (5)1.1目标 (5)1.2 用户特点 (5)1.2.1 系统结构层次模块图 (5)2.概要设计 (5)2.1服务器管理模块设计 (5)2.1.1 功能描述 (5)2.1.2 功能界面说明 (5)2.1.3 操作效果图 (5)2.1.4 界面操作说明 (5)2.1.5 服务器工作原理 (6)2.1.6 流程图 (6)2.2用户登录注册管理模块设计 (6)2.2.1 功能描述 (6)2.2.2功能界面说明 (6)2.2.3 操作效果图 (6)2.2.4 流程图 (6)2.3 用户列表模块设计 (7)2.3.1 功能描述 (7)2.3.2 功能界面说明 (7)2.3.3 操作效果图 (7)2.3.4 流程图 (7)2.4网络聊天模块设计 (7)2.4.1 功能描述 (7)2.4.2 功能界面说明 (7)2.4.3 操作效果图 (7)2.4.4 流程图 (7)2.5对战棋盘模块设计 (8)2.5.1 功能描述 (8)2.5.2 功能界面说明 (8)2.5.3 操作效果图 (8)2.5.4 流程图 (8)3.详细设计 (8)3.1登录模块 (8)3.1.1模块运行流程图 (8)3.1.2登录模块功能分解表 (9)3.1.3登录模块与数据传输模块公共接口 (10)3.2注册模块 (10)3.2.1模块流程图 (10)3.2.2注册模块功能分解表 (11)3.2.3注册模块与数据传输接口 (12)3.3用户列表模块 (12)3.3.1模块运行流程图 (12)3.3.2用户列表模块功能分解表 (13)3.3.3用户列表模块与数据传输模块接口 (14)3.4用户对战模块 (14)3.4.1模块运行流程图 (14)3.4.2对战模块功能分解表 (14)3.4.3对战模块与数据传输模块接口图 (15)3.5数据传输模块 (15)3.5.1模块流程图 (15)3.5.2数据传输模块功能分解表 (15)3.5.3数据传输模块对外提供接口 (16)3.6服务端数据处理模块 (16)3.6.1模块流程图1(登录,注册,用户列表信息处理模块) (16)3.6.2服务端数据模块功能分解表1 (16)3.6.3服务端数据模块与数据传输模块接口1 (17)3.6.4模块流程图2(对战信息处理模块) (17)3.6.5服务端数据模块功能分解表2 (18)3 / 213.6.6服务端数据模块与数据传输模块接口2 (18)3.7数据描述表 (18)4 显示效果 (20)4.1用户登录界面 (20)4.2用户注册界面 (20)4.3用户列表界面 (21)4.4对战界面 (21)4.5 聊天界面 (21)4.6 服务器端界面 (21)5 总结 (21)1.需求分析1.1目标该系统属于游戏开发项目,其主要是实现五子棋的网络对战功能,即玩家可以通过网络的方式实现对战,其模式类似与QQ游戏,通过帐号密码登录,列出在线列表框,点击玩家进行五子棋对战。
五子棋课程设计报告总结
五子棋课程设计报告总结
《五子棋课程设计报告总结》
一、项目介绍
本次课程设计的主题是五子棋,即中国古老的棋类游戏,它是一种经典而又受到欢迎的棋盘游戏,目的是在全局棋盘上通过放置一系列棋子来获胜。
本次课程设计旨在研究五子棋的游戏算法,并利用该算法设计一款能够在计算机上运行的五子棋游戏。
二、设计步骤
1、分析五子棋的游戏规则和玩法,并研究五子棋的游戏算法。
2、设计五子棋的游戏界面,编写界面上的程序代码。
3、实现五子棋的游戏算法,并编写算法处理的程序代码。
4、测试五子棋游戏的程序,修改程序中可能出现的错误。
三、总结
本次课程设计成功的设计了一款能够在计算机上运行的五子棋游戏程序,在设计中,首先通过分析游戏规则和玩法,研究五子棋的游戏算法,之后在此基础上设计出五子棋的游戏界面,实现五子棋的游戏算法,最后通过测试程序,修改可能出现的错误,最终完成了本次课程设计。
本次课程设计不仅让我们深入地学习了五子棋的游戏算法,而且还着重让我们学习了程序的设计、算法的实现以及程序的测试,让我们更加深入地了解计算机编程,提高了我们的计算机编程技能,也为我们的未来职业发展奠定了基础。
局域网五子棋网络课程设计报告
辽宁科技大学课程设计说明书设计题目:局域网五子棋设计学院、系:计算机科学与工程学院专业班级:计试点2005学生姓名:王红辉指导教师:周传胜成绩:2009年3月5日目录一题目――――――――――――――――――――――――――――――1 二设计的任务、目的和作用―――――――――――――――――――――1 三课程设计的内容―――――――――――――――――――――――――1 四开发环境及实现所用语言―――――――――――――――――――――1 五实现要点――――――――――――――――――――――――――――1A 数据通信指令(协议)及各指令的处理内容―――――――――――1B 套接字使用方法―――――――――――――――――――――――51.服务器端套接字的实现―――――――――――――――――――52.客户端套接字的实现――――――――――――――――――――6 C棋盘及棋子画法―――――――――――――――――――――――6D棋盘存储结构及胜负判定算法―――――――――――――――――8E程序实现中定义的其他重要数据及意义、定义的函数或过程首部及意义――――――――――――――――――――――――――――――12六设计体会―――――――――――――――――――――――――――-13一、题目计算机网络课程设计―――局域网五子棋的实现二、设计的任务、目的和作用计算机网络课程设计是计算机网络原理课程之后的时间加强环节,通过本设计的训练使学生加深对网络协议的理解,并实现制定通信规则,同时通过实践,进一步掌握套接字编程方法,为大型网络编程打下坚实基础。
三、课程设计的内容五子棋的局域网对战四、开发环境及实现所用语言开发环境:Microsoft Visual C++ 6.0语言:C++五、实现要点A、数据通信指令(协议)及各指令的处理内容客户与服务器采用TCP连接指令及处理:#define LOGINSERVER "login" //连接服务器#define LEA VESERVER "leave" //离开服务器#define REPEA TENAME "rpeat" //名字重复#define SERVERCLOSE "svrcl" //服务器关闭#define GETCLIENTIP "getip" //获取客户的IP#define SENDCLIENTIP "sndip" //发送客户的IP#define IPINFOMATION "#IP:#" //发送IP的信息#define MSGTYPELENGTH 5 //关键字长度enum { LOGINSVR, GCLIENTIP, SCLIENTIP, LEA VESVR };//进入服务器,取客户的IP,发送客户的IP,离开服务器客户发送数据给服务器void CGobangGameClientDlg::SendMessageToServer(unsigned int nMsgType /* = LOGINSVR */, CString strMsg /* = "" */){CString strSendMsg;switch( nMsgType ){case LOGINSVR:{strSendMsg = LOGINSERVER + strMsg;break;}case GCLIENTIP:{strSendMsg = GETCLIENTIP + strMsg;break;}case SCLIENTIP:{strSendMsg = SENDCLIENTIP + strMsg;break;}case LEA VESVR:{strSendMsg = LEA VESERVER + strMsg;break;}default:break;}m_pClientSocket->Send( strSendMsg, strSendMsg.GetLength());}服务器端处理收到的数据void CGobangGameDlg::ProcessPendingRead(CClientSocket *pClientSocket) {//定义缓冲区char buffer[BUFFER_SIZE];//接收数据int nReceived = pClientSocket->Receive(buffer,BUFFER_SIZE,0);buffer[nReceived] = 0;CString strReceived;strReceived.Format("%s", buffer);CString strMsgType = strReceived.Left( MSGTYPELENGTH );CString strMsgInfo = strReceived.Right( strReceived.GetLength() - MSGTYPELENGTH ) ;if( strMsgType == LOGINSERVER ){if( isRepeatName( strMsgInfo ) == FALSE ){ClientLoginServer( strMsgInfo , pClientSocket);UpdateClients(buffer, nReceived, pClientSocket);}else{strReceived = REPEA TENAME;pClientSocket->Send(strReceived, strReceived.GetLength());}}else if( strMsgType == GETCLIENTIP){GetClientIP( strMsgInfo, pClientSocket );}else if( strMsgType == SENDCLIENTIP){SendClientIP( strMsgInfo, pClientSocket );}else if( strMsgType == LEA VESERVER ){ClientLeaveServer( strMsgInfo, pClientSocket);UpdateClients(buffer, nReceived, pClientSocket);}}//从服务器收到数据的处理void CGobangGameClientDlg::ReceiveMessageFromServer(){char buffer[BUFFER_SIZE];unsigned int nReceive = m_pClientSocket->Receive(buffer, BUFFER_SIZE);buffer[nReceive] = '\0';CString strReceived;strReceived.Format("%s", buffer);CString strMsgType = strReceived.Left( MSGTYPELENGTH );CString strMsgInfo = strReceived.Right( strReceived.GetLength() - MSGTYPELENGTH ) ;if( strMsgType == LOGINSERVER ){ClientLoginServer( strMsgInfo );}else if( strMsgType == GETCLIENTIP){GetClientIP( strMsgInfo );}else if( strMsgType == SENDCLIENTIP){SendClientIP( strMsgInfo );}else if( strMsgType == LEA VESERVER ){ClientLeaveServer( strMsgInfo );}else if( strMsgType == REPEA TNAME ){RepeatName();}}客户与客户采用UDP形式进行聊天,下棋客户与客户采用TCP连接指令及处理:#define SENDCHESSINFO "chess" // 发送下棋的棋子信息#define SENDCHATINFO "chati" //发送聊天信息#define SENDCHESSLOSS "closs" //发送给别人我赢得了游戏#define SENDLEA VE "leave" //发送离开游戏的消息#define CRYCRA VEN "ccven" //发送认输申请#define REPENTANCE "reptc" //发送悔棋申请#define AGREECRYCRA VEN "acven" //发送对方回复的认输申请#define AGRESSREPENTANCE "arept" //发送对方回复的悔棋申请#define MSGTYPELENGTH 5 //关键字长度enum { CHESSINFO, CHA TINFO, CHESSLOSS, LEA VECHESS, CRYCVN, REPTC, ACRYCVN, AREPTC };//棋子信息, 聊天信息, 别人赢得游戏, 离开游戏, 认输申请, 悔棋申请, 回复的认输申请, 回复的悔棋申请.发送信息给对手void CDlgGobang::SendMessageToOther(unsigned int nMsgType, CString strMsgInfo){switch( nMsgType ){case CHA TINFO:strMsgInfo = SENDCHATINFO + strMsgInfo;break;case CHESSINFO:strMsgInfo = SENDCHESSINFO + strMsgInfo;break;case CHESSLOSS:strMsgInfo = SENDCHESSLOSS + strMsgInfo;break;case LEA VECHESS:strMsgInfo = SENDLEA VE + strMsgInfo;break;case CRYCVN:strMsgInfo = CRYCRA VEN + strMsgInfo;break;case REPTC:strMsgInfo = REPENTANCE + strMsgInfo;break;case ACRYCVN:strMsgInfo = AGREECRYCRA VEN + strMsgInfo;break;case AREPTC:strMsgInfo = AGRESSREPENTANCE + strMsgInfo;break;default:break;}m_pChatSocket->SendTo( strMsgInfo, strMsgInfo.GetLength(), m_nOtherPort,m_strOtherIPAddress );}分析对方发过来的信息void CDlgGobang::ProcessPendingRead(CChatSocket* pChatSocket){//定义缓冲区char buffer[BUFFER_SIZE];//接收数据int nReceived = pChatSocket->Receive(buffer,BUFFER_SIZE,0);buffer[nReceived] = 0;CString strReceived;strReceived.Format("%s", buffer);CString strMsgType = strReceived.Left( MSGTYPELENGTH );CString strMsgInfo = strReceived.Right( strReceived.GetLength() - MSGTYPELENGTH ) ;if( strMsgType == SENDCHATINFO ){m_ctlChatInfoList.AddString( strMsgInfo );}else if( strMsgType == SENDCHESSINFO ){ProcessOtherChessInfo( strMsgInfo );}else if( strMsgType == SENDCHESSLOSS ){ProcessLoss();}else if( strMsgType == LEA VESERVER ){ProcessLeave();}else if( strMsgType == CRYCRA VEN ){ProcessCryCraven();}else if( strMsgType == REPENTANCE ){ProcessRepentance();}else if( strMsgType == AGREECRYCRA VEN ){ProcessAgreeCryCraven( strMsgInfo );}else if( strMsgType == AGRESSREPENTANCE ){ProcessAgreeRepentance( strMsgInfo );}}B、套接字使用方法TCP连接的套接字的使用(1).服务器端套接字的实现1.创建socket2.绑定3.监听4.接受连接5.发送和接受数据6.关闭(2)客户端套接字的实现1.创建socket2.连接到服务器3. 发送和接受数据4. 断开连接UDP连接的套接字的使用1.创建socket2.绑定3.发送和接受数据4.关闭C、棋盘和棋子的实现//绘制棋子和棋盘CPen* pSolidLinePen = new CPen(PS_SOLID, 2 , RGB(0, 0 , 0));CPen* pOldPen = dc.SelectObject( pSolidLinePen );//绘制棋盘unsigned int i = 0;unsigned int j = 0;unsigned int nIncreaseX = GAMEMAPDISTANCEX / ( m_nGameMapSize - 1 );unsigned int nIncreaseY = GAMEMAPDISTANCEY / ( m_nGameMapSize - 1 );//绘制横向棋盘线unsigned int nPointX = GAMEMAPBASEXPOINT;unsigned int nPointY = GAMEMAPBASEYPOINT;for( i = 0; i < m_nGameMapSize; i ++){dc.MoveTo( nPointX, nPointY );dc.LineTo( GAMEMAPMAXXPOINT, nPointY);nPointY += nIncreaseY;}//绘制纵向棋盘线nPointX = GAMEMAPBASEXPOINT;nPointY = GAMEMAPBASEYPOINT;for( i = 0; i < m_nGameMapSize; i ++ ){dc.MoveTo( nPointX, nPointY );dc.LineTo( nPointX, GAMEMAPMAXYPOINT );nPointX += nIncreaseX;}unsigned int nChessManSize = ( nIncreaseX < nIncreaseY nIncreaseX : nIncreaseY ) / 4; //棋子的半径//绘制对弈双方的棋子CPen* pSouthDashPen = new CPen( PS_DASH, 3 , RGB( 10, 200 , 200 ) );CPen* pNorthDashPen = new CPen( PS_DASH, 3, RGB( 140, 10, 10 ) );CBrush* pNorthBrush = new CBrush( RGB( 90, 90, 90 ) );CBrush* pSouthBrush = new CBrush( RGB( 240, 240, 244 ) );CBrush* pOldBrush = dc.SelectObject( pNorthBrush );for( i = 0; i < m_nGameMapSize; i ++){for( j = 0; j < m_nGameMapSize; j ++){nPointX = GAMEMAPBASEXPOINT + i * nIncreaseX;nPointY = GAMEMAPBASEYPOINT + j * nIncreaseY;if( m_nGobangGameMap[i][j] == OTHERCHESSMAN ){dc.SelectObject( pNorthDashPen );dc.SelectObject( pNorthBrush );dc.Ellipse( nPointX - nChessManSize, nPointY - nChessManSize, nPointX + nChessManSize, nPointY + nChessManSize );}else if( m_nGobangGameMap[i][j] == MYCHESSMAN ){dc.SelectObject( pSouthDashPen );dc.SelectObject( pSouthBrush );dc.Ellipse( nPointX - nChessManSize, nPointY - nChessManSize, nPointX + nChessManSize, nPointY + nChessManSize );}}}nPointX = GAMEMAPBASEXPOINT;nPointY = GAMEMAPMAXYPOINT + 20;dc.TextOut( nPointX, nPointY,"我的棋子");nPointX += 40;nPointY += 20;dc.SelectObject( pSouthDashPen );dc.SelectObject( pSouthBrush );dc.Ellipse( nPointX - nChessManSize, nPointY - nChessManSize, nPointX + nChessManSize, nPointY + nChessManSize );nPointX = GAMEMAPBASEXPOINT + GAMEMAPDISTANCEX / 2;nPointY = GAMEMAPMAXYPOINT + 20;dc.TextOut( nPointX, nPointY, "对手的棋子");nPointX += 40;nPointY += 20;dc.SelectObject( pNorthDashPen );dc.SelectObject( pNorthBrush );dc.Ellipse( nPointX - nChessManSize, nPointY - nChessManSize, nPointX + nChessManSize, nPointY + nChessManSize );dc.SelectObject( pOldPen );D、棋盘存储结构及胜负规则的判定棋盘存储结构:unsigned intm_nGobangGameMap[GAMEMAPMAXSIZE][GAMEMAPMAXSIZE]; //五子棋棋盘的棋子信息unsigned int m_nGameMapSize; //五子棋的实际大小//五子棋棋盘的状态分别为无棋子,我的棋子,对方的棋子#define NOCHESSMAN 0#define MYCHESSMAN 1#define OTHERCHESSMAN 2胜负规则的判定:五颗棋子连成一条线就为赢/************************************************************************版本: 1.0 开发时间: [2009/3/2] 作者: [鲁红辉] 评审人:功能: 判断是否赢得了游戏输入: 当前下的棋子x,y的位置输出: 是否赢得了游戏< 修改人> < 时间> < 版本> < 描述>************************************************************************/unsigned int CDlgGobang::WhichWinGobangGame(const unsigned int& x, const unsigned int& y){unsigned int nTempX = 0;unsigned int nTempY = 0;unsigned int nConnectionChessman = 0;//判断横向有没有连在一起的五子棋nTempX = x;nConnectionChessman = 0;for( nTempY = 0; nTempY < m_nGameMapSize; nTempY ++ ){//如果相连的棋子与剩下的棋子之和没有五个的话跳出循环if( m_nGameMapSize - nTempY + nConnectionChessman < 5){break;}if( m_nGobangGameMap[nTempX][nTempY] == MYCHESSMAN ){nConnectionChessman ++;if(nConnectionChessman >= 5){return MYWIN;}}else{nConnectionChessman = 0;}}//判断纵向有没有连在一起的五子棋nTempY = y;nConnectionChessman = 0;for( nTempX = 0; nTempX < m_nGameMapSize; nTempX ++){//如果相连的棋子与剩下的棋子之和没有五个的话跳出循环if( m_nGameMapSize - nTempX + nConnectionChessman < 5){break;}if( m_nGobangGameMap[nTempX][nTempY] == MYCHESSMAN ){nConnectionChessman ++;if(nConnectionChessman >= 5){return MYWIN;}}else{nConnectionChessman = 0;}}//判断撇斜向有没有连在一起的五子棋nConnectionChessman = 0;if( x + y <= m_nGameMapSize ){nTempX = x + y;nTempY = 0;for( nTempY = 0; nTempY <= nTempX; nTempY ++){//如果相连的棋子与剩下的棋子之和没有五个的话跳出循环if( nTempX - nTempY + 1 + nConnectionChessman < 5){break;}if( m_nGobangGameMap[nTempX - nTempY][nTempY] == MYCHESSMAN ){nConnectionChessman ++;if( nConnectionChessman >=5 ){return MYWIN;}}else{nConnectionChessman = 0;}}}else{nTempX = 0;nTempY = x + y;for( nTempX = 0; nTempX <= nTempY; nTempX ++){//如果相连的棋子与剩下的棋子之和没有五个的话跳出循环if( nTempY - nTempX + 1 + nConnectionChessman < 5){break;}if( m_nGobangGameMap[nTempX][nTempY - nTempX] == MYCHESSMAN ){nConnectionChessman ++;if(nConnectionChessman >=5 ){return MYWIN;}}else{nConnectionChessman = 0;}}}//判断捺斜向有没有连在一起的五子棋nConnectionChessman = 0;if( x >= y ){nTempX = x - y;nTempY = 0;for( ; nTempX < m_nGameMapSize; nTempX ++ ){if( m_nGameMapSize - nTempX + nConnectionChessman < 5){break;}if( m_nGobangGameMap[nTempX][nTempY] == MYCHESSMAN ){nConnectionChessman ++;if( nConnectionChessman >=5 ){return MYWIN;}}else{nConnectionChessman = 0;}nTempY ++;}}else{nTempX = 0;nTempY = y - x;for( ; nTempY < m_nGameMapSize; nTempY ++){if( m_nGameMapSize - nTempY + nConnectionChessman < 5 ){break;}if( m_nGobangGameMap[nTempX][nTempY] == MYCHESSMAN ){nConnectionChessman ++;if( nConnectionChessman >=5 ){return MYWIN;}}else{nConnectionChessman = 0;}nTempX ++;}}return NOONEWIN;}E、程序实现中定义的其他重要数据及意义、定义的函数或过程首部及意义服务器端的socketclass CListeningSocket : public CSocket //服务器监听客户的套接字class CClientSocket : public CSocket //服务器和客户会话的套接字,该套接字保存了客户的姓名,是否正在游戏中。
五子棋网络对战
数学与计算机学院实验一、五子棋网络对战和聊天—聊天模块实验报告年级08级学号2008482012 姓名o8网络2 成绩专业网络工程实验地点C1—228 指导教师常卓实验项目五子棋网络对战和聊天—聊天实验日期2011年4月20号实验报告要求:一、实验目的二、实验原理三、实验要求四、实验步骤、结果(程序+注释+截图)及分析五、实验遇到的困难及解决六、实验心得总结五子棋网络对战和聊天聊天模块聊天聊天模块1、实验目的:掌握网络连接的主要过程和方法以及网络连接时一些控件的使用方法和属性设置。
2、实验原理:2.1 流程图(聊天-聊天模块)↓↓2.2模块界面:3、实验要求:网络五子棋游戏基于P2P(Peer to Peer,端对端)的网络连接,不需要服务器。
游戏规则如下:1、请求连接的一方在游戏中执白,后手;被请求一方在游戏中执黑,先手;2、先在棋盘上行、列或者对角线上连续放置五个棋子一方获胜。
主要实现游戏双方的网络通信;实现游戏双方棋子在棋盘的摆放;在游戏的同时可以播放背景音乐。
4、实验步骤、结果(程序+注释+截图)及分析:4.1模块代码:4.1.1主界面代码:Private Sub About_Click()Load Form3Form3.ShowEnd Sub' Download by Private Sub Com1_Click(Index As Integer)Select Case IndexCase 0Label3.Caption = Combo1.TextSend "5" + Combo1.TextCase 1Combo1.Text = ""Case 2 '开始新局Send "3"ResetGame '如果本机主机的话,pic图片有效,可以下子否则无效If Server = 1 Then Pic1.Enabled = True Else Pic1.Enabled = FalseCase 3 ' 重新联机If Label2.Caption = "连线中" ThenSend "4"DoEventsEnd IfWinsock1.CloseLabel2.Caption = "尚未连线"Load Form2 '加载联机欢迎窗体Form2.ShowCase 4 '断开连接并结束运行If Label2.Caption = "连线中" ThenSend "4"DoEventsEnd IfWinsock1.CloseEndEnd SelectEnd SubPrivate Sub Form_Load() '打开D盘net5.txtOpen "D:\net5.txt" For Input As #1 'DoInput #1, GdataCombo1.AddItem Gdata '在Combo1控件中添加数据If EOF(1) Then Close #1: Exit Sub '如果超出文件尾,则关闭文件LoopEnd SubPrivate Sub Form_Unload(Cancel As Integer)If Label2.Caption = "连线中" ThenSend "4"DoEventsEnd IfWinsock1.CloseEndEnd SubPrivate Sub Music_Click()If Form1.Music.Checked = False ThenForm1.Music.Checked = TruemciExecute ("Play D:\a.MP3")Else:Form1.Music.Checked = FalsemciExecute ("Stop D:\a.MP3")End IfEnd SubPrivate Sub Pic1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) '棋盘鼠标事件If Button = 1 Then '将屏幕坐标转换为棋盘坐标sx = Fix(X / 21) + 1: sy = Fix(Y / 20) + 1If map(sx, sy) <> 0 Then Exit SubCall sndPlaySound("put.wav", 0)map(sx, sy) = ServerDrawScreena = GameOver(Server)If a = Server ThenImage1(0).Visible = TrueWin(Server) = Win(Server) + 1If Server = 1 Then Lost(2) = Lost(2) + 1 Else Lost(1) = Lost(1) + 1bel1(2).Caption = "战绩:" + Str(Win(1)) + "胜" + Str(Lost(1)) + "败"bel1(4).Caption = "战绩:" + Str(Win(2)) + "胜" + Str(Lost(2)) + "败" End IfSend "1" + Chr(sx) + Chr(sy)Pic1.Enabled = FalseEnd IfEnd SubPrivate Sub Quit_Click()If Label2.Caption = "连接中" ThenSend "4"DoEventsEnd IfWinsock1.CloseEndEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> sckClosed Then Winsock1.CloseWinsock1.Accept requestIDLabel2.Caption = "连线中"OpenComPic1.Enabled = TrueEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)GetMyData bytesTotalEnd SubPrivate Sub Winsock1_Connect()Label2.Caption = "连线中"Send "2" + Label1(3).CaptionOpenComEnd Sub4.1.2设置代码:' Download by Private Sub Command1_Click()If Server = 1 Then '自己作为主机的时候,添加玩家一的信息,使用黑子Form1.Winsock1.LocalPort = 5238 'LocalPort:返回或者设置所用到的本端口Form1.Winsock1.Listen '用于服务器程序,等待客户访问bel1(1).Caption = "黑子:" + Text1.Textbel1(3).Caption = ""bel2.Caption = "等待加入中"Else '自己作为联机,添加玩家二的信息,使用白子Form1.Winsock1.RemoteHost = Text2.TextForm1.Winsock1.RemotePort = 5238Form1.Winsock1.LocalPort = 0 '如果指定的是端口0,就使用一个随机端口Form1.Winsock1.Connect '用于向远程主机发出连接请求bel1(1).Caption = ""bel1(3).Caption = "白子:" + Text1.Textbel2.Caption = "正在连线到主机"End Ifbel1(2).Caption = "战绩:" + Str(Win(1)) + "胜" + Str(Lost(1)) + "败"bel1(4).Caption = "战绩:" + Str(Win(2)) + "胜" + Str(Lost(2)) + "败"Form1.ShowForm1.Pic1.Enabled = FalseForm1.Enabled = TrueForm2.HideUnload Form2ResetGameEnd SubPrivate Sub Command2_Click()EndEnd SubPrivate Sub Form_Load()Form1.Enabled = FalseCloseComText2.Text = Form1.Winsock1.LocalIPServer = 1Win(1) = 0Win(2) = 0Lost(1) = 0Lost(2) = 0End SubPrivate Sub Frame1_DragDrop(Source As Control, X As Single, Y As Single)End SubPrivate Sub Option1_Click()Label3.Caption = "你的主机IP"Text2.Text = Form1.Winsock1.LocalIPServer = 1 '本机作为主机即server=1 End SubPrivate Sub Option2_Click()Label3.Caption = "连线主机IP"Text2.Text = "0.0.0.0"Server = 2 '本机作为联机即server=2End Sub4.2截图:4.2.1主界面截图:4.2.2设置截图:5、实验遇到的困难及解决:在实验过程中,由于对端对端聊天的连接过程了解不够详细造成在其他过程完成之后在计算机连接的时候,连接失败,通过和同学探讨以及查询资料使端对端聊天的所有过程全部实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
局域网五子棋网络课
程设计报告
Revised on November 25, 2020
辽宁科技大学
课程设计说明书
设计题目:局域网五子棋设计
学院、系:计算机科学与工程学院
专业班级:计试点2005
学生姓名:王红辉
指导教师:周传胜
成绩:
2009年3月5日
目录
一题目――――――――――――――――――――――――――――――1 二设计的任务、目的和作用―――――――――――――――――――――1 三课程设计的内容―――――――――――――――――――――――――1 四开发环境及实现所用语言―――――――――――――――――――――1 五实现要点――――――――――――――――――――――――――――1
A 数据通信指令(协议)及各指令的处理内容―――――――――――1
B 套接字使用方法―――――――――――――――――――――――5
1.服务器端套接字的实现―――――――――――――――――――5
2.客户端套接字的实现――――――――――――――――――――6 C棋盘及棋子画法―――――――――――――――――――――――6 D棋盘存储结构及胜负判定算法―――――――――――――――――8 E程序实现中定义的其他重要数据及意义、定义的函数或过程首部及意义――――――――――――――――――――――――――――――12 六设计体会―――――――――――――――――――――――――――-13
一、题目
计算机网络课程设计―――局域网五子棋的实现
二、设计的任务、目的和作用
计算机网络课程设计是计算机网络原理课程之后的时间加强环节,通过本设计的训练使学生加深对网络协议的理解,并实现制定通信规则,同时通过实践,进一步掌握套接字编程方法,为大型网络编程打下坚实基础。
三、课程设计的内容
五子棋的局域网对战
四、开发环境及实现所用语言
开发环境:Microsoft Visual C++
语言: C++
五、实现要点
A、数据通信指令(协议)及各指令的处理内容
客户与服务器采用TCP连接指令及处理:
#define LOGINSERVER "login" 发送信息给对手
void CDlgGobang::SendMessageToOther(unsigned int nMsgType, CString strMsgInfo)
{
switch( nMsgType )
{
case CHATINFO:strMsgInfo = SENDCHA TINFO + strMsgInfo;break;
case CHESSINFO:strMsgInfo = SENDCHESSINFO + strMsgInfo;break;
case CHESSLOSS:strMsgInfo = SENDCHESSLOSS + strMsgInfo;break;
case LEA VECHESS:strMsgInfo = SENDLEA VE + strMsgInfo;break;
case CRYCVN:strMsgInfo = CRYCRA VEN + strMsgInfo;break;
case REPTC:strMsgInfo = REPENTANCE + strMsgInfo;break;
case ACRYCVN:strMsgInfo = AGREECRYCRA VEN + strMsgInfo;break;
case AREPTC:strMsgInfo = AGRESSREPENTANCE + strMsgInfo;break;
default:break;
}
m_pChatSocket->SendTo( strMsgInfo, (), m_nOtherPort, m_strOtherIPAddress );
}
分析对方发过来的信息
void CDlgGobang::ProcessPendingRead(CChatSocket* pChatSocket)
{
务器端套接字的实现
1.创建socket
2.绑定
3.监听
4.接受连接
5.发送和接受数据
6.关闭
(2)客户端套接字的实现
1.创建socket
2.连接到服务器
3. 发送和接受数据
4. 断开连接
UDP连接的套接字的使用
1.创建socket
2.绑定
3.发送和接受数据
4.关闭
B、棋盘和棋子的实现
2009/3/2则不发送
CString GetMyIP();程序用CPtrList m_listGobangGameChessInfo来保存对弈双方下棋每一步的信息,以便进行悔棋使用,程序可以一次悔多步棋。
客户离开以后通知服务器已经来,并删除对应的套接字,并通知所有其他的在线的用户更新用户列表。