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

📄 gamecanvas.java

📁 极限运动攀岩 wtk编译就能运行.有详细源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
//package src;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import javax.microedition.io.*;

import com.nokia.mid.ui.FullCanvas;

import java.lang.*;
import java.util.*;
import java.io.*;

/**
 * <p>Title:  GameCanvas</p>
 * <p>Description: 游戏控制类</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: Company: NetEase www.163.com </p>
 * @author  
 * @version 1.0
 */

public class GameCanvas extends Canvas/*FullCanvas*/ implements Runnable
{
	//--------------------------------------------------------------------------
	//
	// 系统变量
	//
	//--------------------------------------------------------------------------
	
	public  static boolean			ifPhone;		// 有电话
	private static MainApp			App;			// application结束使用
	private static Graphics			g;				// 图形
	private static Graphics			offg;			// 关断画图(背面绘画)
	private static int[]			sysData;		// 系统数组
	private static int       		width,height;   // 屏幕宽和高
	private static int 				midWidth,midHeight;
													// 水平线中,高难度
	private static long				time1, time2;	// 1环花费了的时间
	private static Font				font;			// 现在的字体
	private static Image[]			cImage;			// 图像资源
	private static Image			aImage;			// 角色周边更换用途用
	private static Image			backImg;		// 背景图
//	private static ezSound			sound;			// 声音
//	private static NowPro			nowCorp;		// now专业通讯社
	private static String			phoneid;		// 手机种类
	private static boolean 			KeyUp,KeyDown,KeyLeft,KeyRight;
	private static boolean 			KeyFire,KeySound;// 按键Key
	private static boolean 			soft1Key,soft2Key;// 软件Key

//	private static Command			cmdSoft1;		// 左软键
//	private static Command			cmdSoft2;		// 右软键

	//--------------------------------------------------------------------------
	//
	// 游戏变量
	//
	//--------------------------------------------------------------------------

    private static int[]			gameData;		// 游戏数据数组
    
    private static int				gState,gameState;
    												// 游戏状态
    private static int 				degree0,degree,Counter1,Counter2,BestScore;											
    												// 游戏难度   计数器   最好成绩
    private static int				leftHand,rightHand,leftFoot,rightFoot;  			
    												// 左手   右手		左脚	右脚
	private static int				isMove,pMove;	// 是否移动,人在画面移动的变量
	private static int 				gameMode;		// 攀登还是跳跃模式
	private static int  			musicOn;
    private static int  			gMax1,gMax2;	// 时间最大限制值
    
	private static int[]			route;			// 一回合的路线数据
	private static int[]			Score;			// 积分排列次序用数据
	private static int[]			aArray;			// 排列顺序的
	private static int				usedTime,timeSet;
													// 积分(经过的时间),时间设定
    private static int              gMenu;			// 游戏菜单
	private static int				count,count2;	// 动画片用计数器
	private static int				pHeight;		// Player 的高度 
	private static int				posX,posY;		// Player 的位置 
	private static int				posX1,posY1;	// 1画框前面 角色的位置 
	private static int				rValue;			// 随机减少的量 
	private static Random			random1;
	
	private String okStr,cancelStr;
	private static boolean iMenu;
	private static int 	   rowIndex;
	//--------------------------------------------------------------------------
	//
	// 静态initializer
	//
	//--------------------------------------------------------------------------
	static
	{
		sysData 	= new int[15];
		cImage		= new Image[65];
		gameData	= new int[31];
		Score		= new int[4];
		aArray		= new int[4];
		route		= new int[11*156];
		random1 	= new Random();
	}

	//--------------------------------------------------------------------------
	// 公司tractor
	//--------------------------------------------------------------------------
	GameCanvas( MainApp Midlet )
	{
		App = Midlet;
		Thread GThread = new Thread( this );
		GThread.start();

		// 没有正在通话
		ifPhone = false;

		// 手机屏幕尺寸
		width = getWidth();
		height = getHeight();

		// 把游戏画面当作显示的中央表示的支线
		midWidth = ( width - 120 ) / 2;
		midHeight = ( height - 120 ) / 2;

		// 最初状态
		sysData[4] = 1;

		// FPS(20恰当的价值)
		sysData[7] = 6;

		//  计数器 0 
		Counter1 = 0;
		Counter2 = 0;

		// 绘画准备没完成
		sysData[12] = 0;

		// 控制是否进行绘画0为否1为是
		sysData[13] = 0;

		// 启动次数
		sysData[14] = 1;
		//sysData[5] 音乐开关控制
		// 游戏状态设定
		gameState = 2;
		gState = 0;

		// 难易度的设定
		degree0 = 0;

		// 现在的难易度设定
		degree = 0;

		// 游戏内变量格式化 
		InitGame();

		// 排列次序
		for(int i = 4-1;i >= 0;i--)
		{
			aArray[i] = 0;
			Score[i] = 180000;
		}

		// 路线设定 
		for(int i = 0;i < 207;i++)
			route[i*3+(i/4)*21+12] = (random1.nextInt()>>>1)%30;

//		try
//		{
//			// 设置Command接口
//			setCommandListener( this );
//		}
//		catch( Throwable t )
//		{
//			//( t.toString() );
//		}
	}


	//--------------------------------------------------------------------------
	//
	// 运行方法
	//
	//--------------------------------------------------------------------------
	public void run()
	{
		int i, j;

		try
		{
			//------------------------------------------------------------------
			// 字体 (统一字型的尺寸) 
			//------------------------------------------------------------------
			font = Font.getDefaultFont();
			// 实际设定字体的编码
			if( font.getHeight() >= 16 )
				font = Font.getFont( Font.FACE_MONOSPACE , Font.STYLE_PLAIN, Font.SIZE_SMALL );

			//------------------------------------------------------------------
			// 资源读入
			//------------------------------------------------------------------
			try
			{
				// 图像
				aImage = Image.createImage(10,10);
				backImg = Image.createImage(120,120);
				offg = backImg.getGraphics();
				for( i = 65-1;i >= 50;i--)	//分开
				{
					// 零supply应急措施(为更漂亮的方法变更)
					cImage[i] = Image.createImage( "/" + i + ".png" );
					//( "img["+i+"] loaded successful" );

					// 来信后的)处理
					if( ifPhone == true )
					{
						ifPhone = false;
						gameData[30] = 3;
					}

					// 明示性地paint叫出()的
					sysData[13] = 1;
					repaint();
					
					serviceRepaints();
					gState = 100*(15-i)/(15-1);
				}
				cImage[0] = Image.createImage( "/" + 0 + ".png" );
				aImage.getGraphics().drawImage(cImage[0],0,0,Graphics.LEFT | Graphics.TOP);

				// 声音

			}
			catch( Throwable t )
			{
				//( t.toString() );
			}

			//------------------------------------------------------------------
			// 如果声音数据不存在的情况初始化为,存在则读取数据
			//------------------------------------------------------------------
			RecordStore Rec = RecordStore.openRecordStore( "FREE_CLIMBING", true );
			if( Rec.getNumRecords() == 0 )
			{
				//--------------------------------------------------------------
				// 声音的初始设定
				//
				// 这儿追加声音的初始设定值
				//
				//--------------------------------------------------------------
				sysData[5] = 1;
				AddRecord( Rec, sysData[5] );			// 音再生标志
				AddRecord( Rec, sysData[14] );			// 启动次数
				AddRecord( Rec, degree0 );				// 下面难易度
				for(i = 0;i < 4;i++)
					AddRecord( Rec, aArray[i] );		// 过关
				for(i = 0;i < 4;i++)
					AddRecord( Rec, Score[i] );			// 分数
				AddRecord( Rec, 0);						// 限制月
				AddRecord( Rec, 0);						// 限制日
				Rec.closeRecordStore();

				//--------------------------------------------------------------
				// 从现在起把 31 天后当作记录店保存
				//--------------------------------------------------------------
		 	    // nowCorp.SaveNextDate();
			}
			else
			{
				Rec.closeRecordStore();

				//--------------------------------------------------------------
				// 从文件读取声音数据
				//--------------------------------------------------------------
				sysData[5] = GetRecord( 1 );
			//	if( sysData[5] == 0 )
			//		sound.Switch();
				sysData[14] = GetRecord( 2 );
				sysData[14]++;
				SetRecord( 2, sysData[14] );
				degree0 = GetRecord(3);
				degree = degree0+1;
				for(i = 0;i < 4;i++)
				{
					aArray[i] = GetRecord(4+i);
					Score[i] = GetRecord(8+i);
				}
			}

			//------------------------------------------------------------------
			//------------------------------------------------------------------
		
				    // 游戏开始设定
					gameState = 2;
					//gState = 3;
					gameData[30] = 3;

					// 软件key设定
					SetSoftLabel("开始","");	
			

			//------------------------------------------------------------------
			//
			// 主要处理
			//
			// 在这里写的「■主要处理」以后的处理是 
			// 全部实行不可以变更顺序 
			//
			//------------------------------------------------------------------
			while( true )
			{
				// 主要处理
				time1 = System.currentTimeMillis();

				// 开始计时
				Counter1++;

				// 通用计数器
				// sound.canSound();

				// 音乐再生
				if( ifPhone == true )
				{
					ifPhone = false;
					sysData[12] = 0;
					sysData[13] = 1;
					gameData[30] = 3;
					if( font.getHeight() >= 16 )
						font = Font.getFont( Font.FACE_MONOSPACE , Font.STYLE_PLAIN, Font.SIZE_SMALL );
				//	if( sound != null )
				//	sound.Replay();
				}

				//--------------------------------------------------------------
				// 主要处理
				//--------------------------------------------------------------
				Work();

				//--------------------------------------------------------------
				// 应用结束 
				//--------------------------------------------------------------
				if( gameState == 13 )
				{
				//	sound.End();
					App.Exit();

					return;
				}

				//--------------------------------------------------------------
				// 绘画处理 
				// flag为假时候绘画
				//--------------------------------------------------------------
				if( sysData[4] == 0 )
				{
					// 明示性地paint叫出()
					sysData[13] = 1;
					repaint();
					serviceRepaints();
					// 直到绘画终了待命
					while( sysData[13] != 0 );
				}


				//--------------------------------------------------------------
				// FPS调整
				// 1圈的时间「1000 / sys[SYS_FPS]
				//--------------------------------------------------------------
				time2  = System.currentTimeMillis();
				if( (time2 - time1) > 1000 / sysData[7] )
				{
					//("skip");
					// 因为超过了 , 所以下一个画框跳绘画向快速处理
					sysData[4] = 1;
				}
				else
				{
					// 时间多余了待命
//#ifdef __DEBUG
//					Thread.sleep( 100 );
//#else
					Thread.sleep( (1000 / sysData[7] - (time2 - time1)) );
//#endif
					sysData[4] = 0;
				}
//				if( Counter2 != 0 && (Counter1-Counter2 == 20
//					|| gameState == 5 || gameState == 3))
//					setCommandListener(this);
			}
		}
		catch( Throwable t )
		{
			//( t.toString() );
		}
	}

	//--------------------------------------------------------------------------
	//
	// 按键操作,在这里上写的
	//
	//--------------------------------------------------------------------------
	private void Work()
	{
		// METHOD_TRACE("WORK IN");
		//----------------------------------------------------------------------
		// 按键操作处理 
		//----------------------------------------------------------------------
		// 音乐演奏ON/OFF移动等的处理
		if( KeySound )
		{
			if( sysData[5] == 0 )
				sysData[5] = 1;
			else
				sysData[5] = 0;
		//	sound.Switch();
			SetRecord(1, sysData[5]);
		}

		//----------------------------------------------------------------------
		// 游戏连同场面的处理 
		//----------------------------------------------------------------------
		switch( gameState )
		{
			// 游戏 PLAY
			case 5:
			{
				//  Player 手的位置操作
				//	gameData[30]控制角色运动
				//	gameData[14]gameData[15]角色的x,y基点用于绘画时候
				if( KeyUp )
				{
					if(gameData[16] == 0 )//gameData[16]控制左右手的动作
					{
						gameData[9] = 2;//gameData[9]跟leftHand或rightHand控制移动方向
						leftHand = 2;//2,2表示向上移动
					}
					else
					{
						gameData[9] = 2;
						rightHand = 2;
					}
					count = 1;
					gameData[30] = 2;
				}
				if( KeyDown )
				{
					if( gameData[16] == 0 && gameData[14] > 10 && gameData[15] < 110 )
					{
						gameData[9] = 6;
						leftHand = 6;//6表示向下移动
						count = 1;
					}
					else if( gameData[16] == 1 && gameData[14] < 80 && gameData[15] < 110 )
					{
						gameData[9] = 6;
						rightHand = 6;
						count = 1;
					}
					gameData[30] = 2;
				}
				if( KeyLeft )
				{
					if( gameData[16] == 0 && gameData[14] > 10 )
					{
						gameData[9] = 4;//4表示向左移动
						leftHand = 4;
						count = 1;
					}
					if( gameData[16] == 1 && gameData[14] > 20 )
					{
						gameData[9] = 0;
						rightHand = 0;
						count = 1;
					}
					gameData[30] = 2;
				}
				if( KeyRight )
				{
					if( gameData[16] == 1 && gameData[14] < 80 )
					{
						gameData[9] = 4;
						rightHand = 4;
						count = 1;
					}
					if( gameData[16] == 0 && gameData[14] < 70 )
					{
						gameData[9] = 0;
						leftHand = 0;
						count = 1;
					}
					gameData[30] = 2;
				}

				// 软件按键处理
				if( soft1Key && rowIndex==0 && iMenu==false)
					backTitle();

⌨️ 快捷键说明

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