]> git.eli173.com Git - pong_br/commitdiff
boutta nuke some junk, getting it recorded first
authorElijah Cohen <eli@eli173.com>
Tue, 14 May 2019 23:28:02 +0000 (18:28 -0500)
committerElijah Cohen <eli@eli173.com>
Tue, 14 May 2019 23:28:02 +0000 (18:28 -0500)
in case it's a bad idea (it's not)

TODO.org
server/constants.js
server/robot.js

index 19fdde64851008e6021b32df4857332e6833fe04..c630992fbca345aaefa643e5c51d6eb1fe710b0c 100644 (file)
--- a/TODO.org
+++ b/TODO.org
@@ -1,5 +1,6 @@
 important:
-
-list of things i should still do:
+- fix the robots
+- paddle movement bump
 - fix collisions
+- more balls
 - fiddle with variables to optimize fun
index 5d21ea4eb6d5a11aa4ac78539c482917afdaeb44..3f12a3d14c96e8a62782edf1610430070d1a54b6 100644 (file)
@@ -6,8 +6,8 @@ var c = {
     NUM_PLAYERS: 4,
     FPS: 30,
     WAIT_TIME: 60000, // 1 minute
-    MAX_GAMES: 2, // the most games allowed to go on at once, to be tweaked as needed for purposes
-    ROBO_TIME: 10, // time in seconds before filling out with robots
+    MAX_GAMES: 100, // the most games allowed to go on at once, to be tweaked as needed for purposes
+    ROBO_TIME: 5, // time in seconds before filling out with robots
     // gamestate
     DYING_TIME_IN_FRAMES: 100,
     BOARD_RADIUS: 10,
@@ -19,7 +19,7 @@ var c = {
     MAX_INIT: 3, // initial speed constraints
     BALL_RADIUS: 0.5,
     MAX_SPEED: 15,
-    SPEED_BUMP: 0.2,
+    SPEED_BUMP: 0.5,
     // field
     BOARD_RADIUS: 10, // completely arbitrary actually...
     // paddle
index 0c1c35639f379fe3db80786a6543941c0d2c64c5..cba2dd27522093af6945a74b77f3d587862b5a15 100644 (file)
@@ -3,6 +3,8 @@ const c = require('./constants.js');
 
 const Coord = require('./coord.js');
 const field = require('./field.js');
+const Endpoints = require('./endpoints.js');
+const Paddle = require('./paddles.js'); // hacky? not too hacky.
 
 function Robot() {
     this.status = 'x';
@@ -28,6 +30,51 @@ Robot.prototype.random_ai = function(data) {
     this.status = Math.random()>0.5 ? 'u' : 'd';
 }
 Robot.prototype.standard_ai = function(data) {
+    if(typeof data == "string")
+       return;
+    if(data.balls.length == 0)
+       return;
+    var me = data.id;
+    var eps = field.genAllEndpoints(data.n, data.dead);
+    var my_ep = eps.find(x => x.id == me);
+    if(typeof my_ep == 'undefined') {
+       this.status = 'x';
+       return;
+    }
+    var center = ep_midpoint(my_ep);
+    var nearest = data.balls[0];
+    var bdist2 = center.dist2(nearest);
+    for(var ball of data.balls) {
+       var newdist = center.dist2(ball);
+       if(newdist < bdist2) {
+           nearest = ball;
+           bdist2 = newdist;
+       }
+    }
+    var theta = Math.atan2(my_ep.s.y-my_ep.f.y, my_ep.s.x-my_ep.f.x);
+    // not totally sure if i need this copy, dunno where else the object is used...
+    var nearest_mod = new Coord(nearest.x, nearest.y)
+    nearest_mod.translate(center.x, center.y);
+    nearest_mod.rotate(-theta);
+    // now i get the paddle's relative position along the line, and use that to compare with
+    if(!data.paddles.some(p => p.id==data.id))
+       return;
+    var my_paddle = data.paddles.find(p => p.id == data.id);
+    // largely stolen from getPaddlePoints
+    var ep_len = my_ep.getLength();
+    var pspace_len = ep_len-c.WIDTH_RATIO*ep_len;
+    var idk_len = (ep_len-pspace_len)/2;
+    var paddle_ratio = (my_paddle.pos+1)/2;
+    var center_pos = idk_len+paddle_ratio*pspace_len;
+    if(data.id==2)
+       console.log(nearest_mod.x < center_pos, nearest_mod.x, center_pos);
+    this.status = (nearest_mod.x < center_pos) ? 'd' : 'u';
+}
+
+
+
+
+Robot.prototype.bad_ai = function(data) {
     if(typeof data == "string")
        return;
     if(data.balls.length == 0)
@@ -66,6 +113,8 @@ Robot.prototype.standard_ai = function(data) {
 var midpoint = function(a,b) {
     return new Coord((a.x+b.x/2), (a.y+b.y)/2);
 }
-
+var ep_midpoint = function(e) {
+    return midpoint(e.f, e.s);
+}
 
 module.exports = Robot;