📄 game.java
字号:
*/
private int indexX = 10, indexY = 30;// 指针的坐标;
private int charBX = 0, charBY = 0;// 主角界面图片缓冲区在脱机屏幕的起始坐标;
private static int cmdw = 30, cmdh = 20;
private static int cmdrightw = 45;
public static int cmdrighth = 15;// 宽度和高度;
private static final int dx = 10, dy = 15;// 行差和列差;
private static final int cmd[][] = new int[4][2];// 主角界面缓冲区的左侧命令项;x,y坐标;
private static final int cmdright[][] = new int[8][2];// 主角界面缓冲区右侧各个命令项,共有8个,代表x,y;
private static final int cmdrd[] = new int[2];// 主角缓冲区右下方命令区;
private static final int cmdrdw = 100, cmdrdh = 60;
private Image chara, ind;// 主角与指针的图片;
private static String str[] = new String[4];// 高亮显示四种菜单 需要的字符串;
private static final int SELECT = 5;
private static final int ATRBUT = 0;
private static final int SKILL = 1;
private static final int ITEM = 2;
private static final int ARM = 3;
private int charState = 5;// 四种状态;静态的变量千万不能乱用,否则不同的对象就会发生大问题了,只有那些各个对象一致集成的才用;
Image charaBuff;
private Graphics charBuffg;// 整张主角界面的图片的缓冲区,单独列出来,方便考虑;
private int listIndex = 0;// 这个就是用来标记那十二个命令的;
static {
str[0] = "属性";
str[1] = "技能";
str[2] = "物品";
str[3] = "装备";
// 这一步完全没有问题;
cmd[0][0] = 10;
cmd[0][1] = 30;
for (int i = 1; i < cmd.length; i++) {// 曾经记录这里坐标判断错误;,必须不能让第一各加40;
cmd[i][0] = 10;
cmd[i][1] = cmd[i - 1][1] + 40;
}
cmdright[0][0] = 60;// 初始命令的坐标;
cmdright[0][1] = 15;
for (int i = 1; i < cmdright.length; i++) {
if (i % 2 == 0) {
cmdright[i][0] = cmdright[i - 2][0];
cmdright[i][1] = cmdright[i - 2][1] + cmdrighth + dy;
} else {
cmdright[i][0] = cmdright[i - 1][0] + cmdrightw + dx;
cmdright[i][1] = cmdright[i - 1][1];
}
}
cmdrd[0] = 65;
cmdrd[1] = 135;
}
/**
* @param key
* 传入的按键; 功能: 处理主角界面的按键响应; 以后考虑一下用向量进行一一对应吧,那样容易的多;
*/
void charcterInput(int key) {
long time = 0;
bSell = false;
switch (key) {
case UP_PRESSED:
if (listIndex >= 0 && listIndex < 4) {
listIndex--;
if (listIndex == -1)
listIndex = 3;
break;
}
if (listIndex >= 4 && listIndex <= 11) {
listIndex -= 2;
if (listIndex == 2)
listIndex = 10;
if (listIndex == 3)
listIndex = 11;
}
break;
case DOWN_PRESSED:
if (listIndex >= 0 && listIndex < 4) {
listIndex++;
if (listIndex == 4)
listIndex = 0;
break;
}
if (listIndex >= 4 && listIndex <= 11) {
listIndex += 2;
if (listIndex == 12)
listIndex = 4;
if (listIndex == 13)
listIndex = 5;
}
break;
case LEFT_PRESSED:
if (listIndex >= 4 && listIndex <= 11) {
listIndex -= 1;
if (listIndex < 4)
listIndex = charState;
}
break;
case RIGHT_PRESSED:
if (listIndex < 4) {
listIndex = 4;
break;
}
if (listIndex >= 4 && listIndex <= 11) {
listIndex += 1;
if (listIndex == 12)
listIndex = 4;
}
break;
case FIRE_PRESSED: {// 在主角界面的按下命令后,要分别处理上面的各个单元;
time = System.currentTimeMillis();
switch (charState) {
case ATRBUT:
charAtrbutInput(key);
break;
case SKILL:
charSkillInput(key);
break;
case ITEM:
charItemInput(key);
break;
case ARM:
charArmInput(key);
break;
}
break;
}
case GAME_A_PRESSED:
if (fightInput) {
mid.s.stopSound();
//
GAMESTATE = Const.GAME_FIGHT;
return;
}
if (this.sellOrBuy) {
GAMESTATE = Const.GAME_SELLORBUY;
return;
}
if (System.currentTimeMillis() - time > 200) {
GAMESTATE = Const.GAME_SYSTEM;
break;
}
}
if (listIndex >= 0 && listIndex < 4) {
indexX = cmd[listIndex][0];
indexY = cmd[listIndex][1];
}
if (listIndex >= 4 && listIndex <= 11) {
indexX = cmdright[listIndex - 4][0];
indexY = cmdright[listIndex - 4][1];
}
}
/**
* 主角界面的选择
*/
void charSelect() {
switch (listIndex) {
case 0:
charState = ATRBUT; // 属性菜单;
break;
case 1:
charState = SKILL;
// 技能菜单;
break;
case 2:
charState = ITEM;
// 物品菜单;
break;
case 3:
charState = ARM;
// 装备菜单;
break;
}
}
private int pageAtr = 0;
/**
* 主角界面的属性界面命令处理;
*/
void charAtrbutInput(int key) {
if (listIndex == 0) {
pageAtr++;
if (pageAtr > 1)
pageAtr = 0;
}
}
/**
* 画属性界面;
*/
void drawAtrbut() {
// charBuffg.drawString(arg0, arg1, arg2, arg3)
g.drawImage(loadImage("/back.png"), 0, 0, 20);
lin.judgeAd();
switch (pageAtr) {
case 0:
for (int i = 0; i < cmdright.length; i++) {
charBuffg.drawString(lin.strAtr[i] + lin.atr[i],
cmdright[i][0], cmdright[i][1], 20);
}
int i = listIndex - 4;
// 这里用来判断指针在哪儿右部的缓冲区;
if (listIndex == 0) {// 两种情况,一种是在属性上,另外一种是在其他空格处;
Const.drawString(charBuffg, Const.gameExplain[0][9], cmdrd[0],
cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15,
10, true);
}
if (listIndex >= 4) {
charBuffg.drawImage(showCmd(cmdrightw, cmdrighth, lin.strAtr[i]
+ lin.atr[i], Font.SIZE_MEDIUM), cmdright[i][0],
cmdright[i][1], 20);
Const.drawString(charBuffg, Const.gameExplain[0][i], cmdrd[0],
cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15,
10, true);
}
break;
case 1:
Const.drawString(charBuffg,
"当前等级:" + lin.lev + " 当前经验 " + lin.exp, cmdright[0][0],
cmdright[0][1], 2 * cmdrightw, 2 * cmdrighth + 30, false,
Font.SIZE_MEDIUM, 15, 10, false);
int nextExp = (1 + lin.lev + 1) * (lin.lev + 1) * 50 - lin.exp;
Const.drawString(charBuffg, "升级所需要的经验值:" + nextExp, cmdright[4][0],
cmdright[4][1], 2 * cmdrightw, 2 * cmdrighth, false,
Font.SIZE_MEDIUM, 20, 10, false);
charBuffg
.drawImage(lin.imgplayer, cmdrd[0] + 10, cmdrd[1] + 10, 20);
break;
}
}
/**
* 技能界面的处理;
*/
void charSkillInput(int key) {
if (fightInput) {
if (listIndex - 4 >= 0)
if (lin.skill[listIndex - 4] == 1) {
fightPlayerState = 2 + listIndex - 4;
GAMESTATE = Const.GAME_FIGHT;
switch (listIndex - 4) {
case 0:
texiaolen = 3;
break;
case 1:
texiaolen = 5;
break;
case 2:
texiaolen = 5;
case 6:
texiaolen = 5;
break;
}
}
}
}
/**
* 绘制技能界面;
*/
void drawSkill() {
for (int j = 0; j < cmdright.length; j++) {
if (lin.skill[j] == 1) {
charBuffg.drawString(Const.Skill[j], cmdright[j][0],
cmdright[j][1], 20);
} else
charBuffg.drawString("未习得", cmdright[j][0], cmdright[j][1], 20);
}
int i = listIndex - 4;
// 这里用来判断指针在哪儿右部的缓冲区;
if (i == -3) {// 两种情况,一种是在属性上,另外一种是在其他空格处
Const.drawString(charBuffg, Const.gameExplain[1][9], cmdrd[0],
cmdrd[1], cmdrdw, cmdrdh, false, Font.SIZE_MEDIUM, 15, 10,
true);
}
if (i >= 0 && i < 8) {
if (lin.skill[i] == 1) {
charBuffg.drawImage(showCmd(cmdrightw, cmdrighth,
Const.Skill[i], Font.SIZE_MEDIUM), cmdright[i][0],
cmdright[i][1], 20);// 高亮显示;
Const.drawString(charBuffg,
Const.gameExplain[1][i] + "威力:" + (i + 1) * lin.atr[2]
* lin.atr[3] / 10,// 解说;
cmdrd[0], cmdrd[1], cmdrdw, cmdrdh, false,
Font.SIZE_MEDIUM, 15, 10, true);
} else {
charBuffg.drawImage(showCmd(cmdrightw, cmdrighth, "未习得",
Font.SIZE_MEDIUM), cmdright[i][0], cmdright[i][1], 20);
}
}
}
private int itemId = -1;
/**
* 物品界面的按键处理包括吃后改變人物狀態,消失數量等等;
*/
void charItemInput(int key) {
bSell = false;
if (listIndex == 2) {
currentCmdr++;
if (currentCmdr >= cmdr.length - 1)
currentCmdr = 0;
}
if (listIndex >= 4) {
int id = cmdr[currentCmdr][listIndex - 4];
itemId = id;
if (id >= 0)
if (this.sellOrBuy) {
lin.item[itemId]--;
lin.gold += Const.ItemAndArmPrice[itemId];
bSell = true;
return;
// 如果处于买卖界面的话;
}
if (id < 10 && id >= 0) {
// 这里代表的是该格子里物品的编号,然后让主角去查找他有多少这种物品
if (lin.item[id] > 0)
lin.item[id]--;
if (lin.item[id] == 0)
cmdr[currentCmdr][listIndex - 4] = -1;
switch (id) {
case 0:
lin.atr[0] += 100;// 这里就是不同的东西进行处理,改变主角的状态;
if (lin.atr[0] >= lin.atr[2] * lin.atr[4] * 2)
lin.atr[0] = lin.atr[2] * lin.atr[4] * 2;
break;
case 1:
lin.atr[1] += 20;
if (lin.atr[1] >= lin.atr[3] * lin.atr[4])
lin.atr[0] = lin.atr[3] * lin.atr[4];
break;
case 2:
lin.atr[0] += 500;// 这里就是不同的东西进行处理,改变主角的状态;
if (lin.atr[0] >= lin.atr[2] * lin.atr[4] * 2)
lin.atr[0] = lin.atr[2] * lin.atr[4] * 2;
break;
case 3:
lin.atr[1] += 100;
if (lin.atr[1] >= lin.atr[3] * lin.atr[4])
lin.atr[0] = lin.atr[3] * lin.atr[4];
break;
case 4:
lin.atr[2]++;
break;
case 5:
lin.atr[4]++;
break;
case 6:
lin.atr[3]++;
case 7:
lin.atr[5]++;
break;
case 8:
lin.atr[6]++;
break;
case 9:
lin.atr[7]++;
break;
}
return;
}
if (id >= 10) {
switch (id) {
case 10:
lin.arm[0] = 10;
break;
case 18:
lin.arm[0] = 18;
break;
case 26:
lin.arm[0] = 26;
break;
case 11:
lin.arm[1] = 11;
break;
case 19:
lin.arm[1] = 19;
break;
case 27:
lin.arm[1] = 27;
break;
case 12:
lin.arm[2] = 12;
break;
case 20:
lin.arm[2] = 20;
break;
case 28:
lin.arm[2] = 28;
break;
case 13:
lin.arm[3] = 13;
break;
case 21:
lin.arm[3] = 21;
break;
case 29:
lin.arm[3] = 29;
break;
case 14:
lin.arm[4] = 14;
break;
case 22:
lin.arm[4] = 22;
break;
case 30:
lin.arm[4] = 30;
break;
case 15:
lin.arm[5] = 15;
break;
case 23:
lin.arm[5] = 23;
break;
case 31:
lin.arm[5] = 31;
break;
case 16:
lin.arm[6] = 16;
break;
case 24:
lin.arm[6] = 24;
break;
case 32:
lin.arm[6] = 32;
break;
case 17:
lin.arm[7] = 17;
break;
case 25:
lin.arm[7] = 25;
break;
case 33:
lin.arm[7] = 33;
break;
}
}
}
}
private int currentCmdr;// 当前在第几栏;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -