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

📄 swordcanvas.java

📁 j2me手机游戏光盘文件 压缩包里有说明文件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:

import javax.microedition.lcdui.*;
import java.io.*;
import java.lang.*;
import java.util.Timer;
import popup.*;
import java.util.Random;
import java.util.Vector;
import javax.microedition.media.*;
public class SwordCanvas extends Canvas implements PopupListener
{

	static int life,energy,skillpoint,x,y,maxlife,maxenergy;
	static int level;
  static int experience;
	static int gold;
	static int direction;
	static int basicPower;
	
	int totalPower;
	int[] skillArray,tn;
	int addMagic,addPower;
	int stealB;
	int addPdP;
	int curNPC;
	int speed=4;
	int count;
	int[] weapon;
	int curKey;
	boolean isUpdated;
	static int[] startX,startY;
	int curweapon;
	int curEl;
	boolean isTask,isTask2;
	boolean hasBoat;
	boolean isHiding;
	
	boolean isGameOver;
	
	boolean tran;
	boolean isWalking;
	boolean[] dlg;
	String[] dlgMenu;
	boolean isWin,isDie;
	String strTip;
	String strDlg;
	String strPro;
	String[] attackMenu=new String[]{
	"落日","乱电",	"残风",	"召狼",	"召熊",	"召龙",	
	"隐身","遁走",	"附身",	"回血",	"补气",	"攻击"};
	int offY,offX;
	int dlgn;
	int dlgMenuChoose;
	static Image imgHero;
	static int w,h;
	static int x0,y0,sl=0,i,j;
	int killCount;
	static int[] W,H;
	int[] mapArray;
	int[] spriteNum;
	static int[] screenStart=new int[]{16,29,33,47,68,77,83};
	int sx,sy;
	int sn;
	Sprite[] SPI;
	Sprite[] NPC;
	int attackNumber;
	int nn;
	boolean isProMenu,isAttMenu,isTranMenu;
	boolean isFighting;
	boolean isTalking;
	boolean isChange;
	boolean isGameMenu;


	int step;
	static boolean running;
	String[] dlgM;
	static Image screenPic;
	static Image imgNPC;
	static Image imgProBG,imgState;
	InputStream is;
	Vector winString=new Vector(0,1);
	//static Image[] p;
	static Image[] screen;
	static Image[] spic;
	static Image atpic,imgAttackBG;
	static Image spic0;
	Image imgDlg;
	static Image[] sword;
	String[] mapName=new String[]{"牛家村","冰火岛 ","大智岛","襄阳城","蓬莱岛","竞技场"};
	boolean updateMan;
	static Graphics g1;
	Random rand;
	Player mapPlayer,attPlayer;
	boolean isWeather;

	int offsetY=36;
	Timer timer;
	int[][] snow=new int[30][30];
	TimerTask moveTask,attackTask,attackControlTask,changeMapTask,weatherTask;
	protected Popup popup;
	  protected String helpStr = 
                             "游戏背景:"+ "\n\n" +
                             "高手是寂寞的;而磨砺自身成为高手的过程,则是孤独的。"+ "\n\n" +
                             "操作方法:"+ "\n\n" +
                             "游戏中用方向键和2、4、6、8键控制主角移动以及进行菜单选择,5键或OK键选定,3键调出/关闭属性菜单,左软键调出操作菜单,可查看帮助信息,保存游戏或回到主菜单。"+ "\n\n" +
                             "关键提示:"+ "\n\n" +
                             "玩家每次升级将得到一点技能属性用来学习技能,每项技能所能修炼的最高等级受主角等级限制,技能等级越高,效果越显著。使用“召狼”等技能时,召唤出的宠物将被优先攻击。使用技能会消耗主角的“气力”,“回气”技能将耗费一定数量的金钱。主角战死会损失一定比例的经验及金钱。"+ "\n\n" +
                             "在战斗过程中菜单选项将不会响应。"+ "\n\n" +
                             "招式详解:"+ "\n\n" +
                             "落日:用内力聚成一个落日,对单个敌人造成极大伤害。"+ "\n\n" +
                             "乱电:在天空中形成流星般的巨石,砸向全部敌人。"+ "\n\n" +
                             "残风:耗费自身的血和气来形成一股飓风,对全部敌人造成较大伤害。"+ "\n\n" +
                             "召狼:召唤精灵狼来辅助战斗,生命力较弱但攻击力很强。"+ "\n\n" +
                             "召熊:召唤精灵熊来辅助战斗,攻击力很弱但生命力较强,可以用作战斗中的护盾。"+ "\n\n" +
                             "召龙:召唤神龙来辅助战斗,可以反弹敌人部分攻击并反伤敌人。"+ "\n\n" +
                             "隐身:在数回合内主角将不受攻击,但使用附身或攻击敌人则会失效。"+ "\n\n" +
                             "遁走:从战斗中直接逃走,技能等级高则逃走成功率大。"+ "\n\n" +
                             "附身:召唤影子与主角并肩作战,使主角生命力和攻击力按比例上升。"+ "\n\n" +
                             "回血:恢复主角一定比例的生命力。"+ "\n\n" +
                             "回气:恢复主角一定比例的气力,但要耗费一定量的金钱。";
	public SwordCanvas()
	{
		setFullScreenMode(true);
		running=true;
		w = getWidth();
		h=  getHeight()-offsetY;

	}
	void init()
	{
		isGameOver = false;
		i=0;
		level=1;
		experience=0;
		skillpoint=0;
		basicPower=7;
		gold=0;
		maxlife=71;
		life=71;
		energy=40;
		maxenergy=40;
		direction=6;
		addMagic=0;
		addPower=0;
		stealB=0;
		addPdP=0;
		curweapon=9;
		totalPower=basicPower+addPower+addPdP*basicPower/100;
		weapon=new int[]{9,9,9,9,9,9};
		skillArray=new int[]{0,0,0,0,0,0,0,0,0,1,0};
		spriteNum=new int[]{60,28,153,76,16,2,0};
		startX=new int[]{464,144,32,192,32,128,16};
		startY=new int[]{448,432,224,320,144,176,112};
		dlg=new boolean[]{false,false,false,false,false,false,false};
		tn=new int[]{0,0,0,0,0};
		W=new int[]{32,32,32,24,24,16,16};
		H=new int[]{32,32,32,24,24,18,18};
		if(sl==0)
		{
			if(dlg[0])
			{
				x=startX[0];
				y=startY[0];
				message(2);
			}
			else
			{
				x=384;
				y=304;
			}
		}
		else
		{
			x=startX[sl];
			y=startY[sl];
		}
		if(x>=w/2)
		{
			if(x<=W[sl]*16-w/2)
			x0=x-w/2;
			else
			x0=W[sl]*16-w;
		}
		else
		x0=0;
		if(y>=h/2)
		{
			if(y<=H[sl]*16-h/2)
			y0=y-h/2;
			else
			y0=H[sl]*16-h;
		}
		else
		y0=0;
		isTask=false;
		isTask2=false;
		hasBoat=false;

		isDie=false;
		isWin=false;
		isWalking=false;
		isHiding=false;
		tran=false;
		isProMenu=false;
		isAttMenu=false;
		isFighting=false;
		isChange=false;
		isGameMenu=false;
		isTalking=false;
		strTip=null;
		strDlg=null;
		SPI=new Sprite[8];
		timer=new Timer();
		rand=new Random(1000);
		changeMapTask=null;		
		is=getClass().getResourceAsStream("/Screen"+toString(sl)+".dat");
		readMap(is);
		if(spriteNum[sl]!=0)
		{
			is=getClass().getResourceAsStream("/sprite"+toString(sl)+".dat");
			readSprite(is);
		}
		if(sl==0&&!dlg[0])
		message(2);
		weatherTask=new TimerTask(this,-2);
		timer.schedule(weatherTask,0,400);
	}
	void readSprite(InputStream s)
	{

		int i,c,temp;
		i=0;
		c=0;
		temp=0;
		NPC=null; 
		NPC=new Sprite[spriteNum[sl]];		
		try
		{
			while((c=s.read())!=-1)
			{
				switch(c)
				{
					case ',':
					NPC[i++]=new Sprite(
					temp/10000,
					temp%10000/100,
					temp%100);
					temp=0;
					break;
					default:
					temp=10*temp+c-48;
					break;
				}
			}
		}
		catch(java.io.IOException ioe)
		{
			
		}
		is=null;
	}	
	void readMap(InputStream s)
	{
		int x,y,c,temp;
		x=0;
		y=0;
		temp=0;
		mapArray=null;
		mapArray=new int[W[sl]*H[sl]];
		int i = 0;
		try
		{
			while((c=s.read())!=-1)
			{
				switch(c)
				{
					case '\n':
					y++;
					x=0;
					temp=0;
					break;
					case ',':
					mapArray[y*W[sl]+x++]=temp;
					temp=0;
					break;
					default:
					temp=10*temp+c-48;
					break;
				}
			}
		}
		catch(java.io.IOException ioe)
		{
		}
		if(sl==3)
		{
			x=getRandom(96)+72;
			if(mapArray[x]/100==1)
			{
				mapArray[x]=mapArray[x]%100+9800;
				{
					if(mapArray[x+1]/100==1)
					mapArray[x+1]=mapArray[x+1]%100+1800;
					if(mapArray[x-1]/100==1)
			     		mapArray[x-1]=mapArray[x-1]%100+1900;
			     		if(mapArray[x-24]/100==1)
			     		mapArray[x-24]=mapArray[x-24]%100+1600;
			     		if(mapArray[x+24]/100==1)
			     		mapArray[x+24]=mapArray[x+24]%100+1700;
			     	}
			}
			x=getRandom(96)+264;
			if(mapArray[x]/100==1)
			{
				mapArray[x]=mapArray[x]%100+9800;
				{
					if(mapArray[x+1]/100==1)
					mapArray[x+1]=mapArray[x+1]%100+1800;
					if(mapArray[x-1]/100==1)
			     		mapArray[x-1]=mapArray[x-1]%100+1900;
			     		if(mapArray[x-24]/100==1)
			     		mapArray[x-24]=mapArray[x-24]%100+1600;
			     		if(mapArray[x+24]/100==1)
			     		mapArray[x+24]=mapArray[x+24]%100+1700;
			     	}
			}
		}
		else
		if(sl==6)
		{
			for(int ii=0;ii<256;ii++)
			{
				if(mapArray[ii]/100==1)
				mapArray[ii]=mapArray[ii]%100+(getRandom(100)<70?(getRandom(3)+16)*100:100);
			}
		}
		is=null;
	}
	public void keyRepeated(int keyCode)
	{
		int action=getGameAction(keyCode);
		if(action==Canvas.UP||action==Canvas.DOWN||action==Canvas.LEFT||action==Canvas.RIGHT)
		keyPressed(keyCode);
	}		
	public void keyPressed(int keyCode)
	{

		int action=getGameAction(keyCode);
		if (popup!=null&&popup.isActive())
    {
      popup.keyPressed(keyCode, action);
      repaint();
      return;
    }
		if(keyCode==35)
		MenuCanvas.midlet.exit();
		curKey=keyCode;
		if(!isChange)
		{

			switch(action)
			{
				case GAME_B:
				if(!isWin&&!isDie&&!isChange&&!isTranMenu&&!isTalking&&!isGameMenu&&moveTask==null)
				{
					isProMenu=!isProMenu;
					offY=0;
					offX=0;
					i=0;
					j=0;
					repaint();
				}
				break;
				case UP:
				if(isGameMenu)
				{
					i=i-1>=0?i-1:0;
					repaint();
				}
				else
				if(!isProMenu&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null&&!isFighting)
				{				
					if(moveTask==null)
					{
						if(direction/3!=2)
						{
							direction=6;
							repaint();
						}
						else
						setMoveTask();
					}
				}				
				else
				if(isProMenu)
				{
					strPro=null;
					offY=0;
					j=0;
					i=i-1>=0?i-1:3;
					repaint();
				}
				else
				if(isTranMenu)
				{
					if(dlg[2])
					i=i-1>=0?i-1:5;
					else
					if(isTask)
					i=i-1>=0?i-1:4;
					else
					i=i-1>=0?i-1:3;
					repaint(0,0,128,128);
				}
				else
				if(isAttMenu)
				{
					i=i-4>=0?i-4:i+8;
					repaint();
				}
				else
				if(isTalking&&strTip==null)//对对话菜单的操作
				{
					if(curNPC==6||curNPC==4||curNPC==5)
					dlgMenuChoose=dlgMenuChoose-1>=0?dlgMenuChoose-1:dlgMenu.length-1;
					repaint();
				}			
				break;
				case DOWN://下键
				if(isGameMenu)
				{
					i=i+1<=4?i+1:4;
					repaint();
				}
				else
				if(!isProMenu&&!isFighting&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null)
				{
					if(moveTask==null)
					{
						if(direction/3!=1)
						{
							direction=3;
							repaint();
						}
						else
						setMoveTask();
					}
				}
				else
				if(isProMenu)
				{
					strPro=null;
					offY=0;
					i=i+1<4?i+1:0;
					j=0;
					repaint();
				}
				else
				if(isTranMenu)
				{
					if(dlg[2])
					i=i+1<6?i+1:0;
					else
					if(isTask)
					i=i+1<5?i+1:0;
					else
					i=i+1<4?i+1:0;
					repaint();
				}
				else
				if(isAttMenu)
				{
					i=i+4<12?i+4:i-8;
					repaint();
				}
				else
				if(isTalking&&strTip==null)//对话时候的菜单选项
				{
					if(curNPC==6||curNPC==4||curNPC==5)
					dlgMenuChoose=dlgMenuChoose+1<=dlgMenu.length-1?dlgMenuChoose+1:0;
					repaint();
				}			
				break;
				case LEFT://左键
				if(isProMenu)
				{
					
					if(i==2)
					j=j-1>=0?j-1:10;
					else
					if(i==1&&j>0)
					for(int ii=j-1;ii>=0;ii--)
					{
						if(weapon[ii]!=9)
						{
							offY=0;
							j=ii;
							break;
						}
					}	
					repaint();
				}
				else
				if(!isProMenu&&!isFighting&&!isTranMenu&&!isWin&&!isDie&&!isTalking&&strTip==null&&!isGameMenu)
				{
					if(moveTask==null)
					{
						if(direction/3!=0)
						{
							direction=0;
							repaint();
						}
						else			
						setMoveTask();
					}
				}
				else
				if(isAttMenu)
				{
					i=i-1>=0?i-1:11;
					repaint();
				}
				else
				if(isTalking&&strTip==null)
				{
					if(curNPC==6||curNPC==4||curNPC==5)
					i=i-1>=0?i-1:0;
					repaint();
				}				
				break;
				case RIGHT://右键
				if(isProMenu)
				{
					
					if(i==2)
					{
						j=j+1<11?j+1:0;
						repaint();
					}
					else
					if(i==1)
					{
						for(int ii=j+1;ii<6;ii++)
						{
							if(weapon[ii]!=9)
							{
								offY=0;
								j=ii;
								break;
							}
						}
						repaint();
					}
				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -