《C++程序设计课程设计实验报告—网络五子棋.doc》由会员分享,可在线阅读,更多相关《C++程序设计课程设计实验报告—网络五子棋.doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机学院实验报告课程名称: C+程序设计课程设计 开课学期: 20102011学年第2学期 院 班: 计算机学院 093 指导老师: 项目题目: 网络五子棋 学生姓名(学号): 提交时间: 一、实验目的.二、实验内容编写程序具有如下功能(写明分工):.三、游戏描述 本游戏用C+语言编写,运行环境为Visual 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、员变量有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_DRAW_
3、GAME_MENU Messages; COMMANDMember function Name;OnDrawGameMenu2、 我们开始实现函数;a) 首先我们实现退出函数;退出函数比较简单,我们只要调用基类的CDialog:OnCancel()函数就可以实现退出函数的功能b) 新游戏菜单OnNewGameMenu的实现我们需要首先调用 设置对话框void CFiveChessDlg:OnNewGameMenu()if(IDOK=m_setup_dlg.DoModal()/在这里而我们暂且把这个对话框命名为本类的一个子对象,当他的模式弹出对话框Restart();/NewGameStart(
4、m_setup_dlg. m_isHost);/ 当他点击确定以后,我们就可以调用NewGameStart这个游戏开始接口函数,这个m_isHost是CSetupDlg中的一个成员变量,他描述了本次主机还是客户机差别,调用这个函数后就可以开始新游戏同样和棋OnDrawGameMenu我们也需要游戏提供一个接口,这个时候我们可以在菜单中调用这个和棋函数void CFiveChessDlg:OnDrawGameMenu()DrawGame();好完成了菜单的设计3、 接下来是网络设置对话框的设计a) 我们在资源视图中的Dialog中右键单击InsertDialog加入一个对话框ID:IDD_SET
5、UP_DLGCaption:网络设置双击这个对话框上的OK按钮,这里是给这个对话框建一个类CSetupDlg网络设置O主机类型选择O客户机IDC_HOST_OPTION IDC_CLIENT_OPTIONIP地址:IDC_IP_ADDRESS_EDIT端口号:IDC_NET_PORT_EDIT| 确 定 |取 消|然后我们给这两个对象建立两个相关的变量Member number name:Category:Variable type:IDC_ID_ADDRESS_EDITControlCIPAddressCtrlMember number name:Category:Variable type
6、:IDC_NET_PORT_EDITUNITm_net_portMinimum:1Maximum:65530现在来实现他的类首先要实现他其中的ok函数和cancel函数FiveChess.cppObject IDs:Messages:FiveChess.rcIDCANCELBN_CLICKEDFiveChessDlg.cppIDOKBN_CLICKED-|SetupDlg.cpp |-StdAfx.cpp在点击了ok按钮以后就需要把IP地址的端口号记录下来,那么我们就需要定义一个CString类的一个IP地址和Port;void CSetupDlg:OnCancel() CDialog:OnC
7、ancel();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.cp
8、p中的初始化函数中CSetupDlg:CSetupDlg(CWnd* pParent /*=NULL*/): CDialog(CSetupDlg:IDD, pParent)/AFX_DATA_INIT(CSetupDlg)m_net_port = 0;m_is_Host = FALSE;/AFX_DATA_INIT)WritePrivateProfileString(HOST, PORT, strPort, .config.ini);/然后我们先判断是否是主机,如果是那么我们就把相应的数据写入到配置文件中,他的HOST碟的PORT端口的里面,当前目录下的.config.iniElse/否则我们
9、认为他是客户机WritePrivateProfileString(CLIENT, IP, strIP, .config.ini);WritePrivateProfileString(CLIENT, PORT, strPort, .config.ini);/然后把PORT端口号也写入,然后返回CDialog:OnOK();这里要注意我们写的配置文件是怎么样的呢,这里我们可以先写一下配置文件,来定义一下HOSTPORT = 10000CLIEVTIP = 127.0.0.1/就是默认的本机地址PORT = 10000然后保存在当地文件夹下的bin文件夹中命名为config.ini浩,有了这个配置文
10、件后,我们就可以操作了,就可以写入了又因为if(m_ip_Host)如何知道用户点击了Host?这时候我们可以使用类向导,把另外两个控件给选出来Objects IDs:Messageses:Addfunction:IDC_CLIENT_OPTIONBN_CLICKEDOnClientOptionIDC_HOST_OPTIONBN_CLICKEDOnHostOptionvoid CSetupDlg:OnClientOption() /当用户选择CLIENT的时候,也就是客户机/char str128 = 0;/将用户的选择写进m_ip_addr.EnableWindow(TRUE);/因为选择主
11、机的时候我们可以这样考虑,它选择主机的时候因为不需要输入IP地址,他就是本机的IP地址,而输入客户机的时候只需要数IP 这时候我们为了方便,就把在输入选择用户的时候把IP地址输入框激活,而选择主机的时候,不让它激活,他就没有办法输入IP地址,默认的就是本机IP地址GetPrivateProfileString(CLIENT, IP, , str, 127, .config.ini);/然后读取配置文件,可以调用这个API函数,这是默认的 就是空”,就是没读到,然后把它读到str里面,它的最大文件是127,把它读到,m_ip_addr.SetWindowText(str);/获得以后把这个数据给
12、设进去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 str128 = 0;/而当用户点击了主机的时候,首先也是一样,定义数组来用来
13、存储我们后面读到的端口号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)
14、;m_isHost = TRUE;/设置为TRUEUpdateData(FALSE);/更新数据这个时候请注意,这些都只是按键的响应,但是在初始化对话框的时候还差缺少一个东西,因为调用对话框的时候,他就会进行初始化,我们去把.数据读出来,那么怎么办呢,这时候我们就需要调用一个初始化函数CSetupWM_INITDIALOGADD Function选择初始化消息添加方法编辑这时候我们就默认设置连接的是主机BOOL CSetupDlg:OnInitDialog() CDialog:OnInitDialog();/指定对话框是否对它的一个控件设置输入焦点。如果OnInitDialog返回非零值,Wi
15、ndows将输入焦点设在对话框的第一个控件上,只有在对话框明确将输入焦点设在某控件上,应用返回0。 说明 调用这个成员函数是对WM_INITDIALOG消息作出的反应。这条消息是在对话框即将显示之前,在Create,CreateIndirect或DoModal调用期间发出的。 如果在对话框初始化后需要执行特别处理,覆盖该函数。首先调用基类OnInitDialog,但不考虑其返回值。正常情况下,覆盖的函数返回TRUE。Windows调用OnInitDialog函数是通过标准的全局对话框过程(它们对于所有的Microsoft基础类库的对话框是通用的),而不是通过消息映射。因此该函数不需要消息映射入口(CButton*)GetDlgItem(IDC_HOST_OPTION)-SetCheck(1);OnHostOption();return TRUE;这样我们就把配置文件做好了在初始化的时候,他就会先把OPTION作为首先菜单 首先按键,同时执行OPTION的相关设置, 叫 菜单和对话框基本设置完毕四、程序结构五、程序技巧1、六、程序清单(另附)七、调试实例1、 输入数据如下:. 2、 运行程序后输出结果如下:. 3、 结果分析八、体会九、教师评语
限制150内