1. 程式人生 > >自己動手寫推箱子游戲——選單(原始碼)

自己動手寫推箱子游戲——選單(原始碼)

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

  一:選關功能

 

自己要為遊戲設定一些關數,而且難度應該遞增,這個選關的對話方塊需要新建,主要是返回一個表示關數的數值

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>