All pastes #899059 Raw Edit

Something

public text v1 · immutable
·published 2008-02-10 20:59 UTC
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()