您的位置:首页 > 其它

自己动手写推箱子游戏——菜单(源码)

2011-08-08 14:40 369 查看
第二:制作菜单,完善功能

源码下载地址:http://download.csdn.net/source/3503308

一:选关功能



自己要为游戏设置一些关数,而且难度应该递增,这个选关的对话框需要新建,主要是返回一个表示关数的数值

void CPushBoxDlg::OnChose()
{
CchoseDlg dlg;
dlg.m_chose_hard=num_hard;
dlg.DoModal();
UpdateData(true);
UpdateData(false);
num_hard=dlg.m_chose_hard;
CPushBoxDlg::Initi_State(ii,jj);
saved=false;
CPushBoxDlg::OnPaint();
}


二:重来:玩家可能由于失误,需要重玩,这时只需要将个区域的状态回到初始状态就可以了

void CPushBoxDlg::OnAgain()
{
flag=false;
if(saved==false)
{
CPushBoxDlg::Initi_State(ii,jj);
text.Format("你的位置 X: %d  Y:  %d",sitey,sitex);
m_StatusBar.SetPaneText(0,text);
text.Format("你走的步骤数: %d",num_step);
m_StatusBar.SetPaneText(1,text);
//RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
}
else
{
for(int i=0;i<=7;i++)
for(int j=0;j<=7;j++)
{
if(save[i][j]==3)
{
sitex=i;
sitey=j;
}
face[i][j]=save[i][j];
}
text.Format("你的位置 X: %d  Y:  %d",sitey,sitex);
m_StatusBar.SetPaneText(0,text);
num_step=0;
text.Format("你走的步骤数: %d",num_step);
}

CPushBoxDlg::OnPaint();
}


三:设置状态栏:



这需要定义一个状态栏类,用于显示玩家的位置和已经走过的步数

CStatusBar m_StatusBar;//创建一个状态栏对象

BOOL bRet=m_StatusBar.Create(this);
UINT nIDS[2]={1100,1101};
bRet=m_StatusBar.SetIndicators(nIDS,2);
m_StatusBar.SetPaneInfo(0,nIDS[0],SBPS_NORMAL,300);
m_StatusBar.SetPaneInfo(1,nIDS[1],SBPS_NORMAL,300);

text.Format("你的位置 X: %d  Y:  %d",sitex,sitey);
m_StatusBar.SetPaneText(0,text);
text.Format("你走的步骤数: %d",num_step);
m_StatusBar.SetPaneText(1,text);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);


当人的位置发生改变时都需要刷新状态

四:游戏界面的背景颜色:不同的玩家对颜色有不同的喜好,因此可以让玩家自己挑选



着只需要一个颜色对话框就能可以实现,

先定义一个COLORREF m_bgcolor;//背景颜色;

主要代码:

void CPushBoxDlg::OnBgcolor()
{
CColorDialog dlg;
if(dlg.DoModal()==IDOK)
m_bgcolor=dlg.m_cc.rgbResult;
CPushBoxDlg::OnPaint();
}


五:录像功能:有时候玩家希望能记录自己的路线,方便自己下一步有所思路



其实这也比较简单,只需要设置一数组记录玩家所走过的路程,当然为了减少内存,也可以动态开辟空间

struct video record[MAX];

void CPushBoxDlg::OnBeginVideo()
{
video_flag=1;
num_video=-1;
//MessageBox("begin");
//head=p=NULL;
}
void CPushBoxDlg::OnStopVideo()
{
video_flag=0;
//MessageBox("stop");
//p=NULL;
}
void CPushBoxDlg::OnPlay()
{
//MessageBox("play");
if(num_video>=0)
{
//CPushBoxDlg::Initi_State();
//MessageBox("KKK");
for(int i=0;i<=num_video;i++)
{
CPushBoxDlg::video_to_face(&record[i],ii,jj);
CPushBoxDlg::draw_game_face(dc);

Sleep(200);
}
CPushBoxDlg::video_to_face(&record[MAX-1]); CPushBoxDlg::OnPaint();
}
else
return;

}


六:帮助:对于游戏,应该有所说明,包括玩法和注意事项等

所以我写了html文件,为了在程序打开这个html文件,需要一个函数

void CPushBoxDlg::OnRelate()
{
ShellExecute(this->m_hWnd,"open","ReadMe.html",NULL,NULL,SW_SHOW);    //打开 文件1.txt
}


其中html文件时比较方便学的

<html>
<head>
<title>推箱子游戏说明
</title>
<style type="text/css">
p.first{font-family:"华文行楷";text-align:center;color:Blue;font-size:36pt;}
p.second{font-size:18pt;color:Black;text-indent:1in;}
</style>
</head>
<body>
</br>
<p class=first> 欢迎使用迷你版推箱子游戏</p> <br><br>
<p class=second> 本游戏由开发者JJF编写,编译器为visual studio 6.0,开发语言为C++。游戏的菜单有“游戏功能”,“游戏界面',"设计师”,“休闲放松”“帮助”构成。该游戏内置8关,在设计的游戏里面
内置5关,本游戏区别去其他众多版本是本游戏具有开放平台,可以让玩家自己成为设计院,只要有创意都可以实现,简单方便易懂。在“休闲放松”菜单是本人编写的简易的mp3、mp4播放器,可以对电脑
内各个盘符内的符合条件的文件进行搜索,方便你翻阅。
</p>
<HR>    以下是注意事项:<hr />
<dl>
<dt>    游戏人物又键盘上下左右键控制,游戏可能会由于按键过快而不稳定</dt>
<dt>    在音乐欣赏过程中,先选择磁盘,在更新列表,双击列表中的文件就可以播放磁盘的递归搜索可能会发生一些错误,敬请见谅</dt>
<dt>    在游戏界面菜单中,可以随有改变界面的背景颜色</dt>
<dt>    “录像”菜单中,可以记录你一段时间内的步骤,方便你反思</dt>
<dt>    在设计师模块,由于游戏大小为8×8,所以受到限制,可以默认让边界作为墙,这样可以扩展成9×9,在墙的包围内的区域都要填充完整,在墙的外围不需要填写</dt>
</dl>
<p class=second>   谢谢大家的使用!</p>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: