📄 dynamic.java
字号:
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 + -