📄 battle.java
字号:
import java.util.Random;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
/**
* @游戏名称: 仙剑奇侠传
* @作者:张卫国
* @Email: weiguo2000@hotmail.com
* @创建于:2006/7/18--2006/8/3 by Weiguo
*/
//战斗类
public class Battle{
private int selecten,select,selectMagic;
private final int MAIN = 0,
ENEMYMENU = 1,
MAGIC = 2;
private int onMenu = 0;
private XianJianCanvas gameCanvas = null;
private Character hero = null;
private Animal[] eny = null;
private int x = 140,y = 120;
private int attackType;
private boolean bMagic;
public boolean isEnd,fail;
public int endi,faili;
private boolean isDecrease;
private int upDecreaseHP;
private int jianDire;
private Random rand = null;
public Battle(XianJianCanvas canvas,Character hero){
this.gameCanvas = canvas;
this.hero = hero;
//round.start();
}
public void init(){
this.isEnd = false;
this.fail = false;
this.endi = 1;
this.faili = 1;
this.bMagic = false;
this.isDecrease = false;
this.attackType = 0;
this.upDecreaseHP = 0;
this.jianDire = 0;
this.select = 0;
this.selecten = 0;
this.selectMagic = 0;
eny = new Animal[3];
eny[0] = new Animal(0);
eny[0].setPosition(20,80);
eny[1] = new Animal(0);
eny[1].setPosition(50,60);
eny[2] = new Animal(0);
eny[2].setPosition(80,40);
rand = new Random();
}
public void select(){
switch(onMenu){
case MAIN:
switch(select){
case 0:
onMenu=ENEMYMENU; //进入选择敌人界面
break;
case 1:
onMenu=MAGIC; //进入选择技能界面
break;
case 2:
fail=true; //逃跑
gameCanvas.bAttle = false;
break;
}
break;
case ENEMYMENU:
attackType=1;
break;
case MAGIC:
if(hero.magicList!=null){
switch(selectMagic){
case 0:
if(hero.MP>5){
attackType=2;
hero.MP -= 5;
}
break;
case 1:
if(hero.MP>3){
attackType=3;
hero.MP -= 3;
}
break;
case 2:
attackType=4;
break;
}
break;
}
break;
}
}
public void up(){
switch(onMenu){
case MAIN:
select--;
if(select<0){
select=2;
}
break;
case ENEMYMENU:
selecten++;
if(selecten>2){
selecten=0;
}
while(eny[selecten]==null){
selecten++;
if(selecten>2){
selecten=0;
}
}
break;
case MAGIC:
if(hero.magicList!=null){
if(selectMagic<0){
selectMagic=0;
}
selectMagic--;
if(selectMagic>0){
selectMagic=0;
}
}
break;
}
}
public void down(){
switch(onMenu){
case MAIN:
select++;
if(select>2){
select=0;
}
break;
case ENEMYMENU:
selecten--;
if(selecten<0){
selecten=2;
}
while(eny[selecten]==null){
selecten--;
if(selecten<0){
selecten=2;
}
}
break;
case MAGIC:
if(hero.magicList!=null){
if(selectMagic>hero.magicList.length-1){
selectMagic=hero.magicList.length-1;
}
selectMagic++;
if(selectMagic>hero.magicList.length-1){
selectMagic=hero.magicList.length-1;
}
}
break;
}
}
public void back(){
switch(onMenu){
case ENEMYMENU:
case MAGIC:
onMenu=MAIN;
break;
}
}
public void paint(Graphics g) {
g.fillRect(0,0,180,196);
int k1=0;
for(int j1 = -12; j1 < 200 + 24; j1 += 12)
{
for(int i1 = ((-k1 % 2) * 48) / 2; i1 < 176 + 48; i1 += 48)
g.drawImage(XianJianImage.image[56], i1, j1, 0);
k1++;
}
g.drawImage(XianJianImage.imgPlayerl[0],x,y,Graphics.TOP|Graphics.LEFT);
for(int i=0;i<eny.length;i++){
if(eny[i]!=null){
eny[i].draw(8,8,g);
}
}
if(isDecrease)
{
g.setColor(0xff0000);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_LARGE));
if(attackType==-1){
if(hero.DecreaseHP>0){
g.drawString(""+hero.DecreaseHP,140,115+upDecreaseHP-10,Graphics.HCENTER|Graphics.TOP);
}
}
else{
for(int i=0;i<3;i++){
if(eny[i]!=null){
if(eny[i].DecreaseHP>0){
g.drawString(""+eny[i].DecreaseHP,eny[i].x,eny[i].y+upDecreaseHP-10,Graphics.HCENTER|Graphics.TOP);
}
}
}
}
}
if(onMenu==MAIN){
g.setColor(0x2d2d40);
g.fillRoundRect(10,150,40,44,5,5);
g.fillRoundRect(52,150,116,44,5,5);
g.setColor(0xffff00);
g.drawRoundRect(10,150,40,44,5,5);
g.drawRoundRect(52,150,116,44,5,5);
g.drawString("攻击",20,150,0);
g.drawString("法术",20,165,0);
g.drawString("逃跑",20,180,0);
g.drawString("李逍遥",55,150,0);
g.drawString("体力: "+hero.HP+"/"+hero.MaxHP,100,150,0);
g.drawString("真气: "+hero.MP+"/"+hero.MaxMP,100,165,0);
g.fillTriangle(12,150+select*15,12,165+select*15,20,158+select*15);
}
if(onMenu==ENEMYMENU&&attackType==0){
g.setColor(0xff0000);
g.drawRoundRect(eny[selecten].x-3,eny[selecten].y-3,35,35,5,5);
g.setColor(0x000000);
g.fillRect(0, 196-20, 180, 196);
g.setColor(0xffffff);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
g.drawString("返回",180,196,Graphics.RIGHT|Graphics.BOTTOM);
}
if(onMenu==MAGIC&&attackType==0){
g.setColor(0x734708);
g.fillRoundRect(60,70,60,90,8,8);
g.setColor(0xffff00);
g.drawRoundRect(60,70,60,90,8,8);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
g.setColor(0xffffff);
if(hero.magicList!=null){
for(int i=0;i<hero.magicList.length;i++){
g.drawString(hero.magicList[i],70,75+i*15,Graphics.LEFT|Graphics.TOP);
}
g.setColor(0xffff00);
g.drawString(hero.magicList[selectMagic],70,75+selectMagic*15,Graphics.LEFT|Graphics.TOP);
}
else{
g.drawString("无法术",70,75,Graphics.LEFT|Graphics.TOP);
}
g.setColor(0x000000);
g.fillRect(0, 196-20, 180, 196);
g.setColor(0xffffff);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
g.drawString("返回",180,196,Graphics.RIGHT|Graphics.BOTTOM);
}
if(bMagic){
drawMagic(g);
}
drawFail(g);
//drawEnd(g);
}
public void movePlayer(){
switch(selecten){
case 0:
x-=24;
y-=8;
break;
case 1:
x-=18;
y-=12;
break;
case 2:
x-=12;
y-=16;
break;
}
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void movebackPlayer(){
switch(selecten){
case 0:
x+=24;
y+=8;
break;
case 1:
x+=18;
y+=12;
break;
case 2:
x+=12;
y+=16;
break;
}
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void moveEnemy(int num){
switch(num){
case 0:
eny[0].x+=24;
eny[0].y+=8;
break;
case 1:
eny[1].x+=18;
eny[1].y+=12;
break;
case 2:
eny[2].x+=12;
eny[2].y+=16;
break;
}
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void moveBackEnemy(int num){
switch(num){
case 0:
eny[0].x-=24;
eny[0].y-=8;
break;
case 1:
eny[1].x-=18;
eny[1].y-=12;
break;
case 2:
eny[2].x-=12;
eny[2].y-=16;
break;
}
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public boolean getFail(){
return fail;
}
public void drawFail(Graphics g){
if(fail){
g.setColor(0x734708);
g.fillRoundRect(10,70,150,50,5,5);
g.setColor(0xffff00);
g.drawRoundRect(10,70,150,50,5,5);
g.setColor(0xffffff);
switch(faili)
{
case 0:
default:
break;
case 1:
g.setColor(0xff0000);
g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_PLAIN,Font.SIZE_LARGE));
g.drawString("战斗失败 重新开始游戏",90,80,Graphics.TOP|Graphics.HCENTER);
break;
case 2:
XianJianLet.dis.setCurrent(new MenuCanvas());
break;
}
}
}
public void isEnd(){
int i=0;
for(;i<3;i++){
if(eny[i]!=null){
break;
}
}
if(i==3){
gameCanvas.bAttle = false;
isEnd=true;
//gameCanvas.repaint();
}
}
public void drawEnd(Graphics g)
{
if(isEnd){
g.setColor(0x2d2d40);
g.fillRoundRect(0,70,179,50,8,8);
g.setColor(0x1e2d64);
g.drawRoundRect(0,70,179,50,8,8);
g.drawImage(XianJianImage.kuang,0,70,Graphics.LEFT|Graphics.TOP);
g.setColor(0xffffff);
switch(endi)
{
case 0:
default:
break;
case 1:
g.drawString("战斗胜利 每人获得5经验值",20,90,Graphics.TOP|Graphics.LEFT);
hero.Exp+=5;
if(hero.Exp>hero.MaxExp){
hero.Exp=hero.Exp-hero.MaxExp;
hero.levelUp();
}
break;
case 2:
g.drawString("获得金钱: 6",20,90,Graphics.TOP|Graphics.LEFT);
hero.money+=6;
break;
case 3:
String s1 = " 获得物品:";
int ran=new Random().nextInt(10);
if(ran>6){
Item goods=new Item(1001);
s1 = s1 +goods.getName()+ " ";
hero.addGoods(goods);
}
else if(ran>3&&ran<=6){
Item goods=new Item(1002);
s1 = s1 +goods.getName() + " ";
hero.addGoods(goods);
}
else{
s1 = s1 + "无";
}
g.drawString(s1,20,90,Graphics.TOP|Graphics.LEFT);
break;
case 4:
onMenu=MAIN;
gameCanvas.bAttle = false;
gameCanvas.repaint();
break;
}
}
}
public void drawMagic(Graphics g){
if(attackType==2){
g.drawImage(XianJianImage.jian,50-10*jianDire,10*jianDire,Graphics.HCENTER|Graphics.TOP);
g.drawImage(XianJianImage.jian,100-10*jianDire,30+10*jianDire,Graphics.HCENTER|Graphics.TOP);
g.drawImage(XianJianImage.jian,150-10*jianDire,10*jianDire,Graphics.HCENTER|Graphics.TOP);
}
if(attackType==3){
g.drawImage(XianJianImage.jian,80-10*jianDire,40+10*jianDire,Graphics.HCENTER|Graphics.TOP);
}
}
public void playerAttack(int aType){
switch(aType){
case 0:
break;
case 1:
for(int i=0;i<4;i++){
movePlayer();
}
if(!hero.bDead){
hero.DecreaseHP = 0;
}
for(int i=0;i<3;i++){
if(eny[i]!=null){
eny[i].DecreaseHP = 0;
}
}
eny[selecten].DecreaseHP=(hero.wu-eny[selecten].defend)+(rand.nextInt(6));
isDecrease=true;
upDecreaseHP = 0;
for(int i=0;i<4;i++){
movebackPlayer();
upDecreaseHP-=3;
}
isDecrease=false;
eny[selecten].ehp-=eny[selecten].DecreaseHP;
eny[selecten].DecreaseHP=0;
if(eny[selecten].ehp<0){
eny[selecten].bDead=true;
eny[selecten]=null;
}
break;
case 2:
if(!hero.bDead){
hero.DecreaseHP = 0;
}
for(int i=0;i<3;i++){
if(eny[i]!=null){
eny[i].DecreaseHP = (hero.ling-eny[i].magicDefend)+(rand.nextInt(6));
}
}
bMagic=true;
for(int i=0;i<4;i++){
jianDire++;
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
bMagic=false;
jianDire=0;
isDecrease=true;
upDecreaseHP = 0;
for(int i=0;i<4;i++){
upDecreaseHP-=3;
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
isDecrease=false;
for(int i=0;i<3;i++){
if(eny[i]!=null){
eny[i].ehp-=eny[i].DecreaseHP;
eny[i].DecreaseHP=0;
if(eny[i].ehp<0){
eny[i].bDead=true;
eny[i]=null;
}
}
}
break;
case 3:
if(!hero.bDead){
hero.DecreaseHP = 0;
}
for(int i=0;i<3;i++){
if(eny[i]!=null){
eny[i].DecreaseHP = (hero.ling-eny[i].magicDefend)/2+(rand.nextInt(6));
}
}
bMagic=true;
for(int i=0;i<4;i++){
jianDire++;
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(60);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
bMagic=false;
jianDire=0;
isDecrease=true;
upDecreaseHP = 0;
for(int i=0;i<4;i++){
upDecreaseHP-=3;
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
isDecrease=false;
for(int i=0;i<3;i++){
if(eny[i]!=null){
eny[i].ehp-=eny[i].DecreaseHP;
if(eny[i].ehp<0){
eny[i].bDead=true;
eny[i]=null;
}
}
}
break;
default:
break;
}
}
public void enemyAttack(){
for(int j=0;j<3;j++){
if(eny[j]!=null){
for(int i=0;i<4;i++){
moveEnemy(j);
}
hero.DecreaseHP=(eny[j].eattack-hero.ti)+rand.nextInt(3);
if(hero.DecreaseHP<=0){
hero.DecreaseHP=1;
}
isDecrease=true;
upDecreaseHP = 0;
for(int i=0;i<4;i++){
moveBackEnemy(j);
upDecreaseHP-=3;
}
isDecrease=false;
hero.HP-=hero.DecreaseHP;
hero.DecreaseHP=0;
if(hero.HP<0){
fail=true;
break;
}
}
}
}
public void start(){
if(attackType!=0&&!isEnd){
playerAttack(attackType);
attackType=-1;
enemyAttack();
isEnd();
attackType=0;
onMenu=MAIN;
while(eny[selecten]==null){
selecten++;
if(selecten>2){
selecten=0;
}
}
gameCanvas.repaint();
gameCanvas.serviceRepaints();
try {
Thread.sleep(80);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -