📄 sfcanvas.java
字号:
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.rms.*;
/*
* 创建日期 2005-9-5
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author 莫紫东
* Download by http://www.codefans.net
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class SFCanvas extends GameCanvas implements Runnable {
/**
*
*/
private final int LISTENER_LEFT=4;//键盘对应编号
private final int LISTENER_RIGHT=32;
private final int LISTENER_UP=2;
private final int LISTENER_DOWN=64;
private int setX=180-getWidth()/2+20,setY=180-getHeight()/2+20,heroWidth,heroHeight,mapdir=0,itempage=1,itemchoice=1;
static int keyState,nowShopcho=0,buynum=0;
private boolean isCho1=true,isData1=false,isData2=false,isOpenItem=false,isGetpress,isDelpress=false,isDelok=false,isChkdel=false,isOpenshop=false,isOpenintro=false,isFirst=false,isOut=false;
private boolean isBreak=false,isOpenmisn=false;
private Random randdead=new Random();
String dataname="crazy4";//记录名称
private int menuselc=1,menudisp=0;
private Graphics g;
//int m=0,l=0,temp;
//ASprite tempMonster;
//private int app[];
private byte heroData[];
private int itemprice[]={30,100,500,1000,3000};//物品价格,依次是药品,一,二,三,四等级装备
public RecordStore rs;
public int myid=-1,itemcho=1;
public static Image hImage,mapImage,monsterImage,bfImage,bloodImage,hpImage,hplImage,loadImage ,loadImage2,itemImage,goldImage,gearImage,houseImagetop,houseImagebottom,npcImage,npcImage1;
public static Image shopImage,menuImage,barImage,bgImage,missionImage;
private int jqcount=0,marktime=0;
//Sprite blueFire;
//private int bluefire[]={0,1,2,3};
final int GAME_MENU=-1;
final int GAME_TITLE=0;
final int GAME_ING=1;
final int GAME_JQ=2;
final int GAME_OVER=3;
public int herolv=-1,heroitem=-1,herogold=-1,heroitemlv=-1,heroexp=-1;
public static String heroMyItem,DataName=null;
public char tempitem;
public Thread thread;
//MonsterSprite ms2[];
int DEFAULT_HP=100,DEFAULT_LV=1,GAME_STATE=GAME_MENU;
HeroSprite heroSprite;
MapTiled mapTiled;
MonsterSprite monsterSprite,monsterSprite1,monsterSprite2,monsterSprite3,monsterSprite4,monsterSprite5,monsterSprite6,monsterSprite7,monsterSprite8,monsterSprite9,monsterSprite10;
NPCSprite npcSprite,npcSprite1;
LayerManager layManager;
ASprite tempMonster;
//ASprite ms1[],ms2[],tempms0[]={npcSprite,npcSprite1,heroSprite};
//记录的初始化
public void doHeroInit(){
heroSprite.lv=1;
heroSprite.itemlv=0;
heroSprite.gold=0;
heroSprite.MyItem="000000000000";
heroSprite.exp=210;
}
//地图切换的相应方法
public void gotoMap(int mapDir){
if(mapDir==0){
monsterSprite=null;
monsterSprite1=null;
monsterSprite2=null;
monsterSprite3=null;
monsterSprite4=null;
monsterSprite5=null;
monsterSprite6=null;
monsterSprite7=null;
monsterSprite8=null;
monsterSprite9=null;
monsterSprite10=null;
monsterImage=null;
layManager.remove(mapTiled);
mapImage=null;//将其他地图用到的图形清除
mapTiled=null;
heroSprite.isWalkable=null;
try{//描绘新地图
mapImage=Image.createImage("/map2.png");
houseImagetop=Image.createImage("/house_01.png");
houseImagebottom=Image.createImage("/house_02.png");
shopImage=Image.createImage("/shop.png");
npcImage=Image.createImage("/npc.png");
npcImage1=Image.createImage("/npc1.png");
}catch(Exception e){}
mapTiled=new MapTiled(30,30,mapImage,16,16,getWidth(),getHeight());
mapTiled.drawMap(mapDir,setX,setY);
heroSprite.chgMapbool(mapTiled.isWalkable0);
layManager.append(mapTiled);
npcSprite=new NPCSprite(npcImage1,25,32,1,86,161);
npcSprite1=new NPCSprite(npcImage,15,35,2,328,288);
heroSprite.mapdir=0;
}else{
layManager.remove(mapTiled);
mapImage=null;
mapTiled=null;
houseImagetop=null;
houseImagebottom=null;
heroSprite.isWalkable=null;
npcSprite=null;
npcSprite1=null;
shopImage=null;
try{
mapImage=Image.createImage("/title.png");
monsterImage=Image.createImage("/monster.png");
}catch(Exception e){}
mapTiled=new MapTiled(40,40,mapImage,16,16,getWidth(),getHeight());
mapTiled.drawMap(mapDir,setX,setY);
heroSprite.chgMapbool(mapTiled.isWalkable);
layManager.append(mapTiled);
monsterSprite=new MonsterSprite(monsterImage,50,50,90,90,false,2);//怪物的实例化
monsterSprite1=new MonsterSprite(monsterImage,50,50,140,140,false,1);
monsterSprite2=new MonsterSprite(monsterImage,50,50,120,120,false,3);
monsterSprite3=new MonsterSprite(monsterImage,50,50,300,110,false,5);
monsterSprite4=new MonsterSprite(monsterImage,50,50,300,160,false,4);
monsterSprite5=new MonsterSprite(monsterImage,50,50,300,200,false,5);
monsterSprite6=new MonsterSprite(monsterImage,50,50,400,50,false,7);
monsterSprite7=new MonsterSprite(monsterImage,50,50,400,110,false,7);
monsterSprite8=new MonsterSprite(monsterImage,50,50,400,500,false,8);
monsterSprite9=new MonsterSprite(monsterImage,50,50,460,500,false,9);
monsterSprite10=new MonsterSprite(monsterImage,50,50,420,550,false,12);
heroSprite.mapdir=1;
//ms1=null;
//ms1=tempms1;
}
}
public SFCanvas() {
super(true);
//super.setFullScreenMode(true);
System.out.print("构造函数开始运行");
try{//获取前期所需的
hImage=Image.createImage("/mainch.png");
mapImage=Image.createImage("/map2.png");
houseImagetop=Image.createImage("/house_01.png");
houseImagebottom=Image.createImage("/house_02.png");
npcImage=Image.createImage("/npc.png");
npcImage1=Image.createImage("/npc1.png");
//bfImage=Image.createImage("/bluefire.png");
bloodImage=Image.createImage("/blood.png");
hpImage=Image.createImage("/blood.png");
hplImage=Image.createImage("/bloodti.png");
loadImage=Image.createImage("/load1.png");
loadImage2=Image.createImage("/load2.png");
itemImage=Image.createImage("/box.png");
goldImage=Image.createImage("/gold.png");
gearImage=Image.createImage("/item.png");
shopImage=Image.createImage("/shop.png");
menuImage=Image.createImage("/menu.png");
barImage=Image.createImage("/bar.png");
bgImage=Image.createImage("/1212.png");
missionImage=Image.createImage("/menumain.png");
}catch(Exception e){
}
//blueFire=new Sprite(bfImage,30,30);
//blueFire.setFrameSequence(bluefire);
//实例化以及初始化
mapTiled=new MapTiled(30,30,mapImage,16,16,getWidth(),getHeight());
heroSprite=new HeroSprite(hImage,40,40);
heroWidth=heroSprite.getWidth()/2;
heroHeight=heroSprite.getHeight()/2;
heroSprite.chgMapbool(mapTiled.isWalkable0);
/*monsterSprite=new MonsterSprite(monsterImage,30,30,90,90,false,2);
monsterSprite1=new MonsterSprite(monsterImage,30,30,100,100,false,1);
monsterSprite2=new MonsterSprite(monsterImage,30,30,110,110,false,3);*/
npcSprite=new NPCSprite(npcImage1,25,32,1,86,161);
npcSprite1=new NPCSprite(npcImage,15,35,2,328,288);
heroSprite.isAlive=true;
mapTiled.drawMap(0,setX,setY);
g=this.getGraphics();
layManager=new LayerManager();
layManager.append(mapTiled);
//layManager.append(monsterSprite);
//layManager.append(monsterSprite1);
//layManager.append(monsterSprite2);
//ms1=null;
//ms1=tempms0;
//System.out.println("asdjfadlfkjladjslk"+ms1.length);
thread=new Thread(this);
System.out.print("构造函数运行完毕");
thread.start();
// TODO 自动生成构造函数存根
}
//将怪物类的死亡后的等级以及各方面信息传递到英雄类
private void doMonster(MonsterSprite mSprite,HeroSprite heroSprite,RecordStore rs,int rid){
heroSprite.doMonster(mSprite.doMovedraw(heroSprite.x+heroWidth,heroSprite.y+heroHeight,getHeight(),getWidth(),heroSprite.dir,heroSprite.iisBattle,heroSprite,heroSprite.hp,heroSprite.lv,heroSprite.itemlv),mSprite.deadlv,rs,rid);
}
//关于怪物类的血槽描绘相应的方法
private void monsterBlood(MonsterSprite mSprite){
if(mSprite.isAlive){//生00存状态描绘血槽
g.setColor(0x008A56E8);
g.drawRoundRect(mSprite.x-setX-10,mSprite.y-setY-15,20,5,3,3);
g.setColor(0x00FF030F);
g.fillRoundRect(mSprite.x-setX-10,mSprite.y-setY-15,20*mSprite.hp/mSprite.maxHp,5,3,3);
g.setColor(0x00000000);
g.drawString(mSprite.lv+"等级",mSprite.x-setX-10,mSprite.y-setY-15,Graphics.BOTTOM|Graphics.LEFT);
}else{
if(mSprite.isGet==false){//死亡状态描绘掉落物品
if(mSprite.goldOritem==0){
g.drawImage(itemImage,mSprite.x-setX-10,mSprite.y-setY,Graphics.BOTTOM|Graphics.LEFT);
}else{
g.drawString(String.valueOf(mSprite.goldforhero),mSprite.x-setX,mSprite.y-setY-15,Graphics.BOTTOM|Graphics.LEFT);
g.drawImage(goldImage,mSprite.x-setX-10,mSprite.y-setY-5,Graphics.BOTTOM|Graphics.LEFT);
}
if(isGetpress==true){
isGetpress=false;
if(mSprite.heroDis<22500){
if(mSprite.goldOritem==0){
mSprite.redOritem=Math.abs(randdead.nextInt()%5);
if(mSprite.redOritem==1){
if(mSprite.lv>=1&&mSprite.lv<=3){
mSprite.itemc='1';
}else if(mSprite.lv>=4&&mSprite.lv<=7){
mSprite.itemc='2';
}else if(mSprite.lv>=8&&mSprite.lv<=9){
mSprite.itemc='3';
}else if(mSprite.lv>=10&mSprite.lv<=12){
mSprite.itemc='4';
}
}else{
mSprite.itemc='5';
}
for(int k=0;k<12;k++){
if(k==11&&heroSprite.itemcode[k]!='0'){
g.drawImage(itemImage,mSprite.x-setX-10,mSprite.y-setY,Graphics.BOTTOM|Graphics.LEFT);
}
if(heroSprite.itemcode[k]=='0'){
heroSprite.itemcode[k]=mSprite.itemc;
try{
rs.setRecord(myid,heroSprite.chgTorms(false),0,heroSprite.chgTorms(false).length);
mSprite.isGet=true;
}catch(Exception e){System.out.println(e);}
break;
}
}
}else{
heroSprite.gold=heroSprite.gold+mSprite.goldforhero;
try{
rs.setRecord(myid,heroSprite.chgTorms(false),0,heroSprite.chgTorms(false).length);
mSprite.isGet=true;
}catch(Exception e){System.out.println(e);}
}
}
}
}
}
}
private void drawItem(char item[],int pagee){//关于装备画面的界面方法
g.fillRect(135,103+(pagee-1)*55/4,5,5);
if(keyState==2){
if(itemcho>1){
itemcho--;
}
}
if(keyState==64){
if(itemcho<3){
itemcho++;
}
}
//System.out.print(""+isDelpress);
if(isDelpress==true){//按下丢弃键时的相应处理
if(item[itemcho-1+(pagee-1)*3]!='0'){
g.setColor(0x00EA0053);
g.fillRoundRect(40,40,100,50,5,5);
g.setColor(0x00FFFFFF);
g.drawString("是否要真的丢弃?",50,50,Graphics.TOP|Graphics.LEFT);
if(isChkdel==true){
g.setColor(0x00000000);
g.drawString("是",50,65,Graphics.TOP|Graphics.LEFT);
g.setColor(0x00FFFFFF);
g.drawString("否",100,65,Graphics.TOP|Graphics.LEFT);
}else{
g.setColor(0x00FFFFFF);
g.drawString("是",50,65,Graphics.TOP|Graphics.LEFT);
g.setColor(0x00000000);
g.drawString("否",100,65,Graphics.TOP|Graphics.LEFT);
}
g.setColor(0x00FFFFFF);
}else{
isDelpress=false;
}
}
if(keyState==256){
if(isDelpress==false){
if(item[itemcho-1+(pagee-1)*3]!='5' && item[itemcho-1+(pagee-1)*3]!='0'){
if(heroSprite.itemlv!=0){
switch(heroSprite.itemlv){
case 1:
tempitem='1';
break;
case 2:
tempitem='2';
break;
case 3:
tempitem='3';
break;
case 4:
tempitem='4';
break;
}
}else{
tempitem='0';
}
switch(item[itemcho-1+(pagee-1)*3]){
case '1':
heroSprite.itemlv=1;
break;
case '2':
heroSprite.itemlv=2;
break;
case '3':
heroSprite.itemlv=3;
break;
case '4':
heroSprite.itemlv=4;
break;
}
item[itemcho-1+(pagee-1)*3]=tempitem;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -