III. Các Giải thuật của chương trình :
III.1. CMang() :
Ta sử dụng mảng 2 chiều array1[8][10] tương ứng mảng các ô nhận tác
động Click để đặt ống vào, mảng 1 chiều array2[5] hoạt động như một hàng
đợi. Một mảng 1 chiều array3[7] dùng để chứa tất cả các loại ống. Mỗi phần
tử của 3 mảng này gồm có các biến ‘in’ ‘out’ ‘nen’ nhằm để kiểm tra dầu
có thể tiếp tục chảy hay không và m_button thuộc CBitmapButton để ta có
thể đặt các bitmap lên button.
Do đó 3 mảng có kiểu là một cấu trúc gồm có các biến ‘in’ ‘out’ ‘nen’
và m_button và trong chương trình ta có sử dụng phép gán giửa hai phần tử
của mảng vì vậy ta xây dựng một lớp là CMang
class CMang : public CWnd
{
public:
CMang();
public:
BOOL flag;
CBitmapButton m_button;
void operator=(CMang &p);
unsigned int pic;
unsigned int out;
unsigned int in;
virtual ~CMang();
protected:
};
CMang::CMang()
{
in=0;
out=0;
pic=IDB_BITMAPNEN;
flag=FALSE;
_Cho đặt ngẫu nhiên các ống khởi đầu(source)
s[4]={1,2,3,4} vào khung trò chơi nhưng không trùng với
4 cạnh củoa khung array[m][n].
_Gán mức vào của ống nguồn bằng 0,mức ra bằng
s[k].Và ống này ta xét cho dầu chảy rồi(flag=TRUE).
III.3. Password() -(mật mã) :
Ø Ngươiø chơi chọn màn và nhập password .
Ø Nếu người sử dụng nhập màn không có password thì sẽ có thông
báo là không có password màn đó.
Ø Ngược lại nếu đúng màn có passwd thì sẽ kiểm tra bằng cách
so sánh 2 chuỗi với nhau:
_ Nếu bằng thì cho hiện đúng số màn đã chọn và cho tốc độ
phù hợp với màn đó.
_ Nếu không thì cho hiện thông báo messagebox báo nhập sai
và cho chơi tiếp màn hiệi hành.
void Game1::OnPasswdok()
{
CString m_chonsoman;
CString m_tenpasswd;
pch.f_passwd = FALSE;
UpdateData(TRUE);
if((atoi(m_chonsoman) % 4) != 0)
AfxMessageBox("Khong co Password man nay ! \n Vui long chon
man trong khung combobox !");
switch(atoi(m_chonsoman))
{
case 4 :
if(m_tenpasswd.Compare("son")==0)
{
pch.reset();
}
else
if(MessageBox("Password khong dung !","Thong
bao",MB_ICONHAND|MB_APPLMODAL)==IDOK);
break;
case 16 :
if(m_tenpasswd.Compare("rose")==0)
{
pch.c_man = 16;
pch.c_diem = 0;
pch.n_tocdo = (2000-800);
pch.status =0;
pch.reset();
}
else
if(MessageBox("Password khong dung !","Thong
bao",MB_ICONHAND|MB_APPLMODAL)==IDOK);
break;
}
III.4. Hàm OnTimer() cùng với tính điểm,màn(Level) & tốc độ dầu chảy :
Ø
Nếu FLAGS=TRUE (dầu chưa chảy)
Ø Nếu TimeOut>1000(mức cao của progress thể hiện thời gian
dầu chưa chảy). Thì ta gán start=0.
Ngược lại ta tăng start=start+10;
_ Cho prpgress cho chạy từ start lên 1000(mức cao của progress)
_ Cho phép đặt ống dầu vào khung trò chơi.
Ø
Nếu start=1000 Thì cho FLAGS=FALSE(dầu bắt đầu chảy)
phép dầu chảy.
_ Nếu (mức ra của ô =4 (array1[x][y].out = 4) ) thì ta
hoán vò mức ra thành mức vào rồi cho phép dầu chảy.
Ø TH3: out=3:
y=y+1;
_ Nếu (mức vào của ô này=1 (array1[x][y].in = 1) ) cho
phép dầu chảy.
_ Nếu (mức ra của ô =1 (array1[x][y].out = 1) ) thì ta
hoán vò mức ra thành mức vào rồi cho phép dầu chảy.
Ø TH4: out=4:
Ta gán x=x+1;
_ Nếu (mức vào của ô này=2 (array1[x][y].in = 2) ) cho
phép dầu chảy.
_ Nếu (mức ra của ô =2 (array1[x][y].out = 2) ) thì ta
hoán vò mức ra thành mức vào rồi cho phép dầu chảy.