From de5b309e0f06e93a963e09ef13c369ae7deeccc9 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 25 Jul 2026 10:58:28 -0700 Subject: Port a game I wrote a long time ago to JS --- static/games/stallman-shooter/player.js | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 static/games/stallman-shooter/player.js (limited to 'static/games/stallman-shooter/player.js') diff --git a/static/games/stallman-shooter/player.js b/static/games/stallman-shooter/player.js new file mode 100644 index 0000000..83144e0 --- /dev/null +++ b/static/games/stallman-shooter/player.js @@ -0,0 +1,88 @@ +import * as constants from '/static/games/stallman-shooter/constants.js'; + +export class Player { + constructor() { + this.x = 400; + this.y = 500; + this.x_d = 0; + this.y_d = 0; + this.down_p = false; + this.left_p = false; + this.right_p = false; + this.up_p = false; + this.fire_rate = 15; + this.shift_p = false; + } + + act(events) { + for (const event of events) { + const [kind, key] = event; + if (kind === 'keydown' && key === 'ArrowDown') { + this.down_p = true; + this.y_d = -1; + } else if (kind === 'keyup' && key === 'ArrowDown') { + this.down_p = false; + } else if (kind === 'keydown' && key === 'ArrowUp') { + this.up_p = true; + this.y_d = 1; + } else if (kind === 'keyup' && key === 'ArrowUp') { + this.up_p = false; + } else if (kind === 'keydown' && key === 'ArrowLeft') { + this.left_p = true; + this.x_d = -1; + } else if (kind === 'keyup' && key === 'ArrowLeft') { + this.left_p = false; + } else if (kind === 'keydown' && key === 'ArrowRight') { + this.right_p = true; + this.x_d = 1; + } else if (kind === 'keyup' && key === 'ArrowRight') { + this.right_p = false; + } else if (kind === 'keydown' && key === 'Shift') { + this.shift_p = true; + } else if (kind === 'keyup' && key === 'Shift') { + this.shift_p = false; + } + } + if (this.left_p) { + if (!this.right_p) { + this.x_d = -1; + } + } else if (this.right_p) { + this.x_d = 1; + } else { + this.x_d = 0; + } + if (this.up_p) { + if (!this.down_p) { + this.y_d = -1; + } + } else if (this.down_p) { + this.y_d = 1; + } else { + this.y_d = 0; + } + /* Don't go off the side */ + if (this.x_d < 0 && this.x <= 0 || this.x >= constants.x_dim && this.x_d > 0) { + this.x_d = 0; + } + if (this.y <= 0 && this.y_d < 0 || this.y >= constants.y_dim && this.y_d > 0) { + this.y_d = 0; + } + + if (this.shift_p) { + this.x += this.x_d; + this.y += this.y_d; + } else { + this.x += this.x_d * 3; + this.y += this.y_d * 3; + } + } + + radius() { + return 3; + } + + center() { + return [33, 21]; + } +} -- cgit v1.3.1