📄 cmap.java
字号:
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
public class CMap implements Const {
private int mx = 0;
private int my = 0;
// 地图图片及战斗动画图片
private Image img = null;
private Image img_hero = null;
private Image img_npc = null;
private Image img_hero_big = null;
private Image img_npc_big = null;
private Image img_bg = null;
private Image img_magic = null;
private Image img_blood = null;
// 地图块宽高
public int block_w = 0;
public int block_h = 0;
// 行列数值
private int colTilesNum = 0;
private int rowTilesNum = 0;
// 底层及遮盖层地图数组
static int mapdata[][];
static int mapdata_overpl[][];
// 不可通过地形数组
static final int mapcol[] = { 22 };
// 游戏进程控制
public int talkcount = 0;
public int fightcount = 0;
public int underattack = 0;
// 游戏逻辑开关
public boolean s_isattack = false;
public boolean s_showmagic = false;
public boolean s_isunderattack = false;
/*
* 载入关卡资源
*/
void load(String str) {
DataInputStream dis = new DataInputStream(str.getClass()
.getResourceAsStream(str));
try {
int mapid = dis.readByte();
String mapname = "/map" + mapid + ".png";
System.out.println(mapname);
img = Image.createImage(mapname);
block_w = dis.readByte();
block_h = dis.readByte();
colTilesNum = dis.readByte();
rowTilesNum = dis.readByte();
mapdata = new int[colTilesNum][rowTilesNum];
mapdata_overpl = new int[colTilesNum][rowTilesNum];
for (int i = 0; i < colTilesNum; i++) {
for (int j = 0; j < rowTilesNum; j++) {
mapdata[i][j] = dis.readByte();
System.out.print(mapdata[i][j] + " ");
}
System.out.println("");
}
for (int i = 0; i < colTilesNum; i++) {
for (int j = 0; j < rowTilesNum; j++) {
mapdata_overpl[i][j] = dis.readByte();
System.out.print(mapdata_overpl[i][j] + " ");
}
System.out.println("");
}
dis.close();
img_hero = Image.createImage("/hero.png");
img_npc = Image.createImage("/hunt.png");
img_hero_big = Image.createImage("/girl.png");
img_npc_big = Image.createImage("/enemy.png");
img_bg = Image.createImage("/map4b1.png");
img_magic = Image.createImage("/magic.png");
img_blood = Image.createImage("/blood.png");
} catch (IOException e) {
e.printStackTrace();
}
}
// 绘制底层地图
void draw(Graphics g) {
for (int i = 0; i < mapdata.length; i++) {
for (int j = 0; j < mapdata[i].length; j++) {
if (mapdata[i][j] != 0 && (mx + block_w * j >= 0)
&& (mx + block_w * j - Const.SCREEN_WIDTH <= 0)
&& (my + block_h * i >= 0)
&& (my + block_h * i - Const.SCREEN_HEIGHT <= 0)) {
int tempx = mapdata[i][j] % (img.getWidth() / block_w);
int tempy = mapdata[i][j] / (img.getWidth() / block_w);
g.setClip(mx + block_w * j, my + block_h * i, block_w,
block_h);
g.drawImage(img, mx + block_w * j - block_w * tempx, my
+ block_h * i - block_h * tempy, 0);
}
}
}
}
// 绘制遮盖层地图
void drawOverpl(Graphics g) {
for (int i = 0; i < mapdata_overpl.length; i++) {
for (int j = 0; j < mapdata_overpl[i].length; j++) {
if ((mapdata_overpl[i][j] != 0) && (mx + block_w * j >= 0)
&& (mx + block_w * j - Const.SCREEN_WIDTH <= 0)
&& (my + block_h * i >= 0)
&& (my + block_h * i - Const.SCREEN_HEIGHT <= 0)) {
int tempx = mapdata_overpl[i][j]
% (img.getWidth() / block_w);
int tempy = mapdata_overpl[i][j]
/ (img.getWidth() / block_w);
g.setClip(mx + block_w * j, my + block_h * i, block_w,
block_h);
g.drawImage(img, mx + block_w * j - block_w * tempx, my
+ block_h * i - block_h * tempy, 0);
}
}
}
}
// 移动地图
void trans(int dx, int dy) {
mx += dx;
my += dy;
}
// 关卡对话文本
private String texts[] = { "士兵甲:你好!有什么事吗?", "男主角:没事,我就是想揍你一顿!",
"士兵甲:这么自信?那就来吧", "男主角:那我就不客气了,变身!!", "士兵甲:可恶,我输了。。。",
"男主角:这下知道我的厉害了吧!哈哈" };
// 绘制谈话
public void drawTalk(Graphics g) {
if (CGame.playstatus != PLAY_TALK)
return;
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.setColor(Const.BLACK);
if (talkcount < 8 && talkcount != 5)
g.fillRect(0, SCREEN_HEIGHT >> 1, SCREEN_WIDTH, 20);
System.out.println(talkcount);
switch (talkcount) {
case 1:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[0], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_npc, 0, (SCREEN_HEIGHT >> 1) - img_npc.getHeight(),
0);
break;
case 2:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[1], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_hero, 0, (SCREEN_HEIGHT >> 1)
- img_hero.getHeight(), 0);
break;
case 3:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[2], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_npc, 0, (SCREEN_HEIGHT >> 1) - img_npc.getHeight(),
0);
break;
case 4:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[3], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_hero, 0, (SCREEN_HEIGHT >> 1)
- img_hero.getHeight(), 0);
break;
case 5:
CGame.playstatus = PLAY_FIGHT;
talkcount++;
break;
case 6:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[4], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_npc, 0, (SCREEN_HEIGHT >> 1) - img_npc.getHeight(),
0);
break;
case 7:
g.setColor(WHITE);
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
g.drawString(texts[5], 0, SCREEN_HEIGHT >> 1, 0);
g.drawImage(img_hero, 0, (SCREEN_HEIGHT >> 1)
- img_hero.getHeight(), 0);
break;
case 8:
CGame.playstatus = PLAY_NORMAL;
CGame.npc.islive = false;
break;
}
}
// 绘制战斗
public void drawFight(Graphics g) {
if (CGame.playstatus != PLAY_FIGHT)
return;
if (fightcount < 20) {
g.setClip(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 12; j++) {
if (j % 2 == (i % 2 == 1 ? 1 : 0)) {
g.setColor(BLACK);
g.fillRect(j * 20, i * 20, fightcount, 20);
} else {
g.setColor(BLACK);
g.fillRect(j * 20, i * 20, 20, fightcount);
}
}
}
fightcount++;
} else {
g.setColor(BLACK);
g.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
for (int i = 0; i < 8; i++)
g.drawImage(img_bg, i * (img_bg.getWidth()),
SCREEN_HEIGHT >> 1, 0);
g.drawRegion(img_hero, 0, 0, img_hero.getWidth(), img_hero
.getHeight(), Sprite.TRANS_MIRROR, SCREEN_WIDTH
- img_hero.getWidth(), 10, 0);
for (int i = 0; i < 3; i++)
g.drawImage(img_blood, SCREEN_WIDTH - img_blood.getWidth()
* (i + 1), 55, 0);
g.drawImage(img_npc, 0, 10, 0);
for (int i = 0; i < 3 - underattack; i++)
g.drawImage(img_blood, img_blood.getWidth() * i, 55, 0);
drawAnimation(g);
fightcount++;
}
}
// 绘制动画
int frameindex = 0;
int magicindex = 0;
private void drawAnimation(Graphics g) {// w=52 h=56 total 6 frame
int w = img_hero_big.getWidth() / 3;
int h = img_hero_big.getHeight() / 2;
g.setClip(160, 150, w, h);
g.drawImage(img_hero_big, 160 - (frameindex % 3) * w, 150
- (frameindex / 3) * h, 0);
if (!s_isattack && fightcount % 3 == 0) {
frameindex = (frameindex + 1) % 2;
}
if (s_isattack && fightcount % 4 == 0) {
frameindex = (frameindex + 1) % 4 + 2;
if (frameindex == 5 && fightcount % 4 == 0) {
s_isattack = false;
s_isunderattack = false;
}
}
if (underattack < 3) {
g.setClip(50 + (s_isunderattack ? (fightcount % 2 == 0 ? -3 : 3)
: 0), 140, img_npc_big.getWidth(),
img_npc_big.getHeight() / 3);
g.drawImage(img_npc_big, 50, 140, 0);
}
if (s_showmagic) {
g.setClip(30, 126, img_magic.getWidth(), img_magic.getHeight() / 7);
g.drawImage(img_magic, 30, 126 - (img_magic.getHeight() / 7)
* magicindex, 0);
}
if (s_showmagic && fightcount % 3 == 0) {
if (magicindex < 7)
magicindex++;
else {
magicindex = 0;
underattack++;
s_showmagic = false;
}
}
if (underattack >= 3) {
CGame.playstatus = PLAY_TALK;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -