`

九宫格菜单算法

    博客分类:
  • J2ME
阅读更多
package peng.canvas;

import javax.microedition.lcdui.*;

public class MenuCanvas extends Canvas implements CommandListener {
	private String[] menuName = new String[] { "login", "picture", "wap",
			"phone", "call", "goto", "fuck", "music", "video" };
	private int canvaWidth = -1, canvaHeight = -1;
	private int maxHeight = -1, imgWidth = -1, imgHeight = -1;
	private int focus = 0;
	private int fontHeight = -1;
	private Image menuImg[] = new Image[9];
	private Command exit;

	public MenuCanvas() {
		exit = new Command("Exit", Command.EXIT, 1);
		addCommand(exit);
		setCommandListener(this);
		canvaWidth = getWidth();
		canvaHeight = getHeight();
		try {
			for (int i = 0; i < menuImg.length; i++) {
				menuImg[i] = Image.createImage(28, 28);
				Graphics g = menuImg[i].getGraphics();
				g.translate(-28 * i, 0);
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
		imgWidth = menuImg[0].getWidth();
		imgHeight = menuImg[0].getHeight();
		fontHeight = Font.getDefaultFont().getHeight();
		maxHeight = imgHeight + fontHeight;
	}

	public void paint(Graphics g) {
		int color = g.getColor();
		g.setColor(0xFFFFFF);
		g.fillRect(0, 0, canvaWidth, canvaHeight);
		int cellWidth = canvaWidth / 3;
		int cellHeight = canvaHeight / 3;
		g.setColor(color);
		for (int i = 0; i < menuImg.length; i++) {
			g.drawImage(menuImg[i], cellWidth * (i % 3)
					+ (cellWidth - imgWidth) / 2, cellHeight * (i / 3)
					+ (cellHeight - maxHeight) / 2, Graphics.TOP
					| Graphics.LEFT);
			int fontWidth = Font.getDefaultFont().stringWidth(menuName[i]);
			g.drawString(menuName[i], cellWidth * (i % 3)
					+ (cellWidth - fontWidth) / 2, cellHeight * (i / 3)
					+ (cellHeight - maxHeight) / 2 + imgHeight + 1,
					Graphics.TOP | Graphics.LEFT);
			if (i == focus) {
				g.drawRect(cellWidth * (i % 3) + (cellWidth - imgWidth) / 2,
						cellHeight * (i / 3) + (cellHeight - maxHeight) / 2,
						imgWidth + 1, imgHeight + 1);
			}
		}
	}

	public void keyPressed(int key) {
		int action = getGameAction(key);
		switch (action) {
		case FIRE:
			Alert alert = new Alert("You select:", menuName[focus],
					menuImg[focus], AlertType.INFO);
			alert.setTimeout(Alert.FOREVER);
			break;
		case UP:
			focus = focus - 3;
			if (focus < 0) {
				focus = focus + 9;
			}
			break;
		case DOWN:
			focus = focus + 3;
			if (focus >= 9) {
				focus = focus - 9;
			}
			break;
		case LEFT:
			if (focus == 0) {
				focus = 8;
			} else {
				focus = (--focus) % 9;
			}
			break;
		case RIGHT:
			focus = (++focus) % 9;
			break;
		}
		repaint();
		serviceRepaints();
	}

	public void commandAction(Command c, Displayable dpa) {
		if (c == exit) {
		}
	}
}

 

分享到:
评论

相关推荐

    Android-数独游戏实验报告.pdf

    使 1-9 每个数 字在每一行、每一列和每一宫中都只出现一次,所以又称"九宫格" 。谜题中会 预先填入 若干数字,它宫位则留白,玩家得依谜题中的数字分布状况,逻辑推 敲出剩下的空格里是什么数字 2. 该数独游戏是基于...

    c语言开发实例详解(2个上传包).part1

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    c语言开发实例详解(2个上传包).part2

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    C语言开发实例详解 PDF版 part6

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    C语言开发实例详解 PDF版 part1

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    C语言开发实例详解 PDF版 part2

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    C语言开发实例详解 PDF版 part5

    实例四 智力九宫格 第七篇 加密解密篇 实例一 数据库文件加密 实例二 还原加密的Fox文件 实例三 伪随机数加解密 实例四 口令加密法 实例五 激光加密法 第八篇 程序界面篇 实例一 小日历 实例二 下拉式菜单 实例...

    超实用的jQuery代码段

    10.13 使用网格打造简单的九宫格界面 10.14 可动态隐藏的页眉和页脚 10.15 最简单的手机相册 10.16 在列表框上添加气泡提示 10.17 在列表框上添加自定义按钮 10.18 为列表添加自定义的缩略图图标 10.19 创建列表日历...

    大量批处理实用程序例程

    九宫格图案.cmd 勾股数算法.cmd 去掉数值中可能存在的负号.cmd 去最大最小值后求剩余数组平均值.cmd 对数字进行排序.cmd 把一个数拆分为几个数的和.cmd 无限制实数加减运算脚本.cmd 水仙花数算法.cmd 求一列数所有...

Global site tag (gtag.js) - Google Analytics