cleaned up debugging print stat.

master
cyrille 2013-09-22 00:26:32 +02:00
parent 2c643102cf
commit 7a5a42ccda
1 changed files with 106 additions and 43 deletions

View File

@ -1,10 +1,10 @@
# Client program "cellular" # Client program "cellular"
from socket import * from socket import *
import sys import sys, time
import time
from math import * from math import *
from random import randint from random import randint
from copy import deepcopy
# Set the socket parameters # Set the socket parameters
local_port = 5001 local_port = 5001
@ -30,8 +30,9 @@ UDPSock.bind((outgoing_if, local_port))
#UDPSock.connect((remote_host, remote_port)) #UDPSock.connect((remote_host, remote_port))
# this is our handshake, weak certification # this is our handshake, weak certification
hash = "s2l\n<8<18 " hash = "s2l\n<8<18 " # 10 bytes
# plus 2 bytes below
alpha = chr(255) alpha = chr(255)
z_buffer = chr(1) + "\n" z_buffer = chr(1) + "\n"
@ -50,27 +51,34 @@ segchannels = 4 # RGBA
# timing elements # timing elements
# timer will hold the elapsed time in seconds # timer will hold the elapsed time in seconds
timer = 0 timer = 0
sleeptime = 5000 # milliseconds sleeptime = 100 # milliseconds
frequency = 1000 / sleeptime # frames per second frequency = 1000 / sleeptime # frames per second
# function resets map to zero # function resets map to zero
def zero_wdata(): def set_wdata(r, g, b):
for x in xrange(width): for x in xrange(width):
wdata.append([0] * height) wdata.append([0] * height)
for y in xrange(height): for y in xrange(height):
# create an RGBA array at each location # create an SRGBA array at each location
wdata[x][y] = [0, 0, 0, 1] # where S is the state, and RGBA is colour
wdata[x][y] = [0, r, g, b, 1]
# function resets segment display # function resets segment display
def zero_sdata(): def set_sdata(r, g, b):
for s in xrange(segwindows): global sdata
sdata = []
for s in xrange(segwindows):
sdata.append([0] * segments) sdata.append([0] * segments)
for seg in xrange(segments): for seg in xrange(segments):
sdata[s][seg] = [0, 0, 1, 1] # create an SRGBA array at each location
# where S is the state, and RGBA is colour
sdata[s][seg] = [0, r, g, b, 1]
# convert [r,g,b,a] to chr string # convert [r,g,b,a] to chr string
def i2c(rgba): def i2c(rgba):
return chr(int(255 * rgba[0])) + chr(int(255 * rgba[1])) + chr(int(255 * rgba[2])) + chr(int(255 * rgba[3])) # ignore rgba[0] because it is the state
return chr(int(rgba[1])) + chr(int(rgba[2])) + chr(int(rgba[3])) + chr(int(rgba[4]))
# function sends wdata and sdata state to server # function sends wdata and sdata state to server
def send_update(): def send_update():
@ -82,61 +90,116 @@ def send_update():
for y in xrange(height): for y in xrange(height):
for x in xrange(width): for x in xrange(width):
data = data + i2c( wdata[x][y] ) data = data + i2c( wdata[x][y] )
#print str(wdata[x][y]) + " ",
#print "\n"
data = data + "\n" data = data + "\n"
# write segment window displays # write segment window displays
for s in xrange(segwindows): for s in xrange(segwindows):
for seg in xrange(segments): for seg in xrange(segments):
# I don't think I understand what the 3 channels are...
for sc in xrange(segchannels):
data = data + i2c( sdata[s][seg] ) data = data + i2c( sdata[s][seg] )
data = data + "\n" data = data + "\n"
print data # print data
# send the data packet to remote host # send the data packet to remote host
UDPSock.sendto(data,(remote_host,remote_port)) UDPSock.sendto(data,(remote_host,remote_port))
# clear map # initialize map
zero_wdata() set_wdata(0,0,0)
zero_sdata() set_sdata(0,0,255)
# set start seed # set start seed
# get random location # get random location
rx = randint(0, width - 1) rx = randint(0, width - 1)
ry = randint(0, height - 1) ry = randint(0, height - 1)
wdata[rx][ry] = [1,0,0,0.5] wdata[rx][ry] = [1,1,0,0,1]
print "origin(" + str(rx) + "," + str(ry) + ")"
send_update() def has_active_neighb(x, y):
# check the cell to the left
if x > 0 and wdata[x - 1][y][0] > 0:
return True
# check the cell above
if y > 0 and wdata[x][y - 1][0] > 0:
return True
# check the cell to the right
if x < (width - 1) and wdata[x + 1][y][0] > 0:
return True
# check the cell below
if y < (height - 1) and wdata[x][y + 1][0] > 0:
return True
# main logic loop
for t in range(60):
# push update to clients
send_update()
exit() # create CA buffer
data_buffer = deepcopy(wdata)
# build loop here for y in xrange(height):
time.sleep(sleeptime/1000) for x in xrange(width):
# if cell is active, increase its rating/value
if wdata[x][y][0] > 0:
# change the state of the cell
data_buffer[x][y][0] += 10
# old code below ... # assign stat to red colour
# keep to compare for now data_buffer[x][y][1] = data_buffer[x][y][0]
t = 0 # check we don't go too high
if True: if data_buffer[x][y][0] > 127:
#zero out the data buffer data_buffer[x][y][1] = 127
data = hash # assign stat to green colour
data += z_buffer data_buffer[x][y][2] = data_buffer[x][y][0] - 127
for i in range(0,width):
for j in range(0,height):
pixel = 0.5+0.5*sin(2*pi*(float(i+1)/width)+t*frequency)*sin(2*pi*(float(j+1)/height)+t*frequency)
data = data + chr(int(255*pixel)) + alpha
data = data + "\n"
for i in range(0,segwindows):
for j in range(0,segments):
for a in range(0,segchannels):
val = chr( 127 + int(128*sin(2*pi*(1+i)*(1+j)*(1+a)*t*frequency/200)))
data += val + val + val
data += "\n"
t+=1
print data if data_buffer[x][y][0] > 255:
UDPSock.sendto(data,(remote_host,remote_port)) data_buffer[x][y][2] = 127
# assign stat to blue colour
data_buffer[x][y][3] = data_buffer[x][y][0] - 255
if data_buffer[x][y][0] > 383:
data_buffer[x][y][3] = 127
set_sdata(0,0,0)
# E
sdata[0][0] = [0,255,0,0,1]
sdata[0][3] = [0,255,0,0,1]
sdata[0][4] = [0,255,0,0,1]
sdata[0][5] = [0,255,0,0,1]
sdata[0][6] = [0,255,0,0,1]
# N
sdata[1][2] = [0,255,0,0,1]
sdata[1][4] = [0,255,0,0,1]
sdata[1][5] = [0,255,0,0,1]
sdata[1][6] = [0,255,0,0,1]
# D
sdata[2][1] = [0,255,0,0,1]
sdata[2][2] = [0,255,0,0,1]
sdata[2][3] = [0,255,0,0,1]
sdata[2][4] = [0,255,0,0,1]
sdata[2][6] = [0,255,0,0,1]
send_update()
exit()
# if not active, check if adjacent cell is active
if wdata[x][y][0] == 0 and has_active_neighb(x, y):
# activate and colour
data_buffer[x][y][0] = 1
data_buffer[x][y][1] = 1
data_buffer[x][y][2] = 0
data_buffer[x][y][3] = 0
# set wdata to new buffer
wdata = data_buffer
# wait to paint process next frame
time.sleep(sleeptime/1000.0)
# close socket # close socket
UDPSock.close() UDPSock.close()