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

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

源码下载地址: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,在墙的包围内的区域都要填充完整,在墙的外围不需要填写

   谢谢大家的使用!



 

你可能感兴趣的:(VC/MFC,推箱子)