ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:19.43KB ,
资源ID:13264372      下载积分:6 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13264372.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c五子棋实验报告doc.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

c五子棋实验报告doc.docx

1、c五子棋实验报告docc五子棋实验报告篇一:五子棋对战实验报告实验项目 五子棋网络对战和聊天 实验日期XX0406实验报告要求:一、 实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。1、然后考虑使用java的swing包,创建ClientChessPanel

2、类负责棋盘部分,包括判断输赢,使用数组chessesij记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。importjavax.swing.*;importjava.awt.*;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanelprivate static fin

3、al long serialVersionUID = 1L;private int space=20; /网格间的距离private int grids=30; /棋盘的网格数private int radius=space/2; /棋的半径Clientsktskt;/当chessesij=0,表示网格节点(i,j)上无棋/当chessesij=1,表示网格节点(i,j)上放白棋/当chessesij=2,表示网格节点(i,j)上放黑棋privateint chesses=new intgrids+1grids+1;private intcurrColor=1; /当前棋的颜色 private

4、MouseListenerplayChessHandler=new MouseAdapter() public void mouseClicked(MouseEvent e)if(skt.reMouseGo()int x=e.getX();int y=e.getY();/放一颗棋子if(x=0 & y=0)if(chessesround(x)round(y)=0)chessesround(x)round(y)=currColor;repaint(); /刷新图形skt.dataout(x:+String.valueOf(round(x);skt.dataout(y:+String.valueO

5、f(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=g

6、rids;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;ifor(int j=0;jchessesij=0;/画一颗棋子private vo

7、id 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;ig.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,gri

8、ds*space);/接收对方下的棋坐标public void paintChess(intx,int y)if(x=0 & y=0)if(chessesxy=0)chessesxy=currColor;currColor=currColor=1?2:1; /切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true); repaint(); /刷新图形 /判断游戏是否结束publicbooleangameOver(intgameOver)int five=0;/用于判断是否有连续5个子for(inti=0;ifor(int j=0;jif(chesses

9、ij=gameOver)five+;for(in(本文来自: 小草 范文 网:c五子棋实验报告)t k=1;kif(chessesij+k=gameOver)five+;if(five=5)return true;elsefive=1;k=5;for(int k=1;kif(chessesi+kj=gameOver)five+;if(five=5)return true;elsefive=1;k=5;for(int k=1;kif(chessesi+kj+k=gameOver)five+;if(five=5)return true;elsefive=1;k=5;for(int k=1;k4;k

10、+)/左斜向比较if(chessesi+kj-k=gameOver)five+;if(five=5)return true;elsefive=1;k=5;five=0;return false;public void paintComponent(Graphics g) /覆盖paintComponent()方法super.paintComponent(g); /必须先调用父类的方法drawGrids(g); /画网格for(inti=0;ifor(int j=0;jif(chessesij!=0)drawChess(g,i,j,chessesij); /画棋子 2、ClientCompone

11、ntPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。 importjava.awt.*;importjavax.swing.*; public class ClientComponentPopupMenu extends JPopupMenu implements MouseListener,ActionListener private static final long serialVersionUID = 1L; public static ClientComponentPopupMenusharedIn

12、stance = null; public static void installToComponent(JTextComponent c) if(c instanceofJTextArea& !(c instanceofJPasswordField)c.addMouseListener(ClientComponentPopupMenu.getSharedInstance();else if(c instanceofJTextField& !(c instanceofJPasswordField)c.addMouseListener(ClientComponentPopupMenu.getSh

13、aredInstance(); public static void uninstallFromComponent(JTextComponent c) if(c instanceofJTextArea& !(c instanceofJPasswordField)c.removeMouseListener(getSharedInstance();else if(c instanceofJTextField& !(c instanceofJPasswordField)c.removeMouseListener(getSharedInstance(); JMenuItemcutItem,copyIt

14、em,pasteItem,deleteItem,selectAllItem,printItem; /构造器篇二:五子棋课程设计实验报告 西南交通大学 程序语言综合课程设计五子棋游戏 课 程 程序语言综合课程设计 学 院 信息科学与技术学 专 业 软件工程姓 名学 号 XX9050日 期 XX年月日目录第一章 课程设计的目的和要求 . 31.1 课程设计的目的 . 31.2 课程设计的要求 . 31.3 课程设计的实验环境 . 3第二章 功能描述. 4第三章 总体设计. 53.1 功能模块设计 . 53.1.1 任务执行流程图 . 53.1.2 下棋函数流程图 . 63.2 数据结构设计 . 7

15、3.2.1 定义结构体 . 73.2.2 定义数组 . 73.2.3 全局变量 . 73.3 函数功能描述 . 7第四章 程序实现. 84.1源码分析. 84.2运行结果及界面介绍 . 22第五章 后记 . 27第一章 课程设计的目的和要求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。1.2 课程设计的要求1、编写程序代码,调

16、试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows XX以上系统中进行,程序设计要求在visual C+6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp 软件环境:安装VC+6.0第二章 功能描述本程序用C语言实现了五子棋游戏,能进行基本的

17、五子棋操作。程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和棋盘,默认玩家先行。(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。(5)悔棋功能。玩家可以有三次悔棋机会。(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存

18、档,则下次开始的时候会提示是否读档继续上次的游戏。第三章 总体设计3.1 功能模块设计3.1.1 任务执行流程图 篇三:五子棋源码实验报告及人机对战说明 1. 五子棋对战说明2. 实验报告3. 源代码五子棋作品特点:C语言程序 五子棋作品功能:五子棋人机对战,人人对战。 目录:1 五子棋介绍。 2 五子棋棋型介绍。3 人人对战的实现。4 电脑下子的实现。5 棋型价值的计算。6 胜利及棋型的判断。7 补充说明 1五子棋介绍。 五子棋是一种两人对弈的纯策略型棋类游戏。只要任意一方在棋盘上且同一个回合上连为五子为胜。还有禁手规则,在本程序中不作讨论。 2五子棋棋型介绍。本程序中的棋型均为本人自定义。

19、本程序总共设计35种棋型。表示玩家的棋子,表示电脑的棋子。以下称电脑方为己方,玩家方为对方。从一空点向某一方向判断该方向的棋型。某一方向指1-8方向 从右顺时针开始数。(1) 空棋型。从一空点向一方向看连续2个为空的棋型。空棋型共1种。如图,从左端的空点向右看会发现有连续2个空点。(2) 活棋型。2端无挡的棋型为活棋型。活棋型共8种:己方4种,对方4种。左图为 己活3 。从左端的空点向右看会发现己方有连续的3个子,且右端无挡。故该点的1方向为己活3。左图为 对活2(3) 冲棋型。1端无挡的棋型为冲棋型。冲棋型共9种:己方4种,对方4种,边界1种。左图为边界冲棋型。空点的右端为边界。或 左图为

20、己冲2。从左端的空点向右看会发现己方有连续的2个子,且右端有挡(此处有挡表示有对方的子或为边界)。故该点的1方向为己冲2。左图为 对冲4。(4) 空活棋型。从一空点向一方向看有1个空点,继续看有己方或对方的活棋型。空活棋型共8种:己方4种,对方4种。左图为 己空活2。从左端的空点向右看有1个空点,继续看会发现己方有连续的2个子,且右端无挡。故该点的1方向为己空活2。左图为 对空活1。(5) 空冲棋型。从一空点向一方向看有1个空点,继续看有己方或对方或边界冲棋型。空冲棋型共9种:己方4种,对方4种,边界1种。左图为边界空冲棋型。空点的右端为空点再右看为边界。或左图为 己空冲2。从左端的空点向右看

21、有1个空点,继续看会发现己方有连续的2个子,且右端有挡。故该点的1方向为己空冲2。3 人人对战的实现。双方玩家轮流下子,直到一方形成五连即判为胜方。下子时输入棋盘上显示的对应坐标。如果某方需要悔棋,则输入 15 15 即可。悔棋只能悔一步。在人机对战中亦可悔棋。 4 电脑下子的实现。 人机对战中电脑下子是通过AI(int *p,int *q)这个函数实现的。用p 、q返回下子的坐标。先历遍棋盘上所有点,如发现一个空点则调用函数value(int p,int q)计算该空点的价值。每个点又由8个方向的棋型组成。调用函数qixing(int n,int p,int q)判断空点p q在n方向上的棋

22、型号。对每种棋型进行赋值,然后对各个方向的棋型进行分析。最后计算出该空点的价值。如此找到棋盘上价值最大的空点,则电脑在该处下子。 5 棋型价值的计算。 棋型价值的计算是通过函数value(int p,int q)实现的。先调用函数qixing(int n,int p,int q) 判断空点p q在n方向上的棋型号。n为1-8方向 从右顺时针开始数。对8个方向的棋型进行分析后给出该点的价值。各种棋型的价值存在数组a244中。本程序将两相反方向的棋型进行合在一起进行分析。本程序分为六类进行讨论。 空棋型and其他。 边界冲棋型and其他。 边界空冲棋型and其他。 己活己活 己活己冲 对活对活 对

23、活对冲。 己活对活 己活对冲 己冲对活 己冲对冲。 其他棋型。6 胜利及棋型的判断。胜利及棋型的判断都调用了函数yiwei(int n,int *i,int *j)。在n方向上对坐标 i j 移位。 n为1-8方向 从右顺时针开始数。胜利的判断:每下一次子从该点向1方向移位,移位后判断新点是否与下的子相同。如相同则继续移位判断,否则转向判断即n+=4;如转向后仍然没五连,则换下一个方向判断即n-=3;直到出现五连则胜利,如果8个方向判断完都没有五连则返回0,表示还未胜利。 棋型的判断:棋型的判断主要运用switch语句。在某一方向移位后判断该点的状态。最后得出该方向上的棋型号。 7 补充说明1.在WIN7环境下用VC+运行棋盘之间有空隙,影响美观。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2