欢迎来到天天文库
浏览记录
ID:57897367
大小:248.00 KB
页数:9页
时间:2020-04-02
《井子游戏解题报告(B).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告(2011/2012学年第1学期)课程名称Windows高级软件开发实验名称井子游戏实验时间2012年12月12日指导单位计算机学院软件工程系指导教师王子元学生姓名高阳阳班级学号B11040723学院(系)计算机学院专业软件工程一、实验名称:井子游戏二、实验要求:练习相应鼠标消息,练习鼠标的绘制,谁先连成三个在一条直线上谁就算赢.三、实验目的:通过此次试验,可以让同学们更深入的了解windows的内部机制,熟悉API函数的应用,鼠标响应的机制等。四、实验环境(设备)安装有VC6.0或VC2008版本的PC机。五、概
2、要设计在这里,我主要以文字语言叙述我的整体的思路,在详细的代码设计里,我会给出自己具体是怎样实现操作的。题目要求实现一个简单的井子游戏,主要是熟悉鼠标响应的操作。首先,我需要绘制基本的棋盘及棋子,借鉴QQ小游戏的五子棋的棋盘模式,我以咖啡色为背景色,并以黑色细线绘制棋盘的九个格子,同时,我利用黑色画刷和白色画刷,分别绘制了代表黑方的黑棋和代表白方的白棋。而在基本的棋盘和棋子设计思路完成后,就是具体的功能的实现。在我们熟知的基本的棋类操作及功能中,主要的操作有:游戏开始的操作,悔棋操作,认输操作,重新开始的操作。主要的功能有
3、每次游戏结束后相应的游戏进行的时间的显示。为了实现相应的操作及显示时间的功能,我利用绘图工具绘制了分别写有“重新开始”“认输”“悔棋”“开始”“时间”的bmp图片,并通过相应函数加载到窗口中,再通过鼠标相应,实现相应的功能。同时,我也利用资源文件,实现了“新游戏”“说明”“游戏指导”等基本的菜单功能。六、详细设计1、首先是对窗口显示区域中棋盘及相应按钮的基本的绘制。在这里我利用GetSystemMetrics(SM_CXSCREEN)函数和GetSystemMetrics(SM_CYSCREEN)分别获取电脑屏幕的宽度和高
4、度并将值分别赋给变量xSize,ySize,在利用CreatWindow()函数创建窗口时,我将窗口的起点坐标的x,y值分别赋值为(xSize-400)/2,(ySize-400)/2,并将窗口的宽度和高度分别设为600,400.同时在窗口风格上,我将窗口风格设置为WS_OVERLAPPED
5、WS_CAPTION
6、WS_SYSMENU
7、WS_MINIMIZEBOX。这样就使得每一次运行时,窗口都能显示在屏幕的中央,并且防止了因窗口最大化而造成的棋盘的不美观。而为了绘制棋盘,我设置了变量DIVISIONS,并利用宏定义将其值
8、定义为3,在每次绘制棋盘前,我通过在WM_SIZE消息响应中利用变量cxBlock=LOWORD(lParam)/(DIVISIONS+1)获得棋盘中每个格子的宽度,cyBlock=HIWORD(lParam)/DIVISIONS获得棋盘中每个格子的高度。在每次利用WM_PAINT绘制棋盘时,我通过两层循环利用Rectangle()函数绘制棋盘。Rectangle()函数是基本API函数,用来进行矩形的绘制。其第一个参数是当前设备语柄,其后四个参数被别为其绘制的矩形的左上角的x,y坐标和右下角的x,y坐标。2,、然后是按钮
9、的显示。为了使界面看起来更加友好和人性化,同时也是避免因过多的按钮控键的利用而增加不必要的代码量,我选择了利用加载图片和鼠标点击相结合的功能实现模式。我定义了hdc类型的数组hMemDC[5],BITMAP类型的数组bitmap[5]以及HBITMAP类型的数组hBitmap[5],分别用于获得内存设备语柄,载入位图和将位图选入目标设备。3、菜单的显示。菜单的显示相对比较简单,我是通过在资源文件里编写菜单部分的代码,并通过在WNDCLASS窗口类的对象中定义wndclass.lpszMenuName=L"MENU"实现将M
10、ENU作为窗口的缺省菜单。4、图标的绘制及显示在图标的绘制中,我利用了VC6.0自带的功能。在菜单栏中点击插入选项,然后在下拉菜单中点击资源,出现如下图所示的窗口。双击Icon即可进行图标的绘制。图标绘制好后,我在WNDCLASS窗口类的对象中通过wndclass.hIcon=LoadIcon(wndclass.hInstance,MAKEINTRESOURCE(IDI_ICON1));加载图标。这样,基本的窗口显示就实现了。运行程序一个还没有实现功能的友好界面就出现了。如图:然后就是具体功能的实现了。为了实现具体的功能,
11、有几个重要的变量在这里强调一下。boolHuiqi=false;//判断是否进行悔棋操作,初始化为false;boolStart=false;//判断是否开始游戏intsecond=0;//记录游戏运行时间intWW=0,WW1=0,WW2=0;//分别记录赢家,悔棋过度的一方,一用来判断施行哪一个对话
此文档下载收益归作者所有