`

九宫格菜单算法

    博客分类:
  • 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) {
		}
	}
}

 

分享到:
评论

相关推荐

    微信群聊生成九宫格形式的头像

    九宫格是一种将9个元素以3行3列的形式排列的布局方式,常见于各种应用的菜单、设置界面或展示用户头像的场景。在Android开发中,可以使用GridView控件或者自定义布局来实现这种布局。 1. GridView控件:这是Android...

    九宫格布局解码

    九宫格布局通常用于展示一系列图标或功能,使得用户可以快速浏览和选择,比如应用启动页的快捷方式、设置菜单、或者图片库等。这种布局将屏幕分为9个相等大小的单元格,每个单元格可以承载一个图标或者操作项。 ...

    有图形显示的完整九宫格c++程序

    标题中的“有图形显示的完整九宫格c++...源代码文件可能涵盖了九宫格的生成、检查合法性和自动填充算法,而资源文件则用于构建GUI界面。对于想要学习C++ GUI编程或数独游戏实现的开发者来说,这是一个很好的学习资源。

    九宫格游戏 MFC 可手动

    3. **九宫格逻辑**:实现九宫格游戏的算法,包括验证数字的唯一性,以及如何生成和解决谜题。 4. **手动和自动演示**:编程实现用户交互模式和自动演示模式,这涉及到状态管理、计时器和动画效果的使用。 5. **文件...

    VC++九宫格拼图游戏源代码.7z

    《VC++实现的九宫格拼图游戏源代码解析》 在编程世界中,源代码是程序员的语言,它记录了程序的设计思路、算法实现以及逻辑结构。本篇将深入探讨一款基于VC++编写的九宫格拼图游戏的源代码,帮助读者理解C++编程在...

    VB九宫格拼图源码

    2. **Form1.frm**: 这是主窗体文件,通常包含游戏界面的设计,如九宫格的布局、按钮、菜单等元素。在这里,开发者会定义控件的属性、事件处理程序,比如点击按钮后的响应,用户拖动方块时的交互逻辑等。玩家与游戏的...

    九宫格(数独)游戏源代码

    【标题】"九宫格(数独)游戏源代码"是一个关于编程开发的项目,它提供了实现数独游戏的核心逻辑和界面交互的源代码。数独是一种基于逻辑推理的单人益智游戏,通常在9x9的网格上进行,其中部分单元格预先填有数字,...

    java实现的数字九宫格棋盘游戏

    7. **算法和逻辑**: 游戏的核心部分是数字九宫格的逻辑实现,这可能涉及到一些算法,比如检查玩家的每一步是否合法,判断游戏结束的条件,或者实现AI对手的决策策略等。 8. **错误处理和调试**: 为了确保程序的健壮...

    java课程设计九宫格数独.doc

    Java课程设计中的九宫格数独项目主要涉及的是利用编程技术实现数独游戏的逻辑和交互界面。数独是一种逻辑推理游戏,玩家需要在9x9的网格中填充1到9的数字,使得每行、每列以及9个3x3的小宫格内数字都不重复。以下是...

    九宫重排动态演示压缩文件

    NineGird.h 可能包含了九宫格重排问题的函数声明,而 resource.h 可能是资源文件的头文件,包含了程序界面元素如菜单、对话框等的定义。 6. StdAfx.h:这个文件通常引用了预编译头文件(通常命名为 stdafx.h),并...

    mfc 八数码 九宫 智能系统试验

    综合以上分析,这个项目是一个利用MFC库开发的智能系统,用于解决八数码问题的九宫格版本,具备可视化界面和高效的求解算法。它的成功实现不仅展示了MFC库的使用技巧,还涵盖了算法设计和优化方面的知识。

    JAVA 数独游戏代码

    - **menu_file、menu_edit、menu_help**:分别为文件菜单、编辑菜单和帮助菜单。 - **item_ans、item_sol、item_rem、item_next、item_auther、item_exit**:分别代表答案、解决、提示、下一题、作者和退出菜单项...

    c++ 写的一个数独游戏

    数独游戏是一款基于逻辑思维的数字填充游戏,它在9x9的大九宫格中划分为9个3x3的小九宫格。每个大九宫格和小九宫格内部,1到9的数字不能重复出现。玩家的任务是根据已给出的数字,推理并填满整个网格。本项目是使用...

    C# 八格(九格)拼图小游戏

    《C#实现八格(九格)拼图...通过这个项目,开发者不仅可以熟悉C#的基础语法和WinForms控件,还能提升解决问题和设计算法的能力。同时,这也是一个很好的社区交流话题,可以与志同道合的程序员一起分享经验,共同进步。

    控制台数独游戏

    数独是一种广受欢迎的逻辑推理游戏,它基于一个9x9的网格,被分为9个3x3的小九宫格。每个小九宫格、每一行、每一列都必须填入1到9的数字,且每个数字在每行、每列和每个小九宫格内只能出现一次。在本项目中,...

    vb6拼图4.0(含源码)

    2. **图形用户界面(GUI)设计**:游戏界面的创建,包括拼图面板、菜单、控制按钮等元素的布局和交互设计。 3. **图像处理**:将原始图片分割为小块,以及在用户操作下显示和移动这些图片块。 4. **算法设计**:...

    基于Android的数独游戏设计说明.doc

    在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的开机动画、菜单界面、屏幕绘制、时间控制、布局算法等进行了设计。文章还详细介绍了在Android平台上以Java为语言编写游戏的过程,最终实现...

    vb编写数独源码

    验证算法检查一个给定的数独模型是否合法,即检查每一行、每一列和每一个小九宫格内是否有重复数字。填充算法则用于解决空缺的数独网格,常见的方法有回溯法或递归深度优先搜索(DFS)。 1. **图形用户界面设计**:...

    android 数独游戏源码

    数独是一种广受欢迎的逻辑推理游戏,它基于9x9的格子,分为9个3x3的小九宫格。每个大九宫格内都应填入数字1至9,使得每一行、每一列和每一个小九宫格内的数字都不重复。在Android平台上开发数独游戏,涉及到的主要...

Global site tag (gtag.js) - Google Analytics