Bingo client.
This commit is contained in:
		
						commit
						a2e22aba27
					
				|  | @ -0,0 +1,9 @@ | |||
| *.pyc | ||||
| *.pyo | ||||
| *# | ||||
| .#* | ||||
| .DS_Store | ||||
| *~ | ||||
| npm-debug.log | ||||
| node_modules/* | ||||
| app/* | ||||
|  | @ -0,0 +1,62 @@ | |||
| #!/usr/bin/coffee | ||||
| 
 | ||||
| io = require 'socket.io-client' | ||||
| util = require 'util' | ||||
| socket = io.connect 'ws://yahoobingo.herokuapp.com' | ||||
| _ = require 'underscore' | ||||
| 
 | ||||
| bingo = ['B', 'I', 'N', 'G', 'O'] | ||||
| state = 'lost' | ||||
| 
 | ||||
| fnum = (n) -> if n < 10 then " #{n}" else "#{n}" | ||||
| 
 | ||||
| socket.on 'connect', -> | ||||
| 
 | ||||
|     card = {} | ||||
| 
 | ||||
|     socket.on 'card', (data) -> | ||||
|         for i in bingo | ||||
|             card[i] = ({num: j, found: false} for j in data.slots[i]) | ||||
| 
 | ||||
|     socket.on 'number', (ball) -> | ||||
|         m = ball.match /([BINGO])(\d+)/ | ||||
|         card[m[1]] = for j in card[m[1]] | ||||
|             if j.found or j.n != +m[2] then j else {n: j.n, found: true} | ||||
| 
 | ||||
|         may = (m, cond) -> if cond.found then m+1 else m | ||||
| 
 | ||||
|         f = (-> | ||||
|             for i in bingo | ||||
|                 if 5 == _.reduce card[m[1]], ((m, i) -> may m, i), 0 | ||||
|                     return true | ||||
| 
 | ||||
|             for i in [0..4] | ||||
|                 if 5 == _.reduce bingo, ((m, j) -> may m, card[j][i]), 0 | ||||
|                     return true | ||||
| 
 | ||||
|             if 5 == _.reduce [0..4], ((m, j) -> may m, card[bingo[j]][j]), 0 | ||||
|                 return true | ||||
| 
 | ||||
|             if 5 == _.reduce [0..4], ((m, j) -> may m, card[bingo[j]][4 - j]), 0 | ||||
|                 return true | ||||
| 
 | ||||
|             false)() | ||||
| 
 | ||||
|         console.log "BALL: #{ball}" | ||||
|         for i in bingo | ||||
|             console.log((if j.found then '[#{fnum(j.n)}]' else ' #{fnum(j.n)} ' for j in card[i]).join(' ')) | ||||
|         if f | ||||
|             console.log "Looks like you won." | ||||
|             socket.emit 'bingo' | ||||
| 
 | ||||
|     socket.on 'win', -> state = 'won' | ||||
|     socket.on 'lose', -> state = 'lost' | ||||
| 
 | ||||
|     socket.on 'disconnect', -> | ||||
|         console.log "You appear to have #{state}" | ||||
|         process.exit() | ||||
| 
 | ||||
|     socket.emit 'register', | ||||
|         name: 'Ken Sternberg' | ||||
|         email: 'sternberg@mailinator.com' | ||||
|         url: '' | ||||
		Loading…
	
		Reference in New Issue