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

来源:互联网 发布:c 多进程编程 编辑:程序博客网 时间:2024/05/16 17:59

第二:制作菜单,完善功能

源码下载地址: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();}elsereturn;}


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

 所以我写了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>



 

原创粉丝点击