J2ME例子-钢琴
来源:互联网 发布:ubuntu 中文语言包 编辑:程序博客网 时间:2024/04/27 16:14
/*
* PianoMIDlet.java
*
* Created on 2005年12月6日, 下午2:02
*/
package demo;
import javax.microedition.media.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class PianoMIDlet extends MIDlet {
public void startApp() {
Displayable d = new PianoCanvas();
d.addCommand(new Command("Exit", Command.EXIT, 0));
d.setCommandListener(new CommandListener() {
public void commandAction(Command c, Displayable s) {
notifyDestroyed();
}
});
Display.getDisplay(this).setCurrent(d);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
class PianoCanvas extends Canvas {
private static final int[] kNoteX = { 0, 11, 16, 29, 32, 48, 59, 64, 76,
80, 93, 96 };
private static final int[] kNoteWidth = { 16, 8, 16, 8, 16, 16, 8, 16, 8,
16, 8, 16 };
private static final int[] kNoteHeight = { 96, 64, 96, 64, 96, 96, 64, 96,
64, 96, 64, 96 };
private static final boolean[] kBlack = { false, true, false, true, false,
false, true, false, true, false, true, false };
private int mMiddleCX, mMiddleCY;
private int mCurrentNote;
public PianoCanvas() {
int w = getWidth();
int h = getHeight();
int fullWidth = kNoteWidth[0] * 8;
mMiddleCX = (w - fullWidth) / 2;
mMiddleCY = (h - kNoteHeight[0]) / 2;
mCurrentNote = 60;
}
public void paint(Graphics g) {
int w = getWidth();
int h = getHeight();
g.setColor(0xffffff);
g.fillRect(0, 0, w, h);
g.setColor(0x000000);
for (int i = 60; i <= 72; i++)
drawNote(g, i);
drawSelection(g, mCurrentNote);
}
private void drawNote(Graphics g, int note) {
int n = note % 12;
int octaveOffset = ((note - n) / 12 - 5) * 7 * kNoteWidth[0];
int x = mMiddleCX + octaveOffset + kNoteX[n];
int y = mMiddleCY;
int w = kNoteWidth[n];
int h = kNoteHeight[n];
if (isBlack(n))
g.fillRect(x, y, w, h);
else
g.drawRect(x, y, w, h);
}
private void drawSelection(Graphics g, int note) {
int n = note % 12;
int octaveOffset = ((note - n) / 12 - 5) * 7 * kNoteWidth[0];
int x = mMiddleCX + octaveOffset + kNoteX[n];
int y = mMiddleCY;
int w = kNoteWidth[n];
int h = kNoteHeight[n];
int sw = 6;
int sx = x + (w - sw) / 2;
int sy = y + h - 8;
g.setColor(0xffffff);
g.fillRect(sx, sy, sw, sw);
g.setColor(0x000000);
g.drawRect(sx, sy, sw, sw);
g.drawLine(sx, sy, sx + sw, sy + sw);
g.drawLine(sx, sy + sw, sx + sw, sy);
}
private boolean isBlack(int note) {
return kBlack[note];
}
public void keyPressed(int keyCode) {
int action = getGameAction(keyCode);
switch (action) {
case LEFT:
mCurrentNote--;
if (mCurrentNote < 60)
mCurrentNote = 60;
repaint();
break;
case RIGHT:
mCurrentNote++;
if (mCurrentNote > 72)
mCurrentNote = 72;
repaint();
break;
case FIRE:
try {
Manager.playTone(mCurrentNote, 1000, 100);
} catch (MediaException me) {
}
break;
default:
break;
}
}
}
- J2ME例子-钢琴
- J2ME例子-HelloWorld
- J2ME例子-SampleCanvas
- J2ME例子-象棋
- 钢琴
- J2ME 翻页例子
- j2ME 测试连网的例子
- eclipse导入J2ME中的例子
- j2me框架教程(1)--例子下载
- J2ME 解析wml数据的例子
- J2ME 3D地图纹理小例子
- 钢琴、大雪
- 怀念钢琴
- 键盘钢琴
- 手机钢琴
- 钢琴demo
- 360钢琴
- 超级钢琴
- [搞笑] 后舍男生最完美的视频收藏全纪录
- 如何用2.0发信?
- J2ME例子-HelloWorld
- 当你拥有一把用得顺手的锤子
- J2ME例子-SampleCanvas
- J2ME例子-钢琴
- 自己定义的格式
- J2ME例子-象棋
- 精通数据库系列之入门-基础篇(3)
- Windows下最好的C++ IDE
- 易速端口扫描程序
- C#实现输入页码跳转页面
- 没有任何借口
- 写点什么呢