gpt4 book ai didi

python - 将 pygames 事件数据发送到扭曲服务器?

转载 作者:行者123 更新时间:2023-12-01 05:56:19 27 4
gpt4 key购买 nike

我正在使用twisted运行一个pygames程序,并且在从pygame事件中发送数据时遇到问题。

首先是服务器:

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
import simplejson

class Game_Data(LineReceiver):
def __init__(self, players, clients):
self.players = players
self.clients = clients

## the connectionMade method of LineReceiver is being used to create ##
## protocol instances of each client so it can send back any data it gets ##

def connectionMade(self):
new_player = 'player_' + str(len(self.players) + 1)
self.clients.append(self)
self.players.append(new_player)
self.players = simplejson.dumps(self.players)
for client in self.clients:
client.sendLine(self.players)

## what ever data the server receives it sends right back to any clients ##

def lineReceived(self,line):
self.line = line
print self.line
for client in self.clients:
client.sendLine(self.line)


class BlackFactory(Factory):
def __init__(self):
self.players = []
self.clients = []

def buildProtocol(self, addr):
return Game_Data(self.players, self.clients)


reactor.listenTCP(6000, BlackFactory())

现在为客户:

import pygame
from twisted.internet.protocol import Protocol, ClientFactory
from twisted.protocols.basic import LineReceiver
from twisted.internet.task import LoopingCall
from twisted.internet import reactor

class BlackClientProtocol(LineReceiver):
def __init__(self, recv, host):
self.recv = recv
self.host = host

def lineReceived(self, line):
self.recv(line)
print line ## prints out as expected ##

def connectionMade(self):
self.host = self
print self.host ## prints out as expected ##

class BlackClient(ClientFactory):
def __init__(self, recv, host):
self.recv = recv
self.host = host

def buildProtocol(self, addr):
return BlackClientProtocol(self.recv, self.host)

class Client(object):
def __init__(self):
pygame.init()
self.screen = pygame.display.set_mode((800, 600))
pygame.display.flip()
reactor.callLater(0.1, self.tick)

def new_line(self, line):
self.line = line

## this trial_func was to see if I could pass the BlackClient another argument ##
## to return an instance of the protocol to be called later in this class ##

def trial_func(self, host):
self.host = host

def tick(self):
for event in pygame.event.get():
if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
print self.line ## prints out as expected##
print self.host ## does not print out ???##


if __name__ == '__main__':
c = Client()
lc = LoopingCall(c.tick)
lc.start(0.1)
reactor.connectTCP('192.168.1.2', 6000, BlackClient(c.new_line, c.trial))
reactor.run()

编辑:这是一个更明确的例子来说明正在发生的事情。评论是个难题。只要您安装了 pygames,它就会运行,pygame 事件是一个简单的 KEYDOWN(转义键)事件,作为客户端发送数据的触发器。

最佳答案

我查看了您的代码,这似乎是相关部分:

def tick(self):
flag = 0
for event in pygame.event.get():
...
## call an instance of the protocol and sendLine ##
BlackClient(self.new_line(allhands)) ## this line does not work ##
## send allhands data ##
...

您希望将数据发送回服务器,但在这里您只是创建一个 BlackClient 的新实例。

您可能想使用 sendLine发送该行,但您需要对当前协议(protocol)实例(或至少对此方法)的引用。

<小时/>

这是一个如何实现这一目标的示例:

class Client(object):
...
# this method is going to be replaced
def sendLine(self, line):
pass

def tick(self):
flag = 0
for event in pygame.event.get():
...
## call sendLine, which is replaced by the sendLine method from the protocol ##
self.sendLine(yourStuff)

class BlackClient(ClientFactory):
def __init__(self, client):
# keep instance of client
self.client = client

def buildProtocol(self, addr):
# give client.new_line method to protocol
proto = BlackClientProtocol(self.client.new_line)
# replace client's sendLine with proto.sendLine
self.client.sendLine = proto.sendLine
return proto

if __name__ == '__main__':
c = Client()
lc = LoopingCall(c.tick)
lc.start(0.1)
protocoll =
reactor.connectTCP('192.168.1.2', 6000, BlackClient(c))
reactor.run()

这只是一个例子;你也许可以稍微清理一下代码。也许您想使用某种调度程序(例如 pydispatch )

关于python - 将 pygames 事件数据发送到扭曲服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12469827/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com