汉诺塔程序的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语言实现的汉诺塔演示程序...
汉诺塔模拟程序汉诺塔模拟程序汉诺塔模拟程序汉诺塔模拟程序
汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序汉诺塔演示程序
汉诺塔程序
汉诺塔源程序算法 汉诺塔源程序算法 汉诺塔源程序算法 汉诺塔源程序算法
---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码--- ---汉诺塔源代码---
通过python语言实现的汉诺塔程序。汉诺塔问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按...
汉诺塔 c语言编写的汉诺塔程序,C语言初学者必会
汉诺塔演示程序 java程序源代码汉诺塔演示程序 java程序源代码
datastruct.c :汉诺塔结构与可进行的操作的实现方法<由datastruct.h导出>; 方案2:图形界面 graphics.h :汉诺塔实体模拟-结构形式及可对塔进行的操作的接口>; graphics.c :汉诺塔实体模拟-结构形式及可对塔...
用java实现汉诺塔程序,输出移动到第n步时,各处的状态
汉诺塔 演示程序 二叉树 演示动画 实现动态的观看到汉诺塔的盘子移动过程,动态的观看到树的遍历过程,树的查找过程
//程序实现了mystack栈的声明和定义,并且通过函数 //move_stacks的递归调用和函数move_a_ring实现汉 //诺塔的算法,并用函数print_stacks和pr_chars实现汉诺 //塔的动画效果
该系统所用语言为C#实现汉诺塔的演示,可以选择盘的个数,同时记录每一步的步骤,也可以调节程序运行的快慢,拥有暂停功能。
汉诺塔小游戏
使用C#实现的汉诺塔程序源码,有获取用户输入的WinForm界面,有可直接运行的exe程序。
js手写实现汉诺塔和移动过程和控制台树形结构
汉诺塔问题C语言实现
汉诺塔的非递归实现,c++实现的,很简单,只有50多行,从递归的汉诺塔改编而来,将原来递归时的参数状态保存在栈中,入栈代替递归,出栈代替递归返回。
VC++汉诺塔程序,MFC