汉诺塔程序的j2me实现(触摸屏)
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class Hanoi extends MIDlet {
Display display;
MyCanvas canvas;
public Hanoi() {
display = Display.getDisplay(this);
canvas = new MyCanvas();
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
display.setCurrent(canvas);
}
}
Canvas:
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public class MyCanvas extends Canvas {
public int width, height;
public int w, h;
public final int max = 7;
public int px[];
public Stack[] pos;
public int select = -1;
public MyCanvas() {
setFullScreenMode(true);
width = getWidth();
height = getHeight();
w = width / 3;
h = height / max / 2;
px = new int[] { w / 2, w * 3 / 2, w * 5 / 2 };
pos = new Stack[3];
pos[0] = new Stack(max);
pos[1] = new Stack(max);
pos[2] = new Stack(max);
for (int i = max; i > 0; i--) {
pos[0].push(i);
}
}
protected void paint(Graphics g) {
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
g.setColor(0);
for (int j = 0; j < 3; j++) {
g.drawLine(px[j], height / 2, px[j], height);
for (int i = 0, len = pos[j].size(); i < len; i++) {
int v = pos[j].get(i);
g.drawRect(px[j] - w * v / max / 2, height - (i + 1) * h, w * v
/ max, h);
}
}
}
protected void pointerPressed(int x, int y) {
if (select != -1) {
if (select != x / w) {
move(select, x / w);
select = -1;
}
} else {
select = x / w;
}
}
public void move(int from, int to) {
System.out.println("from:" + from + " to:" + to);
int f;
int t;
if (pos[from].isEmpty()) {
f = 0;
} else {
f = pos[from].peek();
}
if (pos[to].isEmpty()) {
t = 0;
} else {
t = pos[to].peek();
}
System.out.println(f + "," + t);
if (t == 0) {
pos[from].pop();
pos[to].push(f);
} else if (t > f) {
pos[from].pop();
pos[to].push(f);
} else {
System.out.println("不能移动");
}
repaint();
}
}
Stack:
public class Stack {
public final int SIZE;
public int[] st;
public final int Bottom;
public int top;
public Stack(int size) {
SIZE = size;
st = new int[SIZE];
top = Bottom = 0;
}
public void push(int v) {
st[top] = v;
top++;
}
public int pop() {
return st[--top];
}
public int peek() {
if (isEmpty()) {
return 0;
}
return st[top - 1];
}
public boolean isEmpty() {
return top == Bottom;
}
public int size() {
return top;
}
public int get(int index) {
return st[index];
}
public boolean isFull() {
return top == Bottom;
}
}
分享到:
相关推荐
c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序c语言实现的汉诺塔演示程序...
Scratch汉诺塔创意编程源程序汉若塔:由4-8个不同积木块和3根柱子组成游戏规则:1、一次只能移一个积木(柱子最上面)2、积木只能在三个柱子上存放3、任何时刻不允许大的压小的案例完美的诠释了什么是汉诺塔游戏,...
在C#中实现汉诺塔程序,首先我们需要理解递归的概念。递归是一种解决问题的方法,它将问题分解为更小的相同或相似子问题,直到问题规模足够小,可以直接求解。汉诺塔问题的解决非常适合使用递归,因为我们可以将n个...
汉诺塔程序
这个课程设计的主要目标是通过实现汉诺塔问题的解决方案,提高学生的编程技能,尤其是对Java语言的理解和实际操作能力。 汉诺塔问题源自一个古老的印度传说,涉及三个柱子和一堆大小不一的圆盘。初始时,所有圆盘按...
汉诺塔是一个经典的递归问题,...通过阅读代码,我们可以看到如何将理论的汉诺塔算法与Java GUI编程结合在一起,实现了一个交互式的汉诺塔游戏。这对于学习Java编程、递归算法以及图形用户界面设计都是很好的实践案例。
### 汉诺塔问题算法及其实现 #### 概述 汉诺塔问题是一个经典的递归算法案例,它不仅在计算机科学领域有着广泛的应用,同时也被用来教授递归思想的基础知识。这个问题最早由法国数学家Édouard Lucas于1883年提出,...
---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码---
通过python语言实现的汉诺塔程序。汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按...
汉诺塔 c语言编写的汉诺塔程序,C语言初学者必会
汉诺塔程序是一种基于经典数学游戏的编程实现,它的核心是解决如何将一叠盘子从一根柱子移动到另一根柱子上,遵循以下规则: 1. **汉诺塔游戏规则**: - 游戏由三根柱子A、B、C组成,A柱上有一叠n个大小不一的盘子...
汉诺塔问题的Java实现涉及到了递归算法和面向对象编程的概念。 首先,我们需要定义一个`HanoiTower`类来表示汉诺塔的结构。这个类可以包含三个属性,分别代表三根柱子,以及一个方法用于执行移动操作。移动操作又...
汉诺塔演示程序结合了二叉树的演示动画,为学习和理解这两种计算机科学基础知识提供了一个生动直观的方式。首先,我们来深入探讨一下汉诺塔问题及其解决方案。 汉诺塔是一个经典的递归问题,由三个柱子和一堆大小...
在本例中,作者选择了使用AWT库来实现汉诺塔演示程序。AWT(Abstract Window Toolkit)是Java最早的GUI工具包之一,它允许开发者构建平台独立的GUI应用程序。 ### 3. AWT组件及事件处理 #### 组件: - **Frame**:...
"实验八_VRML3-1移动汉诺塔"是一个使用VRML实现的汉诺塔游戏示例。它可能包含了一个或多个.wrl文件,这是VRML的标准文件格式,用于存储3D场景和交互逻辑。通过使用VRMLpad这样的工具,我们可以查看和编辑这些文件,...
datastruct.c :汉诺塔结构与可进行的操作的实现方法<由datastruct.h导出>; 方案2:图形界面 graphics.h :汉诺塔实体模拟-结构形式及可对塔进行的操作的接口>; graphics.c :汉诺塔实体模拟-结构形式及可对塔...
总的来说,这个C#实现的汉诺塔程序结合了递归算法和图形用户界面设计,提供了一个直观且交互性强的学习和演示工具,有助于理解递归思想和C#编程实践。无论是对编程初学者还是有经验的开发者,都能从中受益,加深对...
用java实现汉诺塔程序,输出移动到第n步时,各处的状态
//程序实现了mystack栈的声明和定义,并且通过函数 //move_stacks的递归调用和函数move_a_ring实现汉 //诺塔的算法,并用函数print_stacks和pr_chars实现汉诺 //塔的动画效果