俄罗斯方块游戏--MFC
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
俄罗斯方块3.0版本
一、采用的技术方法
(1)编程方法采用的MFC;
(2)运用编程技术:Windows图形编程技术(基本的绘图CDC/HDC, GDI对象(笔、刷子、字体)、图形(线、矩形、圆形);
(2)菜单、工具条设计与使用;
(3)对话框设计与使用;
(4)系统通用对话框的使用;
(6)基本控件(按钮、静态文本框、文本编辑框、下拉框、列表框等);
(7)实现系统数据的可持久化:要求使用数据库或文件或MFC文档串行化技术实现这一点;
二、达到目标
在我的俄罗斯方块2.0版本基础上,完善游戏功能(如背景音乐和游戏音效的播放,游戏结束,排行榜等),完善游戏的运行规则(确定输赢的准则,积分的获得方式等)。
三、主要步骤
1、添加游戏背景音乐,音效资源;
2、添加两个对话框类即排行榜对话框类和打破记录者更改的对话框类;
3、添加响应排行榜对话框IDD_DIALOG_NEWRECORD和IDD_DIALOG_PH;
4、添加结束菜单ID_VIEW_END和排行榜菜单ID_VIEW_PHB;
5、主要代码说明;
mciSendString("play music\\4.mp3 repeat",NULL,0,NULL); //背景音乐是mp3格式循环播放
mciSendString("stop music\\4.mp3",NULL,0,NULL); //停止播放背景音乐
case VK_LEFT: //左移
russia.Move(1);
PlaySound("music\\btn.wav",NULL,SND_FILENAME|SND_ASYNC); //播放左移音效
break;
case VK_RIGHT: //右移
russia.Move(2);
PlaySound("music\\btn.wav",NULL,SND_FILENAME|SND_ASYNC); //播放右移音效
break;
case VK_DOWN: //下移
russia.Move(3);
PlaySound("music\\btn.wav",NULL,SND_FILENAME|SND_ASYNC); //播放下移音效
break;
case VK_UP: //变换
russia.Move(4);
PlaySound("music\\transform.wav",NULL,SND_FILENAME|SND_ASYNC);
//播放变换方块音效
PlaySound("music\\fadelayer.wav",NULL,SND_FILENAME|SND_ASYNC); //消方块时的音效
PlaySound("music\\lost.wav",NULL,SND_FILENAME|SND_ASYNC); //游戏结束时的音效
响应结束菜单函数
void CMBlockView::OnViewEnd()
{
if(AfxMessageBox("是否结束游戏?",MB_OKCANCEL)==IDOK)
{
russia.end = true; //将结束标志设为真
IfGoon = false; //将继续游戏标志为假
mciSendString("close music\\4.mp3",NULL,0,NULL); //关闭背景音乐
KillTimer(1);
//移除定时器1
}
NewRecord(); //是否破纪录函数
}
响应结束菜单流程图
排行榜功能实现函数
//...........显示排行榜对话框................
void CMBlockView::OnViewPhb()
{
LoadConfig(); //装载配置
CPaihang ph; //排行榜对话框
ph.SetBRecord(m_uPrimary); //显示冠军分数
ph.SetBHolder(m_szPrimary); //显示冠军姓名
ph.DoModal(); //为模态对话框
SaveConfig(); //保存ini信息
}
/............载入配置...............
void CMBlockView::LoadConfig()
{ //----------获取本地目录-------------*/
char
exeFullPath[MAX_PATH]; //MAX_PATH在API 中有定义,为128
CString
strPath; //存储执行程序路径
GetModuleFileName(NULL, exeFullPath, MAX_PATH); //应用程序全路径存放地址
strPath = CString(exeFullPath);
strPath = strPath.Left(strPath.ReverseFind('\\'));
//-----------------------------------*/
strPath += "\\config.ini"; //配置文件名
char strPrimary[80];
GetPrivateProfileString("HOLDER","PrimaryHolder", "匿名
",strPrimary,80,strPath); //从私有初始化文件获取冠军姓名字符串
m_szPrimary=strPrimary; //初始话冠军姓
名
m_uPrimary = GetPrivateProfileInt("SCORE","Primary",
0,strPath); //从私有初始化文件获取整型分数值
}
//............是否打破记录函数...............
void CMBlockView::NewRecord()
{
int uRecord = m_uPrimary;