我正在为电报组创建一个战斗游戏作为我的初学者的项目,一个玩家挑战另一个,然后在聊天中发生战斗。现在我想为它实现一个“超时”功能。 我已经设法使用_thread使其工作:
import _thread
class Battle:
def __init__(self, chat_id):
self.chat = chat
print('Instance of battle started on chat %s' % self.chat)
self.pcount = 0
self.p1score = 0
self.p2score = 0
def reset(self):
self.pcount = 0
self.p1score = 0
self.p2score = 0
def timeout(chat_id):
time.sleep(90)
battle = battledic[chat_id]
if battledic[chat_id].timer == 1:
sendmessage(chat_id, 'no one accepted') # first parameter is the chat address and the second one is the message
battle.reset()
else:
return
battle = Battle(chat_id)
if message == "challenge":
if battle.pcount == 0:
_thread.start_new_thread(timeout, (chat_id,))
...
所以基本上我正在做的是调用超时功能,即在不同的线程中睡眠90秒,然后它检查战斗是否仍然只有一个玩家(pcount == 1),如果它在这种情况下,它会向聊天发送一条消息,告诉他们战斗没有开始,然后重置战斗实例。
这里的问题是我经常提出异常,即使它在大多数情况下都能正常运行,有时它也没有达到预期的效果,关闭正在进行的战斗。研究我发现这不是理想的做法,但我找不到更好的解决方案,也许我想从其他聊天中同时进行其他战斗。在这种情况下应该使用什么?合作多任务?多?斩首模块?感谢有关此任务的任何提示!
答案 0 :(得分:1)
我让你开始了。我不确定你将如何聊天或记录谁在玩。
我的第一个想法是运行线程,但while循环更容易。
<script>
var socket = io();
var selfId;
socket.on('playerinfo', function(data){
selfId = data.name;
playerInfo = data.players;
$('.top').html(playerInfo);
$('.bottom')html(selfId);
});
socket.on('move', function(data){
if(data.uid == selfId)
{
$('.top').html(data.card);
}
else
{
$('.bottom')html(data.card);
}
});
socket.emit('move', {card:A, uid:56836480193347838764});
</script>