J2ME- Tạo menu lựa chọn game

Posted: 20/06/2011 in J2ME
Tags: ,

bài này tôi sẽ hướng dẫn các bạn tạo menu với các lựa chọn trong J2ME

tạo lớp Point.java

package Zstar;

import javax.microedition.xml.rpc.Operation;

/**
*
* @author zstar
*/
public class Point {

private int X = 0;
private int Y = 0;

public Point() {
}

public Point(int x, int y) {
this.X = x;
this.Y = y;
}

public int getX() {
return this.X;
}

public int getY() {
return this.Y;
}
}

tạo lớp Menu.java kế thừa từ GameCanvas


package Zstar.menu;

import Zstar.Point;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

/**
*
* @author ZSTAR
*/

public class Menu extends GameCanvas {

private String[] options = {"New Game", "Map Editor", "High Score", "About", "Exit"};
private Point locationMenu = new Point(30, 30);
private int itemWidth;
private int item_space = 15;
private Image itemSelect;
private Image itemUnselect;
private Graphics g;
private int itemHeight;
private int currentIndex = 0;
private int white = 0xffffff;
private int black = 0x000000;
private Font font;

public Menu() {
super(false);
setFullScreenMode(true);
try {
this.g = this.getGraphics();
itemSelect = Image.createImage("/Images/butoption_Press.png");
itemUnselect = Image.createImage("/Images/butoption_unPress.png");
this.itemHeight = itemSelect.getHeight();
this.itemWidth = itemUnselect.getWidth();
this.font = Font.getFont(Font.STYLE_ITALIC, Font.FACE_SYSTEM, Font.SIZE_SMALL);
this.locationMenu = new Point(this.getWidth() / 2 - this.itemWidth / 2, this.locationMenu.getY());
g.setFont(font);
} catch (Exception e) {
};
}

public void Draw() {
for (int i = 0; i < options.length; i++) {
if (currentIndex == i) {
g.drawImage(itemSelect, locationMenu.getX(), locationMenu.getY() + i * itemHeight + item_space, Graphics.LEFT | Graphics.TOP);

} else {
g.drawImage(itemUnselect, locationMenu.getX(), locationMenu.getY() + i * itemHeight + item_space, Graphics.LEFT | Graphics.TOP);
}
g.drawString((i + 1) + ". " + options[i], locationMenu.getX() + 15, locationMenu.getY() + i * itemHeight + item_space + 5, Graphics.TOP | Graphics.LEFT);
this.flushGraphics();
}
}

private void clear_Item(int i) {
g.setColor(this.white);
g.fillRect(locationMenu.getX(), locationMenu.getY() + i * itemHeight + item_space, itemWidth, itemHeight);
g.drawImage(itemUnselect, locationMenu.getX(), locationMenu.getY() + i * itemHeight + item_space, Graphics.LEFT | Graphics.TOP);
g.setColor(this.black);
g.drawString((i + 1) + ". " + options[i], locationMenu.getX() + 15, locationMenu.getY() + i * itemHeight + item_space + 5, Graphics.TOP | Graphics.LEFT);

flushGraphics();
}

private void Draw_nextItem(int i) {
clear_Item(i);
g.drawImage(itemSelect, locationMenu.getX(), locationMenu.getY() + i * itemHeight + item_space, Graphics.LEFT | Graphics.TOP);
g.drawString((i + 1) + ". " + options[i], locationMenu.getX() + 15, locationMenu.getY() + i * itemHeight + item_space + 5, Graphics.TOP | Graphics.LEFT);
flushGraphics();
}

public void keyPressed(int keyCode) {
switch (getGameAction(keyCode)) {
case UP:
clear_Item(currentIndex);
menuSelectChange(-1);
Draw_nextItem(currentIndex);
break;
case DOWN:
clear_Item(currentIndex);
menuSelectChange(1);
Draw_nextItem(currentIndex);
break;
case FIRE:
//xu ly khi chon
;
break;
}
}

private void menuSelectChange(int h) {
//viec lua chon menu se chay vong tron
currentIndex += h + options.length;
currentIndex = currentIndex % options.length;
}
}

Tạo 1 Midlet để test menu như sau

package Zstar;

import Zstar.menu.*;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.*;

/**
* @author ZSTAR
*/
public class MenuMidlet extends MIDlet {
private Menu menu;

public void startApp() {
menu=new Menu();
menu.Draw();
Display.getDisplay(this).setCurrent(menu);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}

kết quả :

https://i2.wp.com/nzoqla.bay.livefilestore.com/y1pb_PyDhERuRlU-yMGoAiYndh-M1qp0JczQUXtz25fsED_QV8IY1FP4SBvbEI0HVD5eiq-JrKslOfNXHKj2K9Ib2e7TADKhaam/menu.png

menu sẽ được chọn khi bấm phím up,down

chúc các bạn vui vẻ

Comments
  1. Tauit_dnmd says:

    anh Z cho em tấm ảnh làm menu đi anh

  2. twins says:

    yeah, thanh kiu baby!

  3. cong thanh says:

    anh cho em hoi cai phan anh minh dat o thu muc nao anh

  4. J2meBasic says:

    sao lại bị lổi này nhỉ?

    C:\Users\PC\j2mewtk\2.5.2\apps\MenuMidlet\src\Point.java:3: package javax.microedition.xml.rpc does not exist
    import javax.microedition.xml.rpc.Operation;
    ^

  5. huutrieuit says:

    -this.locationMenu = new Point(this.getWidth() / 2 – this.itemWidth / 2, this.locationMenu.getY());
    lệnh này để làm j anh. khi em bỏ nó đi thì chương trình vẩn chạy bình thường.

    – GameCanvas có phải là lớp trừu tượng ko vậy vì em thấy ở hàm menu không có triệu gọi mà hàm Draw() ,keyPressed(int keyCode), vẩn hoạt động.

    cảm ơn anh nhiều

  6. hieu says:

    cho em hỏi là sai như thế này thì sửa lại như thế nào cho đúng ? thank !

    C:\Documents and Settings\hieu\j2mewtk\2.5.2\apps\MenuMIDlet\src\Menu.java:37: GameCanvas(boolean) in javax.microedition.lcdui.game.GameCanvas cannot be applied to ()
    public Menu() {
    ^
    1 error

  7. anhvu says:

    Bạn có thể up nguyên cái project được không ,mình chạy sao nó cứ báo lỗi hoài ah

    • Pham Thuy says:

      bạn ơi bạn có thể giúp minh 1 số code về bắt sự kiện chuột, phím được không?ví dụ như kjch vào nút chuyển trang ý.
      cảm ơn nhá!

  8. Phu Quy says:

    Bạn ơi mình đang làm đồ án tốt nghiệp về tìm kiếm số điện thoại của hãng taxi.Nhưng phần cơ sở dữ liệu mình đang bế tắc quá,mà chưa được học bao gjo.Bạn có thể giúp mình 1 chut về csdl được không? Minh tìm hiểu qua bác google thì chỉ bít là dùng class RecordStory thôi :((
    Giúp mình chut na ban!

  9. Quyvuong says:

    Cho e hỏi, nếu giờ mình thêm vào hình nền thì để đâu cho hợp lí, e thêm vào hàm draw thì bị lỗi😦

    • zstar says:

      chào bạn. bạn có thể draw hình nền ở đầu tiên của hàm Draw()
      code này trước mình mới học code chơi, chưa được tối ưu lắm
      mình sẽ update code mới sau, cám ơn bạn đã ghé qua blog của mình😀

  10. Quyvuong says:

    uhm, thank bạn nhé, chắc h level bạn cao lắm, học hỏi nhiều😀

  11. quyvuong086 says:

    e đang làm một game đơn giản theo cái menu này, ở xử lý sự kiện Case FIRE mình làm như thế nào để có thể chuyển qua màn hình new game hả a. Rảnh a có thể coi lại tí để chỉ e được ko, e ko biết phải dùng biến currentIndex như thế nào? Cảm ơn nhiều

  12. tien says:

    cho minh xin cai code nay cai

  13. daquanglinh says:

    Cho tôi hỏi khi tôi tạo một menu nhưng chỉ hiện lên New game và Map editor chứ các mục còn lại bị lệch xuống dưới và ko hiện lên màn hình, mặc dù vẫn có thể sử dụng đc.

    Vậy làm cách nào để hiện được toàn bộ 5 mục lên trên màn hình.

  14. mr.ttkey says:

    minh dang muon tim hiu ve j2me va lam game nho nho…nhung khong biet bat dau tu dau..mong cac ban giup do..
    thank cac ban truoc nha!!!

  15. nguyễn đăng phát says:

    cho em xin cái ảnh nền của cái menu game này nha a admin>>>e test thử chạy rồi ko’n phần ảnh nữa à<<<>>cảm ơn nhiều.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s