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

📄 e070f72a48cf001216b0addf11818cf9

📁 一些手机游戏的例子
💻
📖 第 1 页 / 共 5 页
字号:
/*游戏场景类
包括如下场景:
场景一:城郊
场景二:荒岛
场景三:女儿国
场景四:勇士国
场景五:真假蓬莱
场景六:军营*/
import java.io.InputStream;
import java.util.Random;
import java.util.Timer;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
public class MGC extends Canvas implements CommandListener
{
	/*角色变量*/
	static int l,m,le,ex,sp,d,gold,x,y,lm,mm,dr;//l,m为当前的血和气,lm,mm为当前的血气的最大值,le为人物等级,ex为经验,sp为剩余技能点,d为基础物理攻击力,dr为人物的方向标志
	int D;//角色的物理总攻击力,包括基础攻击力和加成攻击力
	int[] s,tn;//s[]为技能等级,tn[]为任务物品的收集数量
	int addMd,addPd;//武器附加的魔法攻击和物理攻击
	int stealB;//偷血量
	int addPdP;//基础攻击力提升比例
	int curnpc;//当前对话的NPC序号
	int speed=8;//行走的速度
	int count;//通用变量,用于各种情况下的计数
	int[] weapon;//武器
	static int[] startx,starty;//初生地的坐标
	int curweapon;//当前使用的武器
	int curEl;//当前战斗中的怪物等级
	boolean task,task2;//任务的触发标志,task为前四个任务,task2为最后一个任务
	boolean boat;//判断是否已经购买过船
	boolean t;//隐身标志
	boolean tran;//附身标志
	boolean walk;//是否持续移动
	boolean[] dlg;//和NPC的对话标志
	boolean win,die;//战斗胜利和阵亡的标志
	String tip;//提示信息
	String dlgm;
	int dlgn;
	static Image poc;//主角的图片
	/*游戏控制变量*/
	static int x0,y0,w,h,sl,i,j;//sl为场景号,i,j为菜单选项编号,i为一级菜单,j为二级菜单,x0,y0为屏幕左上角相对大场景的坐标
	int killCount;//竞技场的竞技计数
	static int[] W,H;//场景的长和宽(Tile为单位)
	int[] sc;//地图索引数组
	int[] spn;//精灵的数量
	static int[] screenStart=new int[]{16,29,33,47,68,77,83};//场景图片编号的起点
	int sx,sy;//技能图片的坐标
	int sn;//对话的序号(兼战斗中获得的经验值)
	SP[] spi;//战斗场景中的精灵对象
	SP[] NPC;//非战斗场景中的精灵对象
	int an;//攻击顺序
	int nn;//当前与主角对话的NPC序号(兼战斗中获得的金钱)
	boolean pm,am,tm;//属性菜单,战斗菜单和传送菜单的弹出标志
	boolean atm;//战斗场景
	boolean me;//对话控制开关
	boolean change;//场景切换开关
	boolean gameMenu;//游戏菜单开关
	boolean playOn;
	boolean showW;
	static boolean running;
	String[] dlgM;//对话的内容
	static Image screenPic;//场景大图
	static Image NPCPic;//精灵大图
	InputStream is;//输入流
	static Image[] p;
	static Image[] screen;//场景图片
	static Image[] spic;//技能图片
	static Image atpic;//战斗场景中的图片
	static Image spic0;
	Image dlgpic;//对话的图片
	static Graphics g1;
	Random rd;
	Timer ti;
	TI mo,atw,atc,changeMap,playsound;//mo控制人物移动,atw控制技能效果,atc控制攻击顺序切换,changeMap控制场景切换
	Command choose,gmenu,con;
	public MGC()
	{
		running=true;
		w=176;
		h=182;
		choose=new Command("",Command.OK,0);
		gmenu=new Command("菜单",Command.SCREEN,0);
		choose=new Command("选择",Command.OK,0);
		con=new Command("继续",Command.OK,0);
		//addCommand(choose);
		//addCommand(gmenu);
		setCommandListener(this);	
	}
	/*初始化*/
	void ge()
	{
		addCommand(gmenu);
		i=0;
		le=1;
		ex=0;
		sp=1;
		d=7;
		gold=100;
		lm=71;
		l=71;
		m=40;
		mm=40;
		dr=6;
		addMd=0;
		addPd=0;
		stealB=0;
		addPdP=0;
		curweapon=9;
		D=d+addPd+addPdP*d/100;
		weapon=new int[]{9,9,9,9,9,9};
		s=new int[]{0,0,0,0,0,0,0,0,0,1,0};
		spn=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,16,16};
		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;
		task=false;
		task2=false;
		boat=false;
		showW=false;
		die=false;
		win=false;
		walk=false;
		t=false;
		tran=false;
		playOn=true;
		pm=false;
		am=false;
		atm=false;
		change=false;
		gameMenu=false;
		me=false;
		tip=null;
		dlgm=null;
		spi=new SP[8];
		ti=new Timer();
		rd=new Random(1000);
		changeMap=null;		
		is=getClass().getResourceAsStream("/Screen"+ts(sl)+".txt");
		rS(is);//读取指定的地图索引
		if(spn[sl]!=0)
		{
			is=getClass().getResourceAsStream("/sp"+ts(sl)+".txt");
			rSp(is);//读取精灵索引
		}
		if(sl==0&&!dlg[0])
		message(2);
	}
	/*读取精灵索引*/
	void rSp(InputStream s)
	{
		int i,c,temp;
		i=0;
		c=0;
		temp=0;
		NPC=null;
		NPC=new SP[spn[sl]];
		try
		{
			while((c=s.read())!=-1)
			{
				switch(c)
				{
					case '*':
					NPC[i++]=new SP(
					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 rS(InputStream s)
	{
		int x,y,c,temp;
		x=0;
		y=0;
		temp=0;
		sc=null;
		sc=new int[W[sl]*H[sl]];
		try
		{
			while((c=s.read())!=-1)
			{
				switch(c)
				{
					case '\n':
					y++;
					x=0;
					temp=0;
					break;
					case '*':
					sc[y*W[sl]+x++]=temp;
					temp=0;
					break;
					default:
					temp=10*temp+c-48;
					break;
				}
			}
		}
		catch(java.io.IOException ioe)
		{
		}
		if(sl==3)//在勇士国随机生成两个宝箱所在地,和宝箱周围的怪物
		{
			x=rR(96)+72;
			if(sc[x]/100==1)
			{
				sc[x]=sc[x]%100+9800;
				{
					if(sc[x+1]/100==1)
					sc[x+1]=sc[x+1]%100+1800;
					if(sc[x-1]/100==1)
			     		sc[x-1]=sc[x-1]%100+1900;
			     		if(sc[x-24]/100==1)
			     		sc[x-24]=sc[x-24]%100+1600;
			     		if(sc[x+24]/100==1)
			     		sc[x+24]=sc[x+24]%100+1700;
			     	}
			}
			x=rR(96)+264;
			if(sc[x]/100==1)
			{
				sc[x]=sc[x]%100+9800;
				{
					if(sc[x+1]/100==1)
					sc[x+1]=sc[x+1]%100+1800;
					if(sc[x-1]/100==1)
			     		sc[x-1]=sc[x-1]%100+1900;
			     		if(sc[x-24]/100==1)
			     		sc[x-24]=sc[x-24]%100+1600;
			     		if(sc[x+24]/100==1)
			     		sc[x+24]=sc[x+24]%100+1700;
			     	}
			}
		}
		else
		if(sl==6)//在竞技场随机生成六到八级的怪物
		{
			for(int ii=0;ii<256;ii++)
			{
				if(sc[ii]/100==1)
				sc[ii]=sc[ii]%100+(rR(100)<70?(rR(3)+16)*100:100);
			}
		}
		is=null;
	}
	public void keyRepeated(int keyCode)
	{
		int act=getGameAction(keyCode);
		if(act==Canvas.UP||act==Canvas.DOWN||act==Canvas.LEFT||act==Canvas.RIGHT)
		keyPressed(keyCode);
	}		
	public void keyPressed(int keyCode)
	{
		if(!change)
		{
			int act=getGameAction(keyCode);
			switch(act)
			{
				case GAME_B://属性菜单弹出
				if(!win&&!die&&!change&&!me&&!gameMenu&&mo==null)
				{
					pm=!pm;
					if(pm)
					removeCommand(gmenu);
					else
					if(!atm)
					addCommand(gmenu);
					i=0;
					j=0;
					if(!atm)
					repaint(0,0,160,128);
					else
					repaint();
				}
				break;
				case UP://上键
				if(gameMenu)//对游戏菜单的操作
				{
					i=i-1>=0?i-1:0;
					repaint();
				}
				else
				if(!pm&&!tm&&!win&&!die&&!me&&tip==null&&!atm)//人物运动
				{				
					if(mo==null)
					{
						if(dr/3!=2)
						{
							dr=6;
							repaint();
						}
						else
						stm();
					}
				}				
				else
				if(pm)//对属性菜单的操作
				{
					j=0;
					i=i-1>=0?i-1:3;
					repaint(0,0,160,128);
				}
				else
				if(tm)//对传送菜单的操作
				{
					if(dlg[2])
					i=i-1>=0?i-1:5;
					else
					if(task)
					i=i-1>=0?i-1:4;
					else
					i=i-1>=0?i-1:3;
					repaint(0,0,128,128);
				}
				else
				if(am)//对战斗菜单的操作
				{
					i=i-4>=0?i-4:i+8;
					repaint();
				}
				else
				if(me&&tip==null)//对对话菜单的操作
				{
					if(curnpc==6||curnpc==4||curnpc==5)
					i=i-1>=0?i-1:0;
					repaint();
				}			
				break;
				case DOWN://下键
				if(gameMenu)
				{
					i=i+1<=4?i+1:4;
					repaint();
				}
				else
				if(!pm&&!atm&&!tm&&!win&&!die&&!me&&tip==null)
				{
					if(mo==null)
					{
						if(dr/3!=1)
						{
							dr=3;
							repaint();
						}
						else
						stm();
					}
				}
				else
				if(pm)
				{
					i=i+1<4?i+1:0;
					j=0;
					repaint(0,0,160,128);
				}
				else
				if(tm)
				{
					if(dlg[2])
					i=i+1<6?i+1:0;
					else
					if(task)
					i=i+1<5?i+1:0;
					else
					i=i+1<4?i+1:0;
					repaint();
				}
				else
				if(am)
				{
					i=i+4<12?i+4:i-8;
					repaint();
				}
				else
				if(me&&tip==null)//对话时候的菜单选项
				{
					if(curnpc==6||curnpc==4)
					i=i+1<=1?i+1:0;
					else
					if(curnpc==5)
					{
						switch(sn)
						{
							case 1:
							i=i+1<=2?i+1:0;
							break;
							case 2:
							i=i+1<=1?i+1:0;
							break;
							default:
							break;
						}
					}
					repaint();
				}			
				break;
				case LEFT://左键
				if(pm)
				{
					if(i==1)
					j=j-1>=0?j-1:10;
					else
					if(i==3&&j>0)
					for(int ii=j-1;ii>=0;ii--)
					{
						if(weapon[ii]!=9)
						{
							j=ii;
							break;
						}
					}	
					repaint(0,0,160,128);
				}
				else
				if(!pm&&!atm&&!tm&&!win&&!die&&!me&&tip==null&&!gameMenu)
				{
					if(mo==null)
					{
						if(dr/3!=0)
						{
							dr=0;
							repaint();
						}
						else			
						stm();
					}
				}
				else
				if(am)
				{
					i=i-1>=0?i-1:11;
					repaint();
				}
				else
				if(me&&tip==null)
				{
					if(curnpc==6||curnpc==4||curnpc==5)
					i=i-1>=0?i-1:0;
					repaint();
				}				
				break;
				case RIGHT://右键
				if(pm)
				{
					if(i==1)
					{
						j=j+1<11?j+1:0;
						repaint(0,0,160,128);
					}
					else
					if(i==3)
					{
						for(int ii=j+1;ii<6;ii++)
						{
							if(weapon[ii]!=9)
							{
								j=ii;
								break;
							}
						}
						repaint(0,0,160,128);
					}
				}
				else
				if(!pm&&!tm&&!atm&&!win&&!die&&!me&&tip==null&&!gameMenu)
				{
					if(mo==null)
					{
						if(dr/3!=3)
						{
							dr=9;
							repaint();
						}
						else
						stm();
					}
				}
				else
				if(am)
				{
					i=i+1<=11?i+1:0;
					repaint();
				}
				else
				if(me&&tip==null)//对话时候的菜单选项
				{
					if(curnpc==6||curnpc==4)
					i=i+1<=1?i+1:0;
					else
					if(curnpc==5)
					{
						switch(sn)
						{
							case 1:
							i=i+1<=2?i+1:0;
							break;
							case 2:
							i=i+1<=1?i+1:0;
							break;
							default:
							break;
						}
					}
					repaint();
				}
				break;
				case FIRE:
				FIRE();
				break;
				default:
				switch(keyCode)
				{
					case KEY_NUM1://1键取消
//					if(am&&!pm)
//					{
//						am=false;
//						an=4;
//						repaint();
//					}
//					else
					if(pm&&i==3)
					{
						gold+=(weapon[j]%3+1)*(weapon[j]%3+1)*100;
						if(curweapon==weapon[j])
						curweapon=9;
						weapon[j]=9;
						addPd=0;
						addMd=0;
						addPdP=0;
						D=d;			
						repaint(0,0,160,128);
					}
					break;						
					default:
					break;
				}

⌨️ 快捷键说明

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