第二:制作菜单,完善功能
源码下载地址: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文件时比较方便学的
推箱子游戏说明
欢迎使用迷你版推箱子游戏
本游戏由开发者JJF编写,编译器为visual studio 6.0,开发语言为C++。游戏的菜单有“游戏功能”,“游戏界面',"设计师”,“休闲放松”“帮助”构成。该游戏内置8关,在设计的游戏里面
内置5关,本游戏区别去其他众多版本是本游戏具有开放平台,可以让玩家自己成为设计院,只要有创意都可以实现,简单方便易懂。在“休闲放松”菜单是本人编写的简易的mp3、mp4播放器,可以对电脑
内各个盘符内的符合条件的文件进行搜索,方便你翻阅。
以下是注意事项:
- 游戏人物又键盘上下左右键控制,游戏可能会由于按键过快而不稳定
- 在音乐欣赏过程中,先选择磁盘,在更新列表,双击列表中的文件就可以播放磁盘的递归搜索可能会发生一些错误,敬请见谅
- 在游戏界面菜单中,可以随有改变界面的背景颜色
- “录像”菜单中,可以记录你一段时间内的步骤,方便你反思
- 在设计师模块,由于游戏大小为8×8,所以受到限制,可以默认让边界作为墙,这样可以扩展成9×9,在墙的包围内的区域都要填充完整,在墙的外围不需要填写
谢谢大家的使用!