自己動手寫推箱子游戲——菜單(源碼)

第二:製作菜單,完善功能

源碼下載地址: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>



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章