⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfcanvas.java

📁 一个征途的rpg小游戏
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -