Thuật toán tính điểm:

Một phần của tài liệu Lập trình trò chơi lines cho điện thoại trên J2ME (Trang 46 - 50)

Điểm của trò chơi đợc thực hiện theo ba cách sau: theo đờng (Lines), theo góc vuông Squares và theo khối (Blocks). Khi thực hiện tính điểm, ta phải xác định viên bi tại ô có vị trí (i, j) đó có thể ghi đợc điểm hay không và xác định các ô ghi điểm nên ta xây dựng thuật toán trả về 1 vector. Vì vậy, cũng có thể xem đây là thuật toán tìm điểm xung quang ô (i, j) theo 3 cách. Nếu vector

trả về là giá trị null thì không ghi đợc điểm, ngợc lại ta ghi đợc điểm. Các thuật toán tính điểm trong Lines đợc thực hiện nh sau:

+) Thuật toán tính điểm theo Lines:

Theo thuật toán này chơng trình sẽ tính điểm khi xuất hiện 5 viên bi trở lên cùng màu liên tiếp nhau trên cùng một đờng thẳng. Thuật toán đợc thực hiện nh sau:

Function Vector tinhdiemLines() {

Thiết lập vector chứa các ô ghi điểm.

Kiểm tra tuần tự bốn hớng tơng ứng với 4 đờng thẳng đi qua nó {

Xây dựng biến đếm =1;

Trong khi (viên ô đang xét cùng màu với viên bi ô (i, j)) {

- Xét viên bi tiếp theo hớng lên trên tại ô (i, j) - Tăng biến đếm

}

Trong khi (viên ô đang xét cùng màu với viên bi ô (i, j)) {

- Xét viên bi tiếp theo hớng xuống dới tại ô (i, j) - Tăng biến đếm

}

Nếu biến đếm lớn hơn 5 thì thực hiện thêm vào vector các ô mà tạo với ô (i, j) ghi điểm.

}

Nếu vector khác null thì thêm ô (i, j) vào và trả về vector đó. Ngợc lại trả về giá trị null.

}

+) Thuật toán tính điểm theo Squares:

Với thuật toán tính điểm theo Squares chơng trình sẽ thực hiện tính điểm khi xuất hiện các viên bi cùng màu liên tiếp nhau xếp thành hình vuông. Thuật toán đợc thực hiện nh sau:

Function Vector tinhdiemSquares() { Khởi tạo biến kiểm tra bằng 0; Kiểm tra tuần 8 hớng ;

{

Bật các bit thứ k của biến kiểm tra lên; }

}

- Kiểm tra các bit của biến kiểm tra nếu thỏa mãn điếu kiện tạo thành các hình vuông, hay chữ nhật thì đa vào vector và đa ra kết quả.

- Ngợc lại trả về giá trị null }

+) Thuật toán tính điểm theo Blocks:

Khác với hai cách trên thuật toán tính điểm theo khối Blocks sẽ thực hiện tính điểm nếu ngời chơi sắp xếp 7 viên bi trở lên cùng màu gần nhau thì sẽ ghi đợc điểm. Thuật toán đợc thực hiện nh sau:

Function Vector checkBlocks() {

Trong khi (Hàng đợi[] cha rỗng) {

Lấy phần tử trong Hàng đợi[] { (adsbygoogle = window.adsbygoogle || []).push({});

Kiểm tra 4 ô xung quanh (trên, dới, trái, phải) của phần tử này {

Nếu là ô có viên bi cùng màu với ô đang xét và cha xét {

- Bỏ phần tử này vào Hàng đợi[] và vector

- Đánh dấu ô đó. }

} } }

Nếu độ dài vector đó có bé bơn 7 thì trả về giá trị null Ngợc lại trả về vector chứa các điểm đó

}

4.3 Xây dựng trò chơi Lines trên J2ME.a. Font chữ và chuỗi ký tự: a. Font chữ và chuỗi ký tự:

J2ME không cho phép thay đổi loại font chữ cho đối tơng Graphics nghĩa là chúng ta không thể can thiệp vào các quy định về font Family, font size,... Khi tạo một đối tợng thuộc lớp Font để sử dụng, chỉ có một cách là :

Font font = Font.getFont(int face, int style, int size)

Trong đó các tham số truyền phải bắt buộc phải là hằng số

+ Face: FACE_SYSTEM,FACE_MONOSPACE,FACE_PROPORTIONAL

+ Style: STYLE_PLAIN,hoặc tổ hợp từ các dạng STYLE_BOLD, STYLE_ITALIC, STYLE_UNDERLINED

+ Size: SIZE_SMALL SIZE_MEDIUM SIZE_LARGE

Đặc điểm này gây ra một số bất lợi cho chơng trình, do đó khó xác định đợc chính xác kích thớc của font chữ đợc sử dụng để lựa chọn cho phù hợp Vì với một số điện thoại, font có kích thớc trung bình có thể đẹp, nhng một số điện thoại thì quá to, quá nhỏ, không đẹp và không theo mình mong muốn.

Chính vì những khó khăn đó nên tôi đã xây dựng font chữ theo chuẩn mà mình mong muốn. Bằng cách ta phải xây dựng một file chứa các hình ảnh, các hình ảnh đó không phải là hình ảnh đơn thuần mà nó chứa các chữ cái. Vậy mỗi bức ảnh chứa một tập các hình ảnh của các chữ chúng ta có thể thấy ở hình sau:

Hình 4.1 Hình chứa các font chữ.

Từ hình ảnh lớn chứa nhiều chữ cái ta sử dụng phơng pháp public static Image createImage(Image image, int x, int y, int width, int height, int transform) để xây dựng những ảnh nhỏ chỉ chứa một chữ cái. Vậy việc vẽ chuỗi ký tự trong graphics bây giờ chỉ là vẽ lần lợt các ảnh ra màn hình. Với phơng pháp này ta có thể tạo ra rất nhiều kiểu chữ khác nhau và đặc biệt phơng pháp này có thể in ra đợc cả chữ có dấu trong tiếng việt.

Viết Game cho mobile một phần không thể thiếu đó là hiệu ứng âm thanh, trớc với bản 1.0 điều này cha thể thực hiện đợc thì nay với bản 2.0 thì đó là chuyện quá đơn giản. Với phiên bản mới có thêm tính năng MMAPI cung cấp một tập các khả năng đa phơng tiện cho các thiết bị di động, bao gồm cả phát lại và ghi âm dữ liệu âm thanh và video từ nhiều nguồn khác nhau.

Mọi thứ ta cần đã có sẵn trong gói javax.microedition.media.* hỗ trợ có thể khá nhiều loại định dạng file khác nhau, nhng 3 loại đơn giản nhất và phổ biến nhất đó là wav, mp3 và MIDI. Để khởi tạo một player ta có thể dùng một trong ba phơng thức sau đây:

+ createPlayer(DataSource source): tạo một player dựa trên DataSource.

+ createPlayer(InputStream stream, String type): tạo một player sử dụng input stream nh là nguồn và giả định rằng các kiểu media đã đợc cung cấp.

+ createLayer(String url): tạo một player sử dụng một url để xác định dữ liệu nguồn.

Sau khi ta đã tạo ra một player, ta có thể bắt đầu sử dụng nó bằng cách đơn giản gọi phơng thức start(). Nếu không có sự lặp lại đoạn thì khi đạt đến sự kết thúc của media thì nó stop một cách tự động. Và ngợc lại đơn giản chỉ cần gọi phơng thức stop() thì nó sẽ dừng lại ngay lập tức.

Một phần của tài liệu Lập trình trò chơi lines cho điện thoại trên J2ME (Trang 46 - 50)