Tải bản đầy đủ (.pdf) (9 trang)

Giải thuật C Sharp.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (31.78 KB, 9 trang )

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;


}
CMang::~CMang()
{

}
void CMang::operator =(CMang & p)
{
in=p.in;
out=p.out;
pic=p.pic;
}
III.2. Hàm RESET( ) :
Ø Nhằm thiết đặt lại trang thái ban đầu của trò chơi.
Ta cho cờ FLAGS=TRUE trường hợp dầu chưa chảy.
f_start = TRUE; // cho dầu chảy ống khởi đầu.
f_killtimer = FALSE;// cờ này sẽ hủy Timer để thông báo.
f_xoa = FALSE; // cờ xóa các ống chưa có dầu chảy qua khi dầu
tràn.
f_chaynhanh = FALSE ; // dùng cho dầu chảy nhanh
f_passwd = FALSE;
Ø Sau đó ta dùng vòng for để xét array1[m][n]:
For(i=0; I<hàng; i++)
For(j=0; j<cột; j++)
_Ta gán các BitmapNen(array1) cho các biến ‘in’, ‘out’ bằng
0.
_Bật cờ FLAGS bằng FALSE cho phép dầu chảy.
Ø Xét hàng đợi(array0[i]):
For(i=0; i<5, i++)
_Cho đặt ngẫu nhiên các ống dầu array3[j] vào hàng đợi
array2[i].

_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.c_man = 4;
pch.c_diem = 0;
pch.n_tocdo = (2000-200);
pch.status =0;
pch.reset();
}
else
if(MessageBox("Password khong dung !","Thong
bao",MB_ICONHAND|MB_APPLMODAL)==IDOK);
break;
case 8 :
if(m_tenpasswd.Compare("vietnam")==0)
{
pch.c_man = 8;
pch.c_diem = 0;
pch.n_tocdo = (2000-400);
pch.status =0;
pch.reset();
}
else
if(MessageBox("Password khong dung !","Thong
bao",MB_ICONHAND|MB_APPLMODAL)==IDOK);
break;
case 12 :
if(m_tenpasswd.Compare("ronaldo")==0)
{
pch.c_man = 12;
pch.c_diem = 0;
pch.n_tocdo = (2000-600);
pch.status =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)

_ Hủy Timer đã thiết đặt cho thanh và thiết đặt Timer cho tốc độ
dầu chảy qua từng ống.
Ø
Nếu hàm kiemtra() ngưng :
Ø Cho xóa các ống dầu chưa có dầu chảy qua.
Ø Nếu (ống đã có dầu chảy qua trên khung trò chơi >= số ống
tối thiểu mà người chơi đã nhập vào ban đầu ) Thì cho thông
báo chơi màn tiếp theo đồng thời tăng tốc độ,level và Reset
lại.
Ø
Ngược lại thông báo thua: cho lưu điểm cao và trở lại từ đầu
màn 1 hoặc thoát khỏi chương trình.
Ø Ngược lại thay ống chưa có dầu thành ống đã có dầu ,
Điểm = điểm + 50 ;
Số ống = sống + 1;
Đặt các ống dầu vào khung của trò chơi;
Bật cờ flag tại vò trí (x,y) này thành TRUE(ống đã có
dầu không bò thay thế).
III.5. Hàm Kiemtra():
v Kiemtra():
Ø Ta xét 4 trường hợp switch(n) tại vò trí dầu chảy (x,y):
Ø TH1: nếu out=1:
Ta gán y=y-1;
_ Nếu (mức vào của ô này=3 (array1[x][y].in = 3) ) cho
phép dầu chảy.
_ Nếu (mức ra của ô =3 (array1[x][y].out = 3) ) thì ta
hoán vò mức ra thành mức vào rồi cho phép dầu chảy.
Ø TH2: out=2:
Ta gán x=x-1;
_ Nếu (mức vào của ô này=4 (array1[x][y].in = 4) ) cho

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.

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×