II. Phân tích chi tiết chương trình trò chơi ống dầu :
II.1. Giải quyết các yêu cầu của trò chơi :
II.1.1. Các loại ống dẫn dầu và các qui đònh :
v Có 7 loại ống dầu là:
Để kiểm tra được việc dầu có chảy được không ta dùng các
biến “in” “out” để kiểm tra.
v Ta qui đònh các cạnh lần lượt là Ø Với ống
Ta gán ‘in = 1’ và ‘out = 2’
Ø Với ống
Ta gán ‘in = 2’ và ‘out = 3’
Ø Với ống
Ta gán ‘in = 3’ và ‘out = 4’
Ø Với ống Ta gán ‘in = 4’ và ‘out = 1’
Ø Với ống
1 4
II.1.2. Vẽ khung của trò chơi:
Ta vẽ sẵn các button trên khung trò chơi gồm hàng đợi có 5
button và khung chơi là matrận[n hàng, m cột] với mỗi phần tử
của ma trận cũng là một button, sau đó đặt các Bitmap nền vào
matrận và hàng đợi để tạo thành khung trò chơi như (hình 2). Như
đã nói sẽ có 3 khung cố đònh cho người sử dụng chọn đó là khung
[6,8] , [7,9], [8,10] do đó ta phải tạo trên 3 dialog khác nhau.
Để đặt đúng các bitmap vào khung ta dùng hàm LoadBitmaps
và sử dụng mã ID của các bitmap đặt vào đó.
II.1.3. Mảng của các ống dầu :
Mảng có kiểu là một cấu trúc gồm có các biến ‘in’, ‘out’ 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 cho các ống dầu và đồng thời nhằm để kiểm tra dầu chảy
theo các hướng vì vậy ta xây dựng một lớp là CMang. Ví dụ như
ở (hình 5) ta có ống khởi đầu với in=2 và out=4 do là ống khởi
đầu nên không có đầu vào in, nhưng đối với các ống khác ta sẽ
thấy có 2 đầu vào ra vì vậy dầu sẽ chảy theo 2 hướng như ta đã
nói.
Và 1 biến nữa thuộc lớp CMảng đó là m_button thuộc lớp
CBitmapButton nhằm để gán dãy ma trận các button thuộc lớp
này, để ta có thể đặt bitmap lên button 1 cách dể dàng.
Hình 6 : ống bò chắn
Thay bơ
i
Hình 5 : thực hiện dầu chảy.
II.1.4. Cách tính thời gian dầu chưa chảy(TimeOut) và thời gian dầu
chảy qua từng ống :
_ Ngược lại kiểm tra biến ‘out’ có bằng 4 không?
_ Nếu bằng thì đổi ‘in’ thành ‘out’, ‘out’ thành ‘in’ và cho
dầu tiếp tục chảy và cộng điểm.
(x,y)
x
y
0
Hình 7: vò trí (x,y).
• Out=3 thì y = y+1 và kiểm tra ô có vò trí (x , y) biến ‘in’ có
bằng 1 không?
_ Nếu bằng thì cho dầu tiếp tục chảy và cộng điểm.
_ Ngược lại kiểm tra biến ‘out’ có bằng 1 không?
_ Nếu bằng thì đổi ‘in’ thành ‘out’, ‘out’ thành ‘in’ và cho
dầu tiếp tục chảy và cộng điểm.
• Out=4 thì x = x+1 và kiểm tra ô có vò trí (x , y) biến ‘in’ có
bằng 2 không?
_ Nếu bằng thì cho dầu tiếp tục chảy và cộng điểm.
_ Ngược lại kiểm tra biến ‘out’ có bằng 2 không?
_ Nếu bằng thì đổi ‘in’ thành ‘out’, ‘out’ thành ‘in’ và cho
dầu tiếp tục chảy và cộng điểm.
• Trường hợp đặc biệt nếu kiểm tra thấy ô kế tiếp có ‘in’ =
5(trường hợp ống ngã tư) thì gán ‘out’ của ống ngã tư bằng
‘out’ của ô trước đó(tại vò trí (x,y)) .
Sau khi cho kiểm tra xong ta biết được mức vào của các
ống là ‘in’ hay ‘out’: nếu là ‘in’ thì ta cho đặt các bitmap đó có
mức vào là ‘in’, ngược lại ta đặt các ống theo mức ‘out’.
Trường hợp đặc biệt ống ngã tư ngoài việc kiểm tra ‘in’, ‘out’
ta phải xét thêm ống đó có dầu chảy qua một hướng hay chưa
nếu rồi thì ta đặt ống đã có dầu chảy rồi vào(xem hình8).
Ø Kiểm tra xem (x,y) có chạy ra ngoài mảng các ô không.