Không phải là phim đâu, mà là một trò chơi đơn giản: nhân vật của chúng ta sẽ rơi xuống vào một rừng mũi tên đang bắn lên, chúng ta sẽ điều khiển để nhân vật đừng chạm vào mũi tên nào hết. các bạn cần có 3 file sau, tôi đã chú thích trong từng file hết rồi, chắc các bạn cũng hiểu thôi.
Đầu tiên là file muiten.java
muiten.java
C:\Users\thanhliem\Documents\NetBeansProjects\SkyFall\src\muiten.java |
import javax.microedition.lcdui.*;
import java.util.*;
public class muiten {
int w, h, x, y, len, speed;
long lm = 0;
Random rd = new Random();
byte[][] mim = {
{0, 1, 0},
{1, 1, 1}},
dim = {{1, 0, 1}};
public muiten(int w, int h, int rd) {
this.w = w;
this.h = h;
this.rd = new Random(rd);
general();
}
public void general() {
x = Math.abs(rd.nextInt()) % w;
y = h + 3;
len = Math.abs(rd.nextInt()) % (h / 10);
speed = Math.abs(rd.nextInt()) % 3 + 2;
}
public void draw(Graphics g) {
int ocl = g.getColor();
g.setColor(ocl & 0xff);
drawmuiten(g);
g.setColor(ocl);
if (lm < System.currentTimeMillis() - 20) {
y -= speed;
lm = System.currentTimeMillis();
}
if (y < -h / 10) {
general();
}
}
boolean check(int x, int y, int w, int h) {
int sx = (this.x - x);
int sy = (this.y - y);
if (sx > 0 && sy > 0 && sx <= w && sy <= h) {
return true;
}
return false;
}
public void drawmuiten(Graphics g) {
for (int i = 0; i < mim.length; i++) {
for (int j = 0; j < mim[0].length; j++) {
if (mim[i][j] != 0) {
g.fillRect(x + j, y + i, 1, 1);
}
}
}
g.drawLine(x + 1, y, x + 1, y + len);
for (int i = 0; i < dim.length; i++) {
for (int j = 0; j < dim[0].length; j++) {
if (dim[i][j] != 0) {
g.fillRect(x + j, y + len + i, 1, 1);
}
}
}
}
}
Tiếp theo đó là file skyfall.java:
skyfall.java
C:\Users\thanhliem\Documents\NetBeansProjects\SkyFall\src\skyfall.java |
import javax.microedition.lcdui.*;
import java.util.*;
public class skyfall extends Canvas {
muiten[] mt = new muiten[10];
Midlet m;
Random rd = new Random();
int w, h, x, y, t = 0, k;
Image man;
boolean move = false, chan = true, over = false;
long lm;
public skyfall(Midlet m) {
try {
this.m = m;
setFullScreenMode(true);
for (int i = 0; i < mt.length; i++) {
mt[i] = new muiten(getWidth(), getHeight(), t);
t = rd.nextInt();
}
y = getHeight() / 2;
x = getWidth() / 2;
man = Image.createImage("/man.png");
} catch (Exception e) {
}
}
public void paint(Graphics g) {
over = over();
if (move && lm < System.currentTimeMillis() - 10) {
if (k == -3 || k == KEY_NUM4) {
x--;
}
if (k == -4 || k == KEY_NUM6) {
x++;
}
lm = System.currentTimeMillis();
}
g.setColor(0x90b5ff);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawRegion(man, chan ? 0 : 16, 0, 16, 32, 0, x, y, Graphics.TOP | Graphics.LEFT);
chan = !chan;
g.setColor(0xff);
for (int i = 0; i < mt.length; i++) {
mt[i].draw(g);
}
if (over) {
} else {
repaint();
}
}
boolean over() {
for (int i = 0; i < mt.length; i++) {
if (mt[i].check(x, y, 16, 32)) {
return true;
}
}
return false;
}
public void keyPressed(int k) {
move = true;
this.k = k;
if (k == -7) {
m.notifyDestroyed();
}
}
public void keyReleased(int k) {
move = false;
}
}
Và cuối cùng là cho hiển thị thông qua một Midlet.java như ta vẫn thường hay dùng:
Midlet.java
C:\Users\thanhliem\Documents\NetBeansProjects\SkyFall\src\Midlet.java |
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
@author
public class Midlet extends MIDlet {
public void startApp() {
Display.getDisplay(this).setCurrent(new skyfall(this));
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Các bạn thấy đó, rất là đơn giản phải không nào, để trò chơi thêm phần hấp dẫn bạn có thể thêm biến điểm tính theo lượt những mũi tên được tạo lại sau mỗi lần general mới, trong muiten.java hay là thêm thắt những thứ khác nữa như mạng, vật phẩm chẳng hạn.
và đây là
file source và
jar.
Không có nhận xét nào:
Đăng nhận xét