WhoIsUndercover项目总结性文档
Who Is Undercover 项目总结性文档这个项目来源于一个叫做“谁是卧底”的社交游戏,使用过IOS 和安卓的版本,了解了作为一款应用应该实现哪些功能,因此选择作为学习Win32 API的练手
Who Is Undercover 项目总结性文档
这个项目来源于一个叫做“谁是卧底”的社交游戏,使用过IOS 和安卓的版本,了解了作为一款应用应该实现哪些功能,因此选择作为学习Win32 API的练手项目。
PS :之所以选择Win32 API而不是MFC 的原因是想要更清晰地了解一下GUI 编程的内部原理,由于MFC 基本上是封装好的,学习的目的达不到,因此选择学习Win32 API。
首先介绍一下这个游戏的游戏规则,以8或6人游戏为例:
1、在场8人中7人拿到同一词语,剩下1人拿到与之相关的另一词语。这时平民与卧底都不知道互相的身份,卧底也不知道自己是卧底。
2、每人用一句话描述自己拿到的词语,最好不要太过明显,既不能让卧底察觉,也要给同伴以暗示。
3、每轮描述完毕,所有在场的人投票选出怀疑的卧底人选,得票最多的人出局。若卧底出局,则游戏结束。若卧底未出局,游戏继续。如有两人得票相同,则进入PK ,大家再从两人中间投出一个。
4、若卧底撑到卧底人数与平民人数相同时,则卧底获胜,反之,则平民胜利。
根据这样的一种游戏规则,大概总结出了整个程序运行的过程应该是这样的:
/*程序运行->玩家选择游戏人数(主菜单)->开始游戏->每个玩家查看自己的词语->①按照顺序描述词语->投票选出出局人->判断游戏
,是否产生某方胜利->
卧底或平民胜利->结束当前游戏并回到主菜单
不存在某方胜利->返回①处*/
所以,根据上面的分析,该窗体程序的主窗口应该是主菜单,在菜单栏中选择开始游戏后,进入游戏画面(新的对话框),查看对应词语为第一次点击对应按钮,某人出局为第二次点选对话框内预先放置好的对应按钮,此时程序应该自动判断胜负,若某方胜利回到主菜单,无某方胜利则提示游戏继续。
一个新建好的win32项目,主要需要写的部分是消息处理函数WndProc 。
首先需要自定义主菜单,利用VS 的资源编辑器添加了菜单选项,得到图1.1。
图1.1
其中4人、5人、6人选项分别定义ID 为IDM_4PLAYER、IDM_5PLAYER、IDM_6PLAYER,并放置到WndProc 的WM_COMMAND情形下,如图1.2所示。

图1.2
CheckWord 数组用于判断是否是第一次点击按钮,值为1为第一次,undercoverNumber4和normalNumber4分别表示卧底和平民人数。图1.2中的MessageBox 为温馨提示(只能看自己的词,不要偷看其他人的,点一次就能看0.0)。
游戏界面采用对话框形式,利用图1.2中的DialogBox 调用4人游戏的游戏界面,其中,Game4为该对话框对应的对话框过程,利用资源编辑器绘制如图1.3所示的4人游戏的对话框,ID 为IDD_4PLAYER。
图


1.3
,接下来就是游戏过程(对话框过程),声明为
BOOL CALLBACK Game4(HWND hDlg , UINT message , WPARAM wParam , LPARAM lParam )
按钮为IDC_4PLAYER_ONE(TWO、THREE 、FOUR) 。
PLAYER_ONE对应按钮的代码如下: case IDC_4PLAYER_ONE: //点击玩家一按钮时
if (checkWord4[0] == 1)//如果第一次点击,输出对应词语 { } else //如果不是第一次点击,判断胜负 {
if (wordList4[listNumber].undercoverOrNot[0] == 1) //如果是卧底,卧底人数减一
,关MessageBox 函数的用法。
这样一个游戏显得有些单调,我们在测试这个程序的时候发现,我们在玩这个游戏的时候,常常不知道如何选择词语。对于这样的情况,我们想到了,何不建立一个数据库,在每次用户玩游戏的时候,都会把这次用户定义的词语保存在服务器上。这样一来,当有多个用户同时进行游戏的时候,我们就相当于让很多人同时为这次的游戏词语进行思考,这无疑能够丰富这个游戏的乐趣。在服务器方面,我想要使用python 作为语言的基础,希望借此提高自己对这门语言的理解和学习。与此同时,也能更好的理解,python 作为语言黏合剂这一句话的真谛。