Giải thuật C Sharp.pdf

9 697 0
Giải thuật C Sharp.pdf

Đang tải... (xem toàn văn)

Thông tin tài liệu

Giải thuật C Sharp

Trang 1

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 void operator=(CMang &p); unsigned int pic;

unsigned int out; unsigned int in;

Trang 2

}

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

Trang 3

AfxMessageBox("Khong co Password man nay ! \n Vui long chon man trong khung combobox !");

Trang 4

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

Trang 5

Ø 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

Trang 6

Ø Ngược lại (x,y) nằm ngoài (sốhàng, sốcột) thì không cho dầu

chảy

Ø Trường hợp đặc biệt ống dầu ngã tư :

_Nếu mức vào = 5 thì ta sẽ kiểm tra mức ra và cho dầu chảy phụ thuộc vào mức ra này

III.6 Dầu chảy nhanh, đứng hình(stop), thanh thông báo qua màn :

v Đứng hình(stop): Khi ấn vào nút stop dầu sẽ ngưng chảy để thực hiện điều này ta dùng hàm KillTimer để hủy thời gian SetTimer lúc đầu, sau đó ta cho thông báo 1 thông điệp tạm dừng nếu người chơi Click ‘OK’ trên thông điệp ta sẽ cho thiết đặt lại hàm SetTimer để dầu có thể chảy tiếp

v Cho dầu chảy nhanh:

Ø Nếu người sử dụng Click vào nút này thì ta cho bật Timer và cho tăng tốc độ dầu chảy lên gấp 10 lần so với thời gian ban đầu do người sử dụng nhập vào

v Thanh báo qua màn : thanh này cũng được biểu diễn bằng một Progress giảm dần xuống 0, với mức thấp là 0 và mức cao là số ống qua một màn do người dùng nhập vào ban đầu trước khi chơi, còn bước nhảy sẽ là số ống mà dầu chảy qua từng ống Nó sẽ cho ta biết còn bao lâu thì ta sẽ được qua màn kế tiếp

pch.n_quaman = pch.n_ong;

Trang 7

ch.n_quaman =pch.m_quaman – 1; m_progress2.SetRange(0,pch.n_quaman); m_progress2.SetPos(pch.n_quaman);

III.7 Hàm OnCommand() : hàm này sẽ sử lý thông điệp đối với những

thông tin gởi đi từ các ô điều khiển

Ø Hàm này cho phép ta đặt các ống dầu vào hàng đợi Để thực hiện điều này ta cho đặt ngẫu nhiên các ống dầu vào hàng đợi nhưng trong đó không có các ống khởi đầu

Ø Khi một ống từ hàng đợi đặt vào khung trò chơi thì sẽ lấy ngẫu nhiên 1 ống khác đặt vào đầu hàng đợi các ống khác được dồn xuống cuối Các ống dầu đặt lại sẽ bị trừ điểm

BOOL Game1::OnCommand(WPARAM wParam, LPARAM lParam)

if(m<0 || m>hang || n<0 ||n>cot)

return CDialog::OnCommand(wParam, lParam);

Trang 8

III.8 Hàm OnInitDialog() :Hàm này sẽ được gọi vào khi tất cả các ô

điều khiển đã được tạo ra và trước khi khung đối thoại được hiển thị Ø Ở đây ta cho gọi các ô khiển button vào phân lớp động bởi hàm

SubclassDlgItem( ) để gắn điều khiển đó vào CWnd, khi điều khiển là phân lớp động thì windows sẽ gơỉ qua thông điệp của CWnd và gọi thông điệp những mục quản của CWnd trước tiên Ø Ta cho gán mức vào, ra cho các ống ‘in’=0, ‘out’=1

unsigned int a[7][2]={{1,2},{2,3},{3,4},{4,1},{2,4},{1,3},{5,5}}; for(i=0; i<7; i++)

Trang 9

return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE

}

Ngày đăng: 23/08/2012, 13:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan