文档详情

五子棋高级程序设计.doc

发布:2017-07-04约2.27万字共18页下载文档
文本预览下载声明
高级程序设计工作总结 -------五子棋篇 用到的技术: GDI+技术,socket网络通讯技术,异常处理技术,线程技术,axMediaPlayer技术等。 整体的思想: 定义Draw方法画棋盘 定义Mouse方法画棋子 定义Check二维数组储存数据 采用Tcp通讯方式传输数据 运用两个线程分开处理数据的传输和接收 制作Mediaplayer插件 程序概述: 五子棋部分: 网上成型的五子棋程序很多,我们通过学习网上五子棋的代码,了解到一些五子棋编写的基本思想,最终决定采用GDI+技术,定义Mouse和Draw两个方法,分别用来画棋子和画棋盘,同时定义二维数组Check记录棋盘上的棋子位置及其颜色。 网络连接部分: 考虑到五子棋本身的特性,本程序应该为两台电脑进行点对点的传输数据,要求数据的安全性比较高,且只能接受指定对象的数据,因此我们决定采用TCP方式传输和接收数据。 关于话语权: 在进行点对点的五子棋对战时,只能是一人走一步棋的,因此,本程序涉及到话语权的问题,在本程序中,定义了两个bool类型变量,作为“门”的形式控制程序的是否可以传输和是否可以走下一步棋子。 界面美化部分: 考虑到C#中界面过于单调的问题,我们在界面美化中改变了背景的颜色,适当调整了窗体的形状;考虑到娱乐因素,我们在网上查询了代码,采用了axMediaPlayer插件,实现了再下棋的同时可以播放MP3,增加了程序的娱乐效果。 程序制作过程、所遇困难及其解决方式: 五子棋部分 在GDI+技术中,必须先实例化一块画布,因此必须在Draw和Mouse方法中可以调用到当前的Form1,因此,我们将这两个方法设定为非静态方法,这样就可以用this来调用到当前的Form1。 Draw方法在程序界面加载时触发,使用form的paint事件,在程序界面上间隔固定长度取点,将相应的两个点进行连接,用pen画出粗细为4的直线,形成网格,画出棋盘。 Mouse方法由鼠标单击触发,首先记录下鼠标单击的位置,再根据单击的位置计算出该棋子所在的格子,在方格内部画圆并用solid brush填充黑色或者白色,同时修改Check相应位置的值,设定白子为1,黑子为2。 Mouse方法在画出棋子的同时,还需要进行逻辑判断,需要对棋子的横向、纵向、左斜、右斜4个方向的棋子进行判断,用for循环语句在Check数组里以该棋子为原点4个方向上的数据,采用if语句判断是否有超过连续5个元素的值相同,如果满足判断,判定为该颜色方获胜。 网络连接部分 建立TCP连接时,书本上建立TCP连接主要采用DNS类通过对方IP地址获取计算机名,但实际操作中,计算机教研室的局域网内计算机不能采用此方式获取计算机名,因此,在本程序中采用了TCP连接中的connect方法进行连接,建立与远程计算机的数据传输通道。 在实际生活中,不可能存在一边必须先开程序作为服务器端的情况,因此,我们再本程序中采用了两个线程,线程1为服务器端代码,随程序启动线程启动,开始聆听;线程2为客户机端代码,需要输入目标主机IP地址后点击按钮线程启动,主动连接远程主机,这样就不存在固定的服务器端的情况,使程序更加合理。 数据传输方面,通过在Mouse方法中记录下点的位置,加入“*”作为分隔符,组装成“点横坐标*点纵坐标*颜色数字”的一个字符串,通过网络流的读写,将数据传输到远程计算机。在远程计算机上再进行拆分,用Mouse方法进行画棋子。 话语权 在网络传输过程中,由于采用了while(true)的死循环传输和接收数据,如果不加以限制,一直传输的数据会很快把远程计算机用来储存的数组填满,造成程序报错。因此,我们定义了一个bool类型的变量talking,在鼠标单击、Mouse方法完成后,将talking的值由false修改为true,开始传输数据,再在传输完成后将talking的值改回false,通道中不再传输数据,talking起到开关数据传输的作用。 为了能使在下棋的两个人能做到一人只能走一步棋,我们在程序中定义了一个bool类型的变量right,在鼠标单击、Mouse方法完成后,该电脑上不能下棋,right的值由true修改成false,再用鼠标单击则不能触发Mouse方法,即不能再棋盘上画棋子;当接收到数据时,线程里调用完Mouse方法将对方的棋子画在棋盘上后,将right的值修改成true,本机上就再次可以通过鼠标单击事件触发Mouse方法。通过这种方式,完成对话语权的制作。 界面美化 在音乐播放器方面,由于直接使用程序代码来实现音乐播放功能比较复杂,而且实现过程中多次出现错误,因此我们采用了axMediaP
显示全部
相似文档