rendered paste body#! /usr/bin/env python
import time
import pygame
import struct
import random
from pygame.locals import *
from twisted.internet.protocol import DatagramProtocol, Factory
from twisted.internet import reactor, task
class Network(DatagramProtocol):
def __init__(self, mygame):
self.mygame = mygame
def startProtocol(self):
print "Started."
self.mygame.setProtocol(self)
def datagramReceived(self, data, (host, port)):
#print "received %r from %s:%d" % (data, host, port)
self.mygame.dataRecieved(struct.unpack("hhh",data))
def mouseEvent(self, playerno,x,y):
self.transport.write(struct.pack("hhh",playerno,x,y), ('208.101.16.146', 9999))
pass
class Player(pygame.sprite.Sprite):
def __init__(self,protocol,playerno):
pygame.sprite.Sprite.__init__(self, self.containers)
self.image = pygame.Surface((32, 32))
clr=75
for i in range(32):
clr += 4
self.image.fill((clr, 0, 0), (i, 0, 1, 32))
self.rect = self.image.get_rect()
self.protocol = protocol
self.playerno = playerno
def update(self):
self.rect.center = pygame.mouse.get_pos()
self.protocol.mouseEvent(self.playerno,self.rect.x,self.rect.y)
class Other(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self, self.containers)
self.image = pygame.Surface((32, 32))
clr=75
for i in range(32):
clr += 4
self.image.fill((0, clr, 0), (i, 0, 1, 32))
self.rect = self.image.get_rect()
def setCenter(self, pos):
self.rect.center = pos
class Game:
protocol = None
def __init__(self):
pygame.init()
pygame.display.set_caption("Online Test Thingy")
self.screen = pygame.display.set_mode((640, 480), HWSURFACE|DOUBLEBUF)
self.sprites = pygame.sprite.RenderUpdates()
Player.containers = self.sprites
Other.containers = self.sprites
self.playerno = random.randrange(1,1000) # your unique player id
self.other = Other() # other player class
pygame.mouse.set_visible(0)
event_loop = task.LoopingCall(self.pygame_loop)
event_loop.start(0.01, now=True)
def dataRecieved(self, data):
if data[0] <> self.playerno:
print data
self.other.setCenter((data[1],data[2]))
self.sprites.update()
def pygame_loop(self):
if self.protocol != None:
for event in pygame.event.get():
if((event.type == KEYDOWN and event.key == K_ESCAPE) or
event.type == QUIT):
reactor.stop()
self.other.setCenter((320, 240))
self.screen.fill((0, 0, 255))
clr=55
for i in range(65):
clr += 3
self.screen.fill((0, 0, clr), (i*10, 0, 10, 480))
self.sprites.draw(self.screen)
self.sprites.update()
pygame.display.flip()
def setProtocol(self, protocol):
"""attach a protocol instance to post the events to"""
self.protocol = protocol
self.player = Player(self.protocol, self.playerno)
print "Set!"
if __name__ == "__main__":
mygame = Game()
reactor.listenUDP(0, Network(mygame))
reactor.run()