版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录TOC\o"1-5"\u第一章绪论 31.1课题背景 31.2开发目的 31.3开发意义 3第二章需求分析 32.1可行性研究 32.2需求分析 42.2.1功能需求 42.2.2环境需求 4第三章总体设计 43.1系统设计思想 43.2系统总体设计 53.3游戏截图 5第四章程序源代码 6第五章工作总结 18致谢 19参考文献 19摘要目前,以计算机技术和网络技术为核心的现代网络技术已在现实生活和生产中得以广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式。本程序是VC平台下的一个小程序,使用C++语言,基于MFC类库,所有的类均继承于MFC类库,通过对Socket技术理解,实现在局域网内客户端和服务器之间的连接,通信,以及处理信息字段来获取具体的信息类型和和内容,以实现程序的聊天内容,图形加载,主机连接,以及五子棋核心进程之间的通信。关键词:MFC,Socket,客户端,服务器第一章绪论1.1课题背景五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(FiveinaRow的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。1.2开发目的为了迎合广大五子棋爱好者的需求和交流,设计出一款基于网络版的五子棋游戏,玩家可以通过网络挑选自己喜爱的对手并同其进行比赛,比赛过程中可以进行聊天,达到相互交流经验的作用,使其不仅能够进行比赛,同时也能达到交友的功能。1.3开发意义五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。第二章需求分析2.1可行性研究在很早以前五子棋软件就已经被开发出来了,当时的五子棋软件仅提供了“人机模式”与“双人模式”。“人机模式”是指,人与计算机进行对弈,计算机按照事先编写好的算法程序来进行下棋;“双人模式”是指,两个人通过交替使用同一台计算机来进行下棋。无论是选择哪一种模式,所有的操作都必须在同一台计算机上来往完成,棋局无法在异地计算机之间来进行,故而也叫单机版五子棋软件。2.2需求分析2.2.1功能需求能通过网络进行下棋符合五子棋的基本规则提供水平坐标和垂直坐标功能2.2.2环境需求10/10Mbps共享式HUB一台装有Windows95/98/NT/XP操作系统的计算机两台计算机的CPU不低于PII450,内存不小于64M每台计算机都应配置有TCP/IP协议第三章总体设计3.1系统设计思想本系统的功能能够实现一个在网络上供客户进行对战的五子棋网络游戏,客户只要登陆到服务器上,就能选择任何其它用户已创建好的游戏,进行五子棋对战游戏,是C/S模式的网络游戏。在C/S模式游戏中,Server一般提供所有用户的全局信息,并能提供客户之间的信息转发,客户之间的通讯必须通过Server进行。因为在多个客户能够连接到同一台Server上,所以Server必须用Thread负责每个用户的通讯和消息处理。服务端程序通过一个Thread监听客户端的连接,一旦客户连接,为该客户建立连接并启动一个特定的客户thread,利用该连接不断从客户读取数据,实现客户和服务器或者客户与客户之间的信息的交互。3.2系统总体设计系统使用Socket技术以及VC多线程机制结合在进行客户与服务端之间信息的交互,但一个真正实用程序必须针对具体应用定制一套协议用于用户程序之间进行交互,而该协议的定制往往是编写程序的关键也是核心内容,该协议的完善决定程序是否能够正常运行。所谓协议就是程序之间交互的信息的格式规定,服务端和客户端都遵循该协议才能够进行对话,通俗讲是人类之间的语言。3.3游戏截图图1开始画面图2黑子赢了第四章程序源代码packagewuziqi1;importjava.applet.*;importjava.applet.Applet;importjava.awt.*;importjava.awt.Color;importjava.awt.event.*;publicclasswuziqiextendsAppletimplementsActionListener,MouseListener,MouseMotionListener,ItemListener{intcolor_Qizi=0;/////////////////////////////旗子的颜色标识0:白子1:黑子intgamestart=0;///////////////////////////////游戏开始标志0未开始1游戏中intgamebody[][]=newint[16][16];////设置棋盘棋子状态0无子1白子2黑子Buttonb1=newButton("游戏开始");Buttonb2=newButton("重置游戏");Buttonb3=newButton("退出游戏");LabellblWin=newLabel("");////////////////////状态标签CheckboxckbHB[]=newCheckbox[2];/////////////起始复选框CheckboxGroupckgHB=newCheckboxGroup();////////复选框组publicvoidinit(){resize(420,360);setLayout(null);addMouseListener(this);add(b1);b1.setBounds(330,100,70,30);b1.addActionListener(this);add(b2);b2.setBounds(330,140,70,30);b2.addActionListener(this);add(b3);b3.setBounds(330,180,70,30);b3.addActionListener(this);ckbHB[0]=newCheckbox("白子先",ckgHB,false);ckbHB[0].setBounds(330,30,70,30);ckbHB[1]=newCheckbox("黑子先",ckgHB,false);ckbHB[1].setBounds(330,60,70,30);add(ckbHB[0]);add(ckbHB[1]);ckbHB[0].addItemListener(this);ckbHB[1].addItemListener(this);add(lblWin);lblWin.setBounds(330,280,70,30);setBackground(Color.gray);setBounds(100,100,320,280);setVisible(true);start();}publicvoiditemStateChanged(ItemEvente){if(ckbHB[0].getState())////////////////////////判断黑子先还是白子先{color_Qizi=0;}else{color_Qizi=1;}}if(x1%20>10){x1+=20;}if(y1%20>10){y1+=20;}x1=x1/20*20;y1=y1/20*20;set_Qizi(x1,y1);}publicvoidmousePressed(MouseEvente){}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseReleased(MouseEvente){}publicvoidmouseDragged(MouseEvente){}publicvoidmouseMoved(MouseEvente){}publicvoidpaint(Graphicsg){qipan(g);}publicvoidset_Qizi(intx,inty)/////////////////////////////落子{if(gamestart==0)///////////////////////////////////判断游戏是否开始{return;}if(gamebody[x/20][y/20]!=0){return;}Graphicsg=getGraphics();if(color_Qizi==1)///////////////////////////////////判断黑子还是白子{g.setColor(Color.black);color_Qizi=0;}else{g.setColor(Color.white);color_Qizi=1;}g.fillOval(x-10,y-10,20,20);gamebody[x/20][y/20]=color_Qizi+1;if(Game_win_1(x/20,y/20))////////////////////////////////判断输赢1横向{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");gamestart=0;}if(Game_win_2(x/20,y/20))////////////////////////////////判断输赢2竖向{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");gamestart=0;}if(Game_win_3(x/20,y/20))////////////////////////////////判断输赢3左斜{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");gamestart=0;}if(Game_win_4(x/20,y/20))////////////////////////////////判断输赢4右斜{lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!");gamestart=0;}}publicStringGet_qizi_color(intx)///////////////////////返回棋子颜色{if(x==0){return"黑子";}else{return"白子";}}publicvoidqipan(GraphicsG)///////////////////////////画棋盘15*15{G.setColor(Color.gray);G.fill3DRect(10,10,300,300,true);G.setColor(Color.black);for(inti=1;i<16;i++){G.drawLine(20,20*i,300,20*i);G.drawLine(20*i,20,20*i,300);}}publicvoidGame_btn_enable(booleane)/////////////////设置组件初始状态{b1.setEnabled(e);b2.setEnabled(e);b3.setEnabled(e);ckbHB[0].setEnabled(e);ckbHB[1].setEnabled(e);}publicvoidstart()/////////////////////////////////////游戏开始初始化{gamestart=0;Game_btn_enable(true);b2.setEnabled(false);b3.setEnabled(false);ckbHB[0].setState(true);for(inti=0;i<16;i++){for(intj=0;j<16;j++){gamebody[i][j]=0;}}lblWin.setText("胜负状态");}publicvoidGame_start()/////////////////////////////////////游戏开始{gamestart=1;Game_btn_enable(false);b2.setEnabled(true);b3.setEnabled(true);}publicvoidGame_re()////////////////////////////////////游戏重新开始{repaint();start();repaint();start();}publicvoidGame_stop()//////////////////////////////////////退出游戏{ newMyFrame(); }classMyFrameextendsFrameimplementsActionListener{ Buttonb4,b5,b6; MyFrame() { super("MYWINDOWS"); b4=newButton("\"退出\"将被判为\"输\"是否继续游戏?"); setLayout(newFlowLayout()); add(b4); b4.addActionListener(this); setLayout(newFlowLayout()); b5=newButton("是"); add(b5); b5.addActionListener(this); setLayout(newFlowLayout()); b6=newButton("否"); add(b6); b6.addActionListener(this); addWindowListener(newcloseWin()); setSize(220,100); setVisible(true); } publicvoidactionPerformed(ActionEvente) { if(e.getActionCommand()=="关闭") { dispose(); } if(e.getSource()==b5) { dispose(); } elseif(e.getSource()==b6) { dispose(); lblWin.setText(Get_qizi_color(color_Qizi)+"赢了!"); } else { return; } }}classcloseWinextendsWindowAdapter{ publicvoidwindowClosing(WindowEvente) { Windoww=e.getWindow(); w.dispose(); }}publicbooleanGame_win_1(intx,inty)/////////////////////////判断输赢横{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_2(intx,inty)/////////////////////////判断输赢竖{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1][y1+i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1][y1-i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_3(intx,inty)////////////////////判断输赢左斜{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1-i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1+i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}else{returnfalse;}}publicbooleanGame_win_4(intx,inty)////////////////////判断输赢右斜{intx1,y1,t=1;x1=x;y1=y;for(inti=1;i<5;i++){if(x1>15){break;}if(gamebody[x1+i][y1+i]==gamebody[x][y]){t+=1;}else{break;}}for(inti=1;i<5;i++){if(x1<1){break;}if(gamebody[x1-i][y1-i]==gamebody[x][y]){t+=1;}else{break;}}if(t>4){returntrue;}e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗设备安全使用维护管理制度
- 梁板混凝土养护质量验收规范方案
- 跨域依赖链故障复盘方案文档
- 隐蔽工程验收实施细则
- 病理切片质量控制工作细则
- 2026年普通高等学校招生全国统一考试康德调研(五)数学+答案
- 大数据计算引擎容错策略说明书
- 医德医风考评实施细则
- 2026中考语文复习:小说阅读之叙述者 叙事时间 课件
- 2026年质量管理工作总结与计划(3篇)
- 法律顾问服务投标方案(完整技术标)
- 肿瘤化疗药物常见的不良反应及护理措施课件
- 新一代天气雷达观测与灾害预报
- 污水处理设备安全技术规范 编制说明
- DB37∕T 3487-2019 山东省钢质内河浮桥承压舟建造规
- 学位外语(本23春)形成性考核5试题答案
- 安师大环境学习题集及答案
- 人文地理学课件
- 城市规划原理 课件 10 城乡区域规划
- GB/T 38722-2020表面活性剂界面张力的测定拉起液膜法
- 公文写作培训-课件
评论
0/150
提交评论