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

📄 dynamic.java

📁 之前有人传过`不过是没有资源只有代码的` 我在重新传一遍有资源的`是一个滑雪的游戏`类似flash的打企鹅`
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

import javax.microedition.lcdui.Canvas;

class Dynamic
{
	static final int J_HEIGHT 						= 160;
	int image_index;
	int frame_index;

	static int tx,ty,i,j;

	int x,y;
	int dx,dy;
	int fw,fh;

	// animation variables

	int b[] = null;
	int a1;
	int a2;

//#if Nokia
	Frame frm[] = null;
//#else
	Frame frm_up[] = null;
	Frame frm_dn[] = null;
//#endif

	int frm_disp;

	int aa,v,s,p;

	static int y_points[] = {0, 4, 3};

	int max_period,period,delay_index;

	boolean finished;
	boolean shootEnabled;
	boolean pressed, processed;
	int man_index;
	boolean isGhost;

	int task,time,taskInterval;

	int state = -1,state_delay;

	boolean result;

	int track_x_cur,track_y_cur;		// coords of left edge of current track part, accumulative
	int rx,ry;									// relative coords of man (of current track part)

    int target_y;
    int aim_n;
    int aim_x;
    int aim_y;
    int aim_x_range;
    int aim_amplitude;
    int aim_dx;
    int aim_dy;
    int targets[];
    int s_v;
    int heart_delay;
    int heart_index;
	int missed;

	int start_x, start_y;
	boolean begin = true;

	int w_action;			// store wrong keypress (not in time)
	int action;
	int prev_action;
	int mistake_cnt;

	public Dynamic(){}

	void init(int x,int y,String frame_name,boolean isGhost)
	{
		this.x = start_x = x;
		this.y = start_y = y;
		
		this.isGhost = isGhost;

		if (frame_name != null)
		{
//#if Nokia
			frm = new Frame[6];
			for (i = 0; i < 3; i++)
			{
				frm[i + i] = Main.gf(frame_name,i,0,0);
				frm[i + i + 1] = Main.gf(frame_name,i,1,0);
			}
//#else
			frm_up = new Frame[15];
			frm_dn = new Frame[15];
			for (i = 0; i < 3; i++)
			{
				for (j = 0; j < 5; j++)
				{
					frm_up[i * 5 + j] = Main.gf(frame_name,i,0,j);
					frm_dn[i * 5 + j] = Main.gf(frame_name,i,1,j);
				}
			}
//#endif
		}
		restart();
	}

	void restart()
	{
		x = start_x;
		y = start_y;
		dx = dy = 0;
		begin = true;
		delay_index = 0;
		task = 0;
		time = 0;
		taskInterval = 75;
		state_delay = 0;
		max_period = 4;
		delay_index = 0;
		finished = false;
		shootEnabled = true;
		pressed = false;
		processed = false;
		finished = false;
		frame_index = 0;
		Main.rounds_passed = 0;
		shootEnabled = true;
		result = false;
		aa = v = p = rx = ry = track_x_cur = track_y_cur = man_index = period = 0;
		a1 = 0;
		a2 = 1;
		aim_n = 0;
		aim_x = 0;
		aim_y = 0;
		aim_x_range = 0;
		aim_amplitude = 0;
		aim_dx = 0;
		aim_dy = 0;
		targets = null;
		s_v = 0;
		heart_delay = 0;
		heart_index = 0;
		missed = 0;
		w_action = 0;
		action = 0;
		prev_action = 0;
		mistake_cnt = 0;

//#if Nokia
		if (frm != null)
		{
//#else
		if (frm_up != null)
		{
//#endif
			s = x << 5;
		}
		else
		{
			// here we assume init for SJ
			j_state = 0;
			j_x = 12; 
			j_s = j_x << 5;
			j_y = Main.start_y + 8;
			j_v = 0;
			j_i1 = j_i2 = 2;
			j_t1 = j_t2 = 0;
			j_wind = j_wind_dest = j_wind_power = j_wind_power_dest = 0;
			track_x_sum = Main.track_x[0];
		}
	}

	void next()
	{
		b = Main.anims[a1];
		if (++a2 >= b.length) a2 = b.length - 1;
	}

    void drawBSS()
    {
		image_index = frame_index = 0;
//		if (frames_up != null)
		{
			b = Main.anims[a1];
			if (b != null)
			{
				frame_index = b[0];
				image_index = b[a2];
			}
//#if Nokia
			frm_disp = frame_index * 2;

			if (frm != null)
			{
				fw = frm[frm_disp].fw;
				fh = frm[frm_disp].fh;
				if (frm[frm_disp + 1] != null) fh += frm[frm_disp + 1].fh;

				tx = x - Main.a_x_d - (fw >> 1);
				ty = Main.start_y - y - Main.a_y_d - fh + y_points[delay_index];
			
	  			if ((tx > - fw) && (ty > - fh) && (tx < Main.s_w) && (ty < Main.s_h))
		  		{
		  			Main.setClip(tx,ty,fw,fh);
	  				Main.drawImage(frm[frm_disp].index,tx - image_index,ty);
	  				if (frm[frm_disp + 1] != null)
		  				Main.drawImage(frm[frm_disp + 1].index,tx - image_index,ty + frm[frm_disp].fh);
				}
	  		}
//#else
			frm_disp = frame_index * 5;

			if (frm_up != null)
			{
				fw = frm_up[frm_disp].fw;
				fh = frm_up[frm_disp].fh;
				if (frm_dn[frm_disp] != null) fh += frm_dn[frm_disp].fh;

				tx = x - Main.a_x_d - (fw >> 1);
				ty = Main.start_y - y - Main.a_y_d - fh + y_points[delay_index];
			
	  			if ((tx > - fw) && (ty > - fh) && (tx < Main.s_w) && (ty < Main.s_h))
		  		{
		  			frm_up[frm_disp + image_index].draw(tx,ty);
	  				if (frm_dn[frm_disp + image_index] != null) 
	  					frm_dn[frm_disp + image_index].draw(tx,ty + frm_up[frm_disp + image_index].fh);
				}
	  		}
//#endif
		}
    }
	/////////////////////////////////////////////////////////////////////////////////////////////
	boolean update_skater_run(int param_action)
	{
		action = param_action;

    	aa = - 4;
		if (!finished)
		{
	    	aa = - 6;
		}
		max_period = 4;

		processed = false;
//		mistake_cnt = 0;

		if (action == prev_action)
		{
			action = 0;
		}
		else
		{
			pressed = false;
			prev_action = action;
		}

		if (w_action != 0 && (mistake_cnt == 0))
		{
			if (period != 0) action = 0;
			else
			{
				action = w_action;
				pressed = false;
				w_action = 0;
			}
		}

		switch (action)
	    {
            case -3:
			case Canvas.KEY_NUM4:
					if (!pressed && (!finished))
					{
						if (period == 0)
						{
							if (man_index != 0 || begin)
							{
								man_index = 0;
								pressed = processed = true;
							}
						}								
						else
						{
							mistake_cnt = 1;
							processed = pressed = true;
							w_action = action;
						}
					}
					break;
			case -4:
			case Canvas.KEY_NUM6:
					if (!pressed && (!finished))
					{
						if (period == 0)
						{
							if (man_index != 1 || begin)
							{
								man_index = 1;
								pressed = processed = true;
							}
						}
						else
						{
							mistake_cnt = 1;
							processed = pressed = true;
							w_action = action;
						}
					}
					break;
			case -7:
			case Canvas.KEY_STAR:
					processed = true;
					Main.pause();
					break;
			case Main.NO_ACTION:;
//					pressed = false;
		}
//		pressed = false;
    	dx = 0;

    	if (mistake_cnt > 0)
    	{
    		mistake_cnt--;
    	}
    	else
    	{
			if (processed)
			{
				period = max_period;
				a2 = 1;
				if (begin)
				{
					a2 = 2;
					begin = false;
				}
	   			a1 = man_index + 1;
			}
			//
	    	if (finished) next();
    		else
	    	{
		        if (period > 0)
	    		{
   	    		   	aa = 3;
    		       	while(task <= time)
		           	{
		            	next();
    			       	period--;
    			       	taskInterval = 100 + (v >> 2);
		           		task += taskInterval;
	    	   	    }
	    	        time += 75;
				}
			}
		}

		v += aa;
		if (v < 0) v = 0;
		if (v > 160) v = 160;

		s += v;

		dx = x;
		x = s >> 5;
		dx = x - dx;

    	if (x > Main.track_width)
    	{
    		if (!finished)
    		{
    			a1 = 3;
    			a2 = 1;
    			if (!isGhost) Main.finish_skater_run();
    		}
    		finished = true;
    	}
        return processed;
	}

	boolean update_biathlon(int action)
	{
		switch(state)
		{
			case Main.STATE_BIATHLON_RUN:
				result = update_biathlon_run(action);				
				break;
			case Main.STATE_BIATHLON_SHOOT:
				result = update_biathlon_shoot(action);
				break;
			case Main.STATE_BIATHLON_SHOOT_FINISH:
				result = update_biathlon_shoot(action);
				if (--state_delay <= 0)
				{
					v = 100;
					man_index = 1;
					state = Main.STATE_BIATHLON_RUN;
					if (!isGhost)
					{
						Main.a_x_d = x + 20;	// to provide to appear from left side after shots
					}
				}
				break;
			case Main.STATE_BIATHLON_RUN_FINISH:
				result = update_biathlon_run(action);
				if (--state_delay <= 0)
				{
					if (isGhost)
					{
						state_delay = 0;
					}
					else
					{
						Main.go_delay = 0;
						Main.state_delay = 40;
						state = Main.state = Main.STATE_BIATHLON_RUN_SCORES;
					}
				}
		}
		return result;
	}

    boolean update_biathlon_run(int param_action)
    {
		action = param_action;

    	aa = - 4;
    	dx = delay_index;

    	delay_index = 0;
    	taskInterval = 120;
    	if (Main.track_y[p] > 0)
    	{
    		aa = - 5;
	    	taskInterval = 110;
    		delay_index = 1;
		}
    	if (Main.track_y[p] < 0)
    	{
    		aa = - 2;
	    	taskInterval = 140;
    		delay_index = 2;
		}
       	taskInterval += v >> 2;

		max_period = 4;

		processed = false;
		if (action == prev_action)
		{
			action = 0;
		}
		else
		{
			pressed = false;
			prev_action = action;
		}

		if (w_action != 0 && (mistake_cnt == 0))
		{
			if (period != 0) action = 0;
			else
			{
				action = w_action;
				pressed = false;
				w_action = 0;
			}
		}

		switch (action)
	    {
        /*
			case Canvas.KEY_NUM1:
					finished = true;
					state = Main.STATE_BIATHLON_RUN_FINISH;
					state_delay = 40;
					Main.finish_biathlon_run();
 					break;
             */
            case -3:
			case Canvas.KEY_NUM4:
					if (!pressed && (delay_index != 2) && !finished)
					{
						if (period == 0)
						{
							if (man_index != 0 || begin)
							{
								man_index = 0;
								pressed = processed = true;
							}
						}								
						else
						{
							mistake_cnt = 2;
							if (period == 1) mistake_cnt = 1;
							processed = pressed = true;
							w_action = action;
						}
					}
					break;
			case -4:
			case Canvas.KEY_NUM6:
					if (!pressed && (delay_index != 2) && !finished)
					{
						if (period == 0)
						{
							if (man_index != 1 || begin)
							{
								man_index = 1;
								pressed = processed = true;
							}
						}
						else
						{
							mistake_cnt = 2;
							if (period == 1) mistake_cnt = 1;
							processed = pressed = true;
							w_action = action;
						}
					}
					break;
			case -2:
			case Canvas.KEY_NUM8:
					if (!pressed && (delay_index == 2) && !finished)
					{
						if (period == 0)
						{
							man_index = 1;
							pressed = processed = true;
						}
						else
						{
							mistake_cnt = 2;
							processed = pressed = true;
							w_action = action;
						}
					}
					break;
			case -7:
			case Canvas.KEY_STAR:
					processed = true;
					Main.pause();
					break;
			case Main.NO_ACTION:
					pressed = false;
					prev_action = 0;
		}

		if (dx != delay_index || begin || processed) 
		{
			if (dx == 2 && !processed) // from landing to horiz
			{
				man_index = 0;
			}
   			a1 = man_index + 1 + (delay_index << 1);
		}

    	if (mistake_cnt > 0)
    	{
    		mistake_cnt--;
    	}
    	else
    	{
			if (processed)
			{
				period = max_period;
				a2 = 1;
				if (begin)
				{

⌨️ 快捷键说明

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