自己動手寫推箱子游戲——選單(原始碼)
阿新 • • 發佈:2019-02-16
第二:製作選單,完善功能
一:選關功能
自己要為遊戲設定一些關數,而且難度應該遞增,這個選關的對話方塊需要新建,主要是返回一個表示關數的數值
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>