Skip to content

Commit

Permalink
Set up server in preparation for multiplayer games
Browse files Browse the repository at this point in the history
  • Loading branch information
codeincontext committed Feb 8, 2011
1 parent c68cbf4 commit 73a3075
Show file tree
Hide file tree
Showing 11 changed files with 327 additions and 107 deletions.
2 changes: 1 addition & 1 deletion game.html
Expand Up @@ -12,7 +12,7 @@ <h2>Hit some balls!</h2>
<canvas id="myCanvas" width="500" height="500">
</canvas>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="js/jquery-1.4.2.min.js"></script>
<script src="js/cue.js"></script>
<script src="js/ball.js"></script>
<script src="js/pit.js"></script>
Expand Down
9 changes: 4 additions & 5 deletions js/comms.js
Expand Up @@ -10,17 +10,16 @@ function setup(){
});
};

function send(string){
socket.send(string);
}

function connect(){
socket = new WebSocket('ws://127.0.0.1:8080');
socket.onmessage = function(mess) {
var data = $.parseJSON(mess.data);
// var data = JSON.parse(mess.data);
console.log(data);

balls = data['balls'];
// console.log(data['balls']);
// console.log(data['balls'][0]);
// balls = data['balls'];
};

};
Expand Down
14 changes: 10 additions & 4 deletions js/game.js
Expand Up @@ -25,6 +25,10 @@ var balls = new Array();
function init(){
context = myCanvas.getContext('2d');
}
function shoot(vx, vy){
cue.vx = vx;
cue.vy = vy;
}
function tick(){
draw();
cue.move();
Expand Down Expand Up @@ -109,10 +113,12 @@ $('canvas').mouseup(function(e){
my = e.pageY - offset.top
calculateCuePull();

var dx = cue.x-mx;
var dy = cue.y-my;
cue.vx = (dx*cueSpeedMultiplier);
cue.vy = (dy*cueSpeedMultiplier);
var distX = cue.x-mx;
var distY = cue.y-my;
var vx = (distX*cueSpeedMultiplier);
var vy = (distY*cueSpeedMultiplier);
send(vx + '/' +vy);
shoot(vx, vy);
}
shooting=false;
});
Expand Down
154 changes: 154 additions & 0 deletions js/jquery-1.4.2.min.js

Large diffs are not rendered by default.

16 changes: 16 additions & 0 deletions rb/ball.rb
@@ -0,0 +1,16 @@
class Ball
attr_accessor :x, :y, :vx, :vy
def initialize(x, y)
self.x = x
self.y = y
self.vx = 0
self.vy = 0
end
def to_json(*a){
:x=>x,
:y=>y,
:vx=>vx,
:vy=>vy
}.to_json(*a)
end
end
7 changes: 7 additions & 0 deletions rb/cue.rb
@@ -0,0 +1,7 @@
class Cue
attr_accessor :x, :y
def initialize
self.x = 200
self.y = 200
end
end
60 changes: 60 additions & 0 deletions rb/game.rb
@@ -0,0 +1,60 @@
class Game
attr_accessor :cue, :players, :pits
attr_accessor :players, :balls

def self.width
500
end
def self.height
500
end

def initialize(player)
self.balls = []
self.pits = []
self.players = []
self.players << player

pits << Pit.new(75,75)
pits << Pit.new(Game::width-75, 75)
pits << Pit.new(75, Game::height-75)
pits << Pit.new(Game::width-75, Game::height-75)

self.cue = Cue.new
10.times {generate_ball}
end
def add_player(player)
raise unless players.length > 1
end

def generate_ball
ballX = 0
ballY = 0
overlap = false
begin
overlap = false
ballX = 50+rand(400)
ballY = 50+rand(400)

balls.each do |ball|
if (dist(ball.x, ball.y, ballX, ballY) < 40)
overlap = true
end
end
if (dist(cue.x, cue.y, ballX, ballY) < 40)
overlap = true
end
pits.each do |pit|
if (dist(pit.x, pit.y, ballX, ballY) < 40)
overlap = true
end
end
end while overlap==true

balls << Ball.new(ballX, ballY)
end

def other_players(player)
players.reject{|p| p==player}
end
end
7 changes: 7 additions & 0 deletions rb/pit.rb
@@ -0,0 +1,7 @@
class Pit
attr_accessor :x, :y
def initialize(x,y)
self.x = x
self.y = y
end
end
6 changes: 6 additions & 0 deletions rb/player.rb
@@ -0,0 +1,6 @@
class Player
attr_accessor :socket
def initialize(socket)
self.socket = socket
end
end
62 changes: 62 additions & 0 deletions rb/server.rb
@@ -0,0 +1,62 @@
require 'rubygems'
require 'eventmachine'
require 'em-websocket'
require 'json'

require 'pit'
require 'cue'
require 'ball'
require 'game'
require 'player'

width = 500
height = 500

def dist(x1, y1, x2, y2)
x_diff = (x1-x2) ** 2
y_diff = (y1-y2) ** 2
res = Math.sqrt( x_diff + y_diff )
res<0 ? -res : res
end

@games = []
@players = []
EventMachine.run do
EventMachine::WebSocket.start(:host => '0.0.0.0', :port => 8080) do |socket|
socket.onopen do
begin
puts 'user joined'
# player = Player.new
player = Player.new(socket)
@players << player
game = Game.new(player)
@games << game
socket.send({:balls=>game.balls}.to_json)
rescue Exception => e
puts e.inspect
puts e.backtrace
end
end
socket.onmessage do |mess|
puts "move received"
array = mess.split '/'
# puts array
player = @players.find{|p| p.socket = socket }
game = @games.find{|g| g.players.include? player }
# game.move(socket, array[0], array[1])
game.other_players(player).each do |s|
s.send mess
end
end
socket.onclose do
# puts @games.inspect
# player = @players.find{|p| p.socket = socket }
# game = @games.find{|g| g.players.include player}
# game.players.delete player
# @players.delete player
puts 'user left'
end
end

`open /Users/skattyadz/code/couronne/game.html`
end
97 changes: 0 additions & 97 deletions server.rb

This file was deleted.

0 comments on commit 73a3075

Please sign in to comment.