game
This commit is contained in:
parent
b5b4307025
commit
fc2b910d84
1 changed files with 124 additions and 61 deletions
97
game.ayin
97
game.ayin
|
|
@ -1,8 +1,9 @@
|
|||
let screen_size = 360
|
||||
let shoot_timer = 60
|
||||
let shoot_timer = 120
|
||||
let shot_timer = 1
|
||||
let dim = {
|
||||
.w: 16,
|
||||
.h: 16,
|
||||
.w: 32,
|
||||
.h: 32,
|
||||
}
|
||||
let bullet_dim = {
|
||||
.w: dim.w / 4,
|
||||
|
|
@ -10,11 +11,9 @@ let bullet_dim = {
|
|||
}
|
||||
|
||||
let migrate = fn(state) {
|
||||
return setup();
|
||||
state
|
||||
}
|
||||
|
||||
|
||||
let setup = fn() {
|
||||
return {
|
||||
.player: {
|
||||
|
|
@ -23,14 +22,16 @@ let setup = fn() {
|
|||
.y: dim.h,
|
||||
},
|
||||
.speed: 360,
|
||||
.shot: 1,
|
||||
.shot_timer: 0,
|
||||
},
|
||||
.enemy: {
|
||||
.pos: {
|
||||
.x: dim.w,
|
||||
.y: dim.h,
|
||||
},
|
||||
.speed: 20,
|
||||
.timer: shoot_timer,
|
||||
.speed: 60,
|
||||
.timer: 0,
|
||||
},
|
||||
.bullets: {
|
||||
.pos: {
|
||||
|
|
@ -61,23 +62,20 @@ let move_player = fn(state, input) {
|
|||
|
||||
state.player.pos.x =
|
||||
max(0,
|
||||
min( state.player.pos.x + (delta * state.player.speed * movement.x)
|
||||
min( state.player.pos.x + ((delta * state.player.speed * movement.x) / state.player.shot)
|
||||
, screen_size - dim.w
|
||||
)
|
||||
);
|
||||
state.player.pos.y =
|
||||
max(0,
|
||||
min( state.player.pos.y + (delta * state.player.speed * movement.y)
|
||||
min( state.player.pos.y + ((delta * state.player.speed * movement.y) / state.player.shot)
|
||||
, screen_size - dim.w
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
let update = fn(state, input) {
|
||||
let move_enemy = fn(state) {
|
||||
let delta = get_frame_time();
|
||||
state.timer = state.timer + delta;
|
||||
|
||||
move_player(state, input);
|
||||
|
||||
let enemy_movement = {
|
||||
.x: if abs(state.enemy.pos.x - state.player.pos.x) < 5 { 0 } else { if state.enemy.pos.x < state.player.pos.x { 1 } else { -1 } },
|
||||
|
|
@ -97,19 +95,60 @@ let update = fn(state, input) {
|
|||
)
|
||||
);
|
||||
|
||||
shoot_bullets(state, enemy_movement);
|
||||
}
|
||||
|
||||
let shoot_bullets = fn(state, enemy_movement) {
|
||||
let delta = get_frame_time();
|
||||
|
||||
state.enemy.timer = state.enemy.timer - 1;
|
||||
if state.enemy.timer == 0 {
|
||||
if (state.enemy.timer <= 0) && (state.status != "caught") {
|
||||
state.enemy.timer = shoot_timer;
|
||||
|
||||
state.bullets.pos.x = state.enemy.pos.x + (dim.w * enemy_movement.x);
|
||||
state.bullets.pos.y = state.enemy.pos.y + (dim.h * enemy_movement.y);
|
||||
state.bullets.movement.x = enemy_movement.x;
|
||||
state.bullets.movement.y = enemy_movement.y;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
let move_bullets = fn(state) {
|
||||
let delta = get_frame_time();
|
||||
|
||||
state.bullets.pos.x =
|
||||
state.bullets.pos.x + (delta * state.bullets.speed * state.bullets.movement.x);
|
||||
state.bullets.pos.y =
|
||||
state.bullets.pos.y + (delta * state.bullets.speed * state.bullets.movement.y);
|
||||
}
|
||||
|
||||
let update = fn(state, input) {
|
||||
let delta = get_frame_time();
|
||||
|
||||
if state.status != "caught" {
|
||||
state.timer = state.timer + delta;
|
||||
};
|
||||
|
||||
if state.status == "ongoing" {
|
||||
move_player(state, input);
|
||||
};
|
||||
|
||||
if state.player.shot_timer > 0 {
|
||||
state.player.shot_timer = state.player.shot_timer - delta;
|
||||
} else {
|
||||
state.player.shot_timer = 0;
|
||||
};
|
||||
|
||||
move_enemy(state);
|
||||
move_bullets(state);
|
||||
|
||||
if is_touching(make_rect(state.bullets.pos, { .w: dim.w / 2, .h: dim.h / 2 }), make_rect(state.player.pos, dim)) && (state.player.shot_timer == 0) {
|
||||
state.player.shot = state.player.shot + 1;
|
||||
state.player.shot_timer = shot_timer;
|
||||
};
|
||||
if is_touching(make_rect(state.enemy.pos, dim), make_rect(state.player.pos, dim)) {
|
||||
state.status = "caught";
|
||||
};
|
||||
|
||||
return state;
|
||||
}
|
||||
|
|
@ -145,7 +184,21 @@ let draw = fn(state) {
|
|||
let color = { .r: 255, .g: 255, .b: 255 };
|
||||
draw_rectangle(bullet_rect, color);
|
||||
|
||||
draw_text("RUN!!!", 20, 50, 50, { .r: 255, .g: 55, .b: 55 });
|
||||
if state.status == "caught" {
|
||||
draw_text("You got caught!", 20, 20, 20, { .r: 155, .g: 55, .b: 255 });
|
||||
} else {
|
||||
draw_text("RUN!!!", 20, 20, 20, { .r: 255, .g: 55, .b: 155 });
|
||||
|
||||
if state.player.shot_timer > 0 {
|
||||
draw_text("Oof!", 200, 20, 20, {
|
||||
.r: 100 + (state.player.shot_timer * 50 * state.player.shot) % 255,
|
||||
.g: 100,
|
||||
.b: 100,
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
draw_text(state.timer, 260, 20, 20, { .r: 55, .g: 205, .b: 155 });
|
||||
}
|
||||
|
||||
let min = fn(a,b) {
|
||||
|
|
@ -168,9 +221,19 @@ let abs = fn(a) {
|
|||
if a >= 0 { a } else { 0 - a }
|
||||
}
|
||||
|
||||
let make_rect = fn(pos, dim) {
|
||||
{ .x: pos.x,
|
||||
.y: pos.y,
|
||||
.w: dim.w,
|
||||
.h: dim.h,
|
||||
}
|
||||
}
|
||||
|
||||
let is_touching = fn(rect1, rect2) {
|
||||
if ((rect1.x < rect2.x) && ((rect1.x + rect1.w) > rect2.x))
|
||||
&& ((rect1.y < rect2.y) && ((rect1.y + rect1.h) > rect2.y)) {
|
||||
if (((rect1.x < rect2.x) && ((rect1.x + rect1.w) > rect2.x))
|
||||
&& ((rect1.y < rect2.y) && ((rect1.y + rect1.h) > rect2.y)))
|
||||
|| (((rect2.x < rect1.x) && ((rect2.x + rect2.w) > rect1.x))
|
||||
&& ((rect2.y < rect1.y) && ((rect2.y + rect2.h) > rect1.y))) {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue