]> git.eli173.com Git - pong_br/commitdiff
some kind of communication works
authorElijah Cohen <eli@eli173.com>
Mon, 29 Apr 2019 20:09:06 +0000 (15:09 -0500)
committerElijah Cohen <eli@eli173.com>
Mon, 29 Apr 2019 20:09:06 +0000 (15:09 -0500)
next: frontend, then debugging

server/ball.js
server/constants.js
server/field.js
server/game.js
server/gamestate.js
server/paddles.js

index e0daf4edd6bfe46dee213476a811d44272c71443..44c6084069229db7c198fed0b7790d8bf76fb879 100644 (file)
@@ -5,7 +5,7 @@ const Coord = require('./coord.js');
 
 function Ball() {
     // generates a new ball with random direction and speed (within limits)
-    var coord = new Coord(0,0);
+    this.coord = new Coord(0,0);
     var angle = Math.random()*2*Math.PI;
     var speed = Math.random()*(c.MAX_INIT-c.MIN_INIT) + c.MIN_INIT;
     this.dx = speed*Math.cos(angle);
@@ -25,6 +25,12 @@ Ball.prototype.get_angle = function() {
     // gets angle from the origin
     return Math.atan2(this.coord.y, this.coord.x);
 }
+
+Ball.prototype.reduce = function() {
+    // returns a minimally necessary object for use on the client
+    return this.coord;
+}
+
 Ball.prototype.radius = c.BALL_RADIUS;
 
 module.exports = Ball;
index 53b6c2cbf89f28a28fa5b43b9692e4cc330e835f..f01ff5934c27b07d6ee3de2bc54794b1c535bea2 100644 (file)
@@ -6,6 +6,7 @@ var c = {
     NUM_PLAYERS: 3,
     MS_PER_FRAME: 500,
     WAIT_TIME: 60000, // 1 minute
+    MAX_GAMES: 5, // the most games allowed to go on at once, to be tweaked as needed for purposes
     // gamestate
     DYING_TIME_IN_FRAMES: 100,
     BOARD_RADIUS: 10,
index 3f63978cbcdc34fec16cdab70cfc6bbcbb52ccef..abd312490fb5c91178aa064db3aa3c6da05882ce 100644 (file)
@@ -16,7 +16,7 @@ var genEndpoints = function(n ,dead) {
     // so i'll start from a radius out a zero radians
     var endpoints = [];
     var players_length = n - dead.length;
-    for(var d in dead) {
+    for(var d of dead) {
        players_length += d.time/c.DYING_TIME_IN_FRAMES;
     }
     var theta = 0;
@@ -64,7 +64,7 @@ var angles = function(n, dead, thresh) {
     // gives angle pairs for the thresholds and whatnot.
     var angs = [];
     var players_length = n - dead.length;
-    for(var d in dead) {
+    for(var d of dead) {
        players_length += d.time/c.DYING_TIME_IN_FRAMES;
     }
     var theta = 0;
@@ -85,7 +85,7 @@ var angles = function(n, dead, thresh) {
            var t1 = theta;
            theta += dtheta/2;
            var t2 = theta;
-           angs.push(new anglepair(t1, t2, n));
+           angs.push(new AnglePair(t1, t2, n));
        }
     }
     return angs;
index 70ed3ed154803fbaf96aff572391fedc70536e47..ac85f31adf5ce7570b29cf418816d9a36ef03301 100644 (file)
@@ -20,8 +20,10 @@ Game.prototype.getNextFrame = function() {
     var inputs = this.players.map(function(p) {return p.get_status();});
     this.state.update(inputs);
     var state = this.state.getState();
+    state.id = 0;
     for(var i=0; i<this.players.length;i++) {
-       this.players[i].socket.send(i.toString() + ", " + state);
+       state.id = i;
+       this.players[i].socket.send(JSON.stringify(state));
     }
 }
 
index a5bb7193207426aa9cb3e1485bb43d4270207893..a9225c47dfd1211678e7414a6b191fd3a72fc7b5 100644 (file)
@@ -5,7 +5,7 @@ const c = require('./constants.js');
 const Coord = require('./coord.js');
 const Ball = require('./ball.js');
 const field = require('./field.js');
-
+const Paddle = require('./paddles.js');
 
 function Dead(id) {
     this.id = id;
@@ -18,13 +18,12 @@ function GameState(n) {
     this.dead = [];
     this.paddles = [];
     for(var i=0;i<n;i++) {
-       this.paddles.push(new Paddle(n));
+       this.paddles.push(new Paddle(i));
     }
     this.balls = [];
     for(var i=0;i<starting_balls(n);i++) {
        this.balls.push(new Ball());
     }
-    this.field = field.genEndpoints(n,[]);
 }
 
 function starting_balls(n) {
@@ -46,7 +45,7 @@ function nearest_point_on_line(c, ep) {
     }
     var sl = (ep.f.y-ep.s.y)/(ep.f.x-ep.s.x);
     var sr = 1/sl;
-    var x_int = (sl*ep.f.x - sr*c.x + c.y - ep.f.y)/(sl-sb);
+    var x_int = (sl*ep.f.x - sr*c.x + c.y - ep.f.y)/(sl-sr);
     var y_int = sr*(x_int-c.x) + c.y;
     return new Coord(x_int, y_int);
 }
@@ -55,21 +54,20 @@ GameState.prototype.update = function(inputs) {
     // inputs is an array of the characters from all the players (even dead? yeah)
     // move the paddles
     for(var i=0;i<this.paddles.length;i++) {
-       paddles[i].move(inputs[paddles[i].id]); //hacky and bad, requires the inputs be
+       this.paddles[i].move(inputs[this.paddles[i].id]); //hacky and bad, requires the inputs be
     }
     //move the balls
-    for(var ball in this.balls) {
+    for(var ball of this.balls) {
        ball.coord.x += ball.dx;
        ball.coord.y += ball.dy;
     }
     //
-    this.field = field.genEndpoints(this.numPlayers, this.dead);
-    var endpoints = this.field;
+    var endpoints = field.genEndpoints(this.numPlayers, this.dead);
     var borders = field.endpointNegatives(endpoints);
     var deadzones = endpoints.filter(ep => ep.isDead);
     var walls = borders.concat(deadzones);    
     // check for collisions
-    for(var ball in this.balls) {
+    for(var ball of this.balls) {
        // (check the fixt edges first, then the paddles I guess
        var collided = false;
        for(var i=0; (i<walls.length) && !collided; i++) {
@@ -92,7 +90,7 @@ GameState.prototype.update = function(inputs) {
            }  
        }
        var livingzones = endpoints.filter(ep => !ep.isDead);
-       for(var lz in livingzones) {
+       for(var lz of livingzones) {
            // get corresponding paddle
            // should be guaranteed to find one.... so...
            var paddle = this.paddles.find(p => p.id ==lz.id);
@@ -129,11 +127,11 @@ GameState.prototype.update = function(inputs) {
     // OK I'M HERE AFAICT
     // i don't need to check where any of the paddles are, I just need to check the spaces behind the paddles (±)
     var zero = new Coord(0,0);
-    var oobs = this.balls.filter(b => (b.dist2(zero)>(c.BOARD_RADIUS+c.OOB_THRESH)));
+    var oobs = this.balls.filter(b => (b.coord.dist2(zero)>(c.BOARD_RADIUS+c.OOB_THRESH)));
     var angs = field.angles(this.numPlayers, this.dead, c.ANGLE_THRESH);
-    for(var oob in oobs) {
+    for(var oob of oobs) {
        var oobth = oob.get_angle();
-       for(var ang in angs) {
+       for(var ang of angs) {
            // normalise angle pair...
            // this gon be inefficient sigh
            var a1 = ang.f;
@@ -162,7 +160,12 @@ GameState.prototype.update = function(inputs) {
 
 GameState.prototype.getState = function() {
     // returns a string suitable to be broadcast to all the players
-    return this.inputs.join("");
+    // only need the dead, balls, and paddles, everything else can be determined
+    // dead don't need changing, all info is necessary
+    var newballs = this.balls.map(b => b.reduce());
+    var newpads = this.paddles.map(p => p.reduce());
+    var theobject = {dead: this.dead, paddles: newpads, balls: newballs};
+    return theobject;
 }
 
 module.exports = GameState;
index b8d7f6bae9e0d9b0d4532ad015691c9a4288d90e..1d895e91207f63f883f7803d4e24de97d3777132 100644 (file)
@@ -11,7 +11,7 @@ var Paddle = function(id) {
     this.direction = 'x';
 }
 
-Paddle.prototype.move(direction) {
+Paddle.prototype.move = function(direction) {
     // direction is either 'u', 'd', or 'x', passed along from the inputs gathered elsewhere
     if((direction=='u') && (this.position < 1)) {
        this.position += c.DPADDLE;
@@ -33,7 +33,7 @@ function dist(p1,p2) {
     
 }
 
-Paddle.prototype.getEndpoints(enclosing) {
+Paddle.prototype.getEndpoints = function(enclosing) {
     // returns an endpoints object for the paddle
     // given the desired width of said paddle and the enclosing endpoints
     var encl_len = dist(enclosing.f, enclosing.s);
@@ -48,3 +48,12 @@ Paddle.prototype.getEndpoints(enclosing) {
     var second = new Coord(vector[0]*d, vector[1]*d);
     return new Endpoints(first, second, this.id);
 }
+
+Paddle.prototype.reduce = function() {
+    var theid = this.id;
+    var thepos = this.position;
+    return {id:theid, pos:thepos};
+}
+
+
+module.exports = Paddle;