第二:製作菜單,完善功能
源碼下載地址: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>