📄 rpgprojectcanvas.java
字号:
import java.util.Random;
import java.util.Vector;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.media.MediaException;
public class RPGprojectcanvas extends GameCanvas implements Runnable {
int screenwidth = getWidth();
int screenheight = getHeight();
int imgbackgroundwidth = 512;
int imgbackgroundheight = 512;
Thread t;
Random r;
Vector vectormessage;
Vector vectorpicture;
LayerManager lmscene1, lmscene2;
String missionmessage;
Mainrole mrole;
Load load;
Graphics g;
String curmessage;
Image curpicture;
boolean catchcat = false;
boolean catchcat2 = false;
boolean showyesorno = false;
boolean mainroleanswer = false;
int scene=1; //check for scene
int inputmode = 0;
boolean iscollide = false;
int screenx, screeny;
int tempx = 0, tempy = 0;
int lastscreenx, lastscreeny;
int selecty = 152;
protected RPGprojectcanvas() { //构造函数,初始类
super(true);
g = getGraphics();
r = new Random();
t = new Thread(this);
vectormessage = new Vector();
vectorpicture = new Vector();
load = new Load();
curmessage = null;
missionmessage = null;
curpicture = null;
// if (scene==1)
mrole = new Mainrole(load.imgrole, 16, 24, 50, 50,80,153);
// else if (scene==2)
// mrole = new Mainrole(load.imgrole, 16, 24, 80, 153);
lmscene1 = new LayerManager();
lmscene2 = new LayerManager();
try {
// addendshowtalk();
load.p.start();
} catch (MediaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t.start();
}
int getrand(int m) {
int n = r.nextInt();
if (n < 0)
n *= -1;
n %= m;
return n;
}
public void screenmove(int increasex, int increasey) { //屏幕移动函数
screenx = screenx + increasex;
screeny = screeny + increasey;
lastscreenx = increasex;
lastscreeny = increasey;
}
void screenunmove() {//屏幕负移动函数
screenmove(-lastscreenx, -lastscreeny);
}
void draw() { //绘画函数
//清屏
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
//设置window
if (scene==1)
{
lmscene1.setViewWindow(screenx, screeny, screenwidth, screenheight);
append();
lmscene1.paint(g, 0, 0);}
else if (scene==2)
{
mrole.setPosition(mrole.roomx, mrole.roomy);
lmscene2.setViewWindow(0, 0, screenwidth, screenheight);
append2();
lmscene2.paint(g, 0, 0);
}
//显示对话
drawmessage();
if (showyesorno == true) {
drawlist();
}
if (missionmessage != null) {
g.setColor(255, 255, 255);
g.drawString(missionmessage, 0, 0, 0);
}
flushGraphics();
}
public void nextmessage() {
if (vectormessage.size() > 0 && vectorpicture.size() > 0)
{
curpicture = (Image) vectorpicture.elementAt(0);
curmessage = (String) vectormessage.elementAt(0);
}
if (Math.abs(tempx - mrole.x) > 4 || Math.abs(tempy - mrole.y) > 4) {
curmessage = null;
vectormessage.removeAllElements();
vectorpicture.removeAllElements();
showyesorno = false;
iscollide = false;
}
}
// 绘制对话函数
public void drawmessage() {
if (curmessage != null) {
///////*********************/////////
g.setColor(0, 0, 100);
g.fillRect(0, getHeight() - 40, getWidth(), 40);
////////////****************////////////
g.drawImage(curpicture, 0, getHeight() - 40, 0);
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_MEDIUM);
g.setFont(f);
g.setColor(255, 255, 255);
if (curmessage.length() <= getWidth() / 12) {
g.drawString(curmessage, 37, getHeight() - 40, 0);
} else {
int length = curmessage.length();
int len = getWidth() / 12;
int y = getHeight() - 40;
int offset = 0;
while (length > 0) {
g.drawSubstring(curmessage, offset, len, 37, y, 0);
y += 12;
offset += getWidth() / 12;
length -= getWidth() / 12;
if (length > getWidth() / 12) {
len = getWidth() / 12;
} else {
len = length;
}
}
}
Font ff = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL);
g.setFont(ff);
g.setColor(255, 255, 255);
g.drawString("Push FIRE", 130, getHeight() - 10, 0);
}
}
//碰撞检测
void collidetest() {
mrole.setPosition(mrole.x, mrole.y);
// mrole.setPosition(mrole.roomx, mrole.roomy);
if (mrole.collidesWith(load.property[0], true)) {
screenunmove();
mrole.unmove();
mrole.setPosition(mrole.x, mrole.y);
catchcat = true;
} else {
catchcat = false;
}
if (mrole.collidesWith(load.imgmap1, true)) {
screenunmove();
mrole.unmove();
mrole.setPosition(mrole.x, mrole.y);
}
if (mrole.collidesWith(load.maproom1layer2, false)) {
scene=1;
inputmode=0;
}
if (mrole.collidesWith(load.maproom1layer1, true)) {
mrole.unmoveroom();
}
if (mrole.collidesWith(load.imgmap3, true)) {
scene=2;
inputmode=2;
// load.maproom1layer2.setVisible(true);
// load.maproom1layer1.setVisible(true);
// load.maproom1ground.setVisible(true);
}
for (int i = 0; i < load.vectornpc.size(); i++) {
Npc npc = (Npc) load.vectornpc.elementAt(i);
if (mrole.collidesWith(npc, true)) {
tempx = mrole.x;
tempy = mrole.y;
mrole.unmove();
screenunmove();
mrole.setPosition(mrole.x, mrole.y);
if (npc.name == "老人" && catchcat2 == true) {
String temp2 = npc.name + ":" + npc.message2;//加入npc对话
vectormessage.addElement(temp2);
Image tempimage2 = npc.img;
vectorpicture.addElement(tempimage2);
missionmessage = "任务完成";
}
else if (npc.name=="老人" )
{
String temp = npc.name + ":" + npc.message1;//加入npc对话
vectormessage.addElement(temp);
Image tempimage = npc.img;
vectorpicture.addElement(tempimage);
iscollide = true;
}else {
String temp = npc.name + ":" + npc.message1;//加入npc对话
vectormessage.addElement(temp);
Image tempimage = npc.img;
vectorpicture.addElement(tempimage);
}
}
}
}
public void drawlist() {
g.setColor(0, 0, 100);
g.fillRect(0, getHeight() - 40, getWidth(), 40);
g.setColor(255, 255, 128);
g.drawString("好的", 10, getHeight() - 30, 0);
g.drawString("不了", 10, getHeight() - 20, 0);
g.setColor(255, 255, 0);
g.fillArc(5, selecty, 5, 5, 0, 360);
Font ff = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_SMALL);
g.setFont(ff);
g.setColor(255, 255, 255);
g.drawString("Push FIRE", 130, getHeight() - 10, 0);
}
public void append()
{
lmscene1.append(mrole);
lmscene1.append(load.npc[0]);
lmscene1.append(load.npc[1]);
lmscene1.append(load.npc[2]);
lmscene1.append(load.property[0]);
lmscene1.append(load.imgmap1);
lmscene1.append(load.imgmap2);
lmscene1.append(load.imgmap3);
lmscene1.append(load.mapbackground);
}
public void append2()
{
lmscene2.append(mrole);
lmscene2.append(load.maproom1layer2);
lmscene2.append(load.maproom1layer1);
lmscene2.append(load.maproom1ground);
}
//输入函数,负责主角和屏幕的移动
//主线成,
public void run() {
while (true) {
nextmessage();
input();
collidetest();
draw();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
void input() {
int key = getKeyStates();
if (inputmode == 0) {
if ((key & FIRE_PRESSED) != 0) {
if (catchcat == true) {
load.property[0].setVisible(false);
catchcat2 = true;
} else {
if (iscollide == true) {
showyesorno = true;
inputmode = 1;
}
}
}
if ((key & UP_PRESSED) != 0) {
mrole.setFrame(mrole.directionup++);
if (mrole.directionup > 15)
mrole.directionup = 12;
if (mrole.y - 4 <= 0)
mrole.y = 0;
else
mrole.move(0, -4);
if (screeny - 4 > 0)
screenmove(0, -4);
else
screeny = 0;
}
if ((key & DOWN_PRESSED) != 0) {
mrole.setFrame(mrole.directiondown++);
if (mrole.directiondown > 3)
mrole.directiondown = 0;
if (mrole.y + 24 + 4 >= imgbackgroundheight)
mrole.y = imgbackgroundheight - 24;
else
mrole.move(0, 4);
if (screeny + 4 + screenheight < imgbackgroundheight)
screenmove(0, 4);
else
screeny = imgbackgroundheight - 3 - 177;
}
if ((key & LEFT_PRESSED) != 0) {
mrole.setFrame(mrole.directionleft++);
if (mrole.directionleft > 7)
mrole.directionleft = 4;
if (mrole.x - 4 <= 0)
mrole.x = 0;
else
mrole.move(-4, 0);
if (screenx - 4 > 0)
screenmove(-4, 0);
else
screenx = 0;
}
if ((key & RIGHT_PRESSED) != 0) {
mrole.setFrame(mrole.directionright++);
if (mrole.directionright > 11)
mrole.directionright = 8;
if (mrole.x >= imgbackgroundwidth - 16 - 4)
mrole.x = imgbackgroundwidth - 16;
else
mrole.move(4, 0);
if (screenx + 4 + screenwidth < imgbackgroundwidth)
screenmove(4, 0);
else
screenx = imgbackgroundwidth - 4 - screenwidth;
}
}
else if (inputmode == 1) {
if ((key & DOWN_PRESSED) != 0) {
selecty += 10;
if (selecty >= 162) {
selecty = 162;
}
}
if ((key & UP_PRESSED) != 0) {
selecty -= 10;
if (selecty <= 152) {
selecty = 152;
}
}
if ((key & FIRE_PRESSED) != 0) {
if (selecty == 152) {
mainroleanswer = true;
missionmessage = "帮助老人找他的猫";
}
if (selecty == 162)
mainroleanswer = false;
inputmode = 0;
}
}
else if (inputmode == 2)
{
if ((key & UP_PRESSED) != 0) {
mrole.setFrame(mrole.directionup++);
if (mrole.directionup > 15)
mrole.directionup = 12;
if (mrole.roomy - 4 <= 0)
mrole.roomy = 0;
else
mrole.moveroom(0, -4);
}
if ((key & DOWN_PRESSED) != 0) {
mrole.setFrame(mrole.directiondown++);
if (mrole.directiondown > 3)
mrole.directiondown = 0;
if (mrole.roomy + 24 + 4 >= 177)
{
mrole.roomy = 177 - 24;
}
else
mrole.moveroom(0, 4);
}
if ((key & LEFT_PRESSED) != 0) {
mrole.setFrame(mrole.directionleft++);
if (mrole.directionleft > 7)
mrole.directionleft = 4;
if (mrole.roomx - 4 <= 0)
mrole.roomx = 0;
else
mrole.moveroom(-4, 0);
}
if ((key & RIGHT_PRESSED) != 0) {
mrole.setFrame(mrole.directionright++);
if (mrole.directionright > 11)
mrole.directionright = 8;
if (mrole.roomx >= 180 - 16 - 4)
mrole.roomx = 180 - 16;
else
mrole.moveroom(4, 0);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -