From ac6ad5403cae8509c8450646d850cee7092f81f9 Mon Sep 17 00:00:00 2001 From: Frederic Date: Wed, 12 Feb 2020 23:37:44 +0100 Subject: [PATCH 1/5] remove --players argument --- games/balancep0ng.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/games/balancep0ng.py b/games/balancep0ng.py index 0fafa9f..d9d0701 100755 --- a/games/balancep0ng.py +++ b/games/balancep0ng.py @@ -116,7 +116,7 @@ class BalanceBoardPlayer(object): class B4lancePong(object): - def __init__(self, out, balanceserver=None, color=True, numplayers=None): + def __init__(self, out, balanceserver=None, color=True): self.__playground = None self.__out = out self.__color = color @@ -124,7 +124,6 @@ class B4lancePong(object): self.__balanceserver = ('localhost', 4711) else: self.__balanceserver = balanceserver - self.__numplayers = numplayers if color: self.__dimension = blup.frame.FrameDimension(22, 16, 256, 3) @@ -150,19 +149,16 @@ class B4lancePong(object): self.__players = [] self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.leftPaddle, balance_util_p1)) - if self.__numplayers == 2: - self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.rightPaddle, balance_util_p2)) - elif self.__numplayers is None: - for i in range(5): - frame = mk_logo_frame(self.__dimension, onePlayer) - self.__out.sendFrame(frame) + for i in range(5): + frame = mk_logo_frame(self.__dimension, onePlayer) + self.__out.sendFrame(frame) - print('waiting for second player...') - if balance_util_p2.get_player_ready(): - self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.rightPaddle, - balance_util_p2)) - break - time.sleep(1) + print('waiting for second player...') + if balance_util_p2.get_player_ready(): + self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.rightPaddle, + balance_util_p2)) + break + time.sleep(1) frame = mk_logo_frame(self.__dimension, logo) self.__out.sendFrame(frame) @@ -204,8 +200,6 @@ class B4lancePong(object): if __name__ == '__main__': parser = argparse.ArgumentParser(description='Blinkenbunt Pong!') - parser.add_argument('--players', dest='players', type=int, - help='number of players (autodetect if unspecified)') parser.add_argument('--balance', dest='balance', type=str, metavar='HOST:PORT', help='use balance input') parser.add_argument('--out', dest='out', type=str, metavar='OUTPUT', @@ -215,7 +209,6 @@ if __name__ == '__main__': out = blup.output.getOutput(args.out) bhost, bport = args.balance.split(':') - p0ng = B4lancePong(out, balanceserver=(bhost, int(bport)), color=True, - numplayers=args.players) + p0ng = B4lancePong(out, balanceserver=(bhost, int(bport)), color=True) p0ng.runGame() From d777e5ec97708436ba90db5f19d45f32940b1fa3 Mon Sep 17 00:00:00 2001 From: Frederic Date: Wed, 12 Feb 2020 23:54:52 +0100 Subject: [PATCH 2/5] allow first player on both boards --- games/balancep0ng.py | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/games/balancep0ng.py b/games/balancep0ng.py index d9d0701..67ecd41 100755 --- a/games/balancep0ng.py +++ b/games/balancep0ng.py @@ -141,25 +141,36 @@ class B4lancePong(object): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(self.__balanceserver) print('connected!') - balance_util_p1 = blup.balance_util.BalanceUtil(sock, 0) - balance_util_p2 = blup.balance_util.BalanceUtil(sock, 1) - while not balance_util_p1.get_player_ready(): - time.sleep(0.1) + bplayers = [ + blup.balance_util.BalanceUtil(sock, 0), + blup.balance_util.BalanceUtil(sock, 1) + ] - self.__players = [] - self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.leftPaddle, balance_util_p1)) + while not (bplayers[0].get_player_ready() or + bplayers[1].get_player_ready()): + time.sleep(0.1) for i in range(5): frame = mk_logo_frame(self.__dimension, onePlayer) self.__out.sendFrame(frame) print('waiting for second player...') - if balance_util_p2.get_player_ready(): - self.__players.append(BalanceBoardPlayer(self.__playground, self.__playground.rightPaddle, - balance_util_p2)) + if (bplayers[0].get_player_ready() and + bplayers[1].get_player_ready()): break time.sleep(1) + self.__players = [] + for i in [0, 1]: + paddle = self.__playground.leftPaddle if i == 0 else \ + self.__playground.rightPaddle + if bplayers[i].get_player_ready(): + player = BalanceBoardPlayer(self.__playground, paddle, + bplayers[i]) + else: + player = pong.PongBot(self.__playground, paddle, 3) + self.__players.append(player) + frame = mk_logo_frame(self.__dimension, logo) self.__out.sendFrame(frame) time.sleep(2) @@ -173,10 +184,6 @@ class B4lancePong(object): self.__out.sendFrame(frame) time.sleep(1) - if len(self.__players) == 1: - bot = pong.PongBot(self.__playground, self.__playground.rightPaddle, 3) - self.__players.append(bot) - while max(scoreLeft, scoreRight) < __MAX_SCORE__: winner = self.__playground.play() if winner is self.__players[0].ownPaddle: From f1bb7a0396443253caa798cafdd3d7ecddc8ed1d Mon Sep 17 00:00:00 2001 From: Frederic Date: Thu, 13 Feb 2020 21:45:15 +0100 Subject: [PATCH 3/5] fix crash when left player is bot --- games/balancep0ng.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/games/balancep0ng.py b/games/balancep0ng.py index 67ecd41..b761829 100755 --- a/games/balancep0ng.py +++ b/games/balancep0ng.py @@ -186,7 +186,7 @@ class B4lancePong(object): while max(scoreLeft, scoreRight) < __MAX_SCORE__: winner = self.__playground.play() - if winner is self.__players[0].ownPaddle: + if winner is self.__playground.leftPaddle: scoreLeft += 1 else: scoreRight += 1 From bbf4051db152788035a124210014f53ed7e0cd47 Mon Sep 17 00:00:00 2001 From: Frederic Date: Thu, 13 Feb 2020 22:33:38 +0100 Subject: [PATCH 4/5] add function to cancel game --- games/pong.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/games/pong.py b/games/pong.py index d8c1149..80398d2 100755 --- a/games/pong.py +++ b/games/pong.py @@ -183,6 +183,8 @@ class Playground(object): paddleRight = Paddle(self, width - 1, (height - paddlesize)//2, paddlesize) self.__paddles = [paddleLeft, paddleRight] + self.cancelled = False + self.__ball = Ball(self, 0, 0, 1, 1) self.__gameTickCallbacks = [] self.__newRoundCallbacks = [] @@ -227,6 +229,9 @@ class Playground(object): if paddle.containsPoint(x, y): return paddle + def cancel(self): + self.cancelled = True + def play(self, serve=None): leftPaddle = self.__paddles[0] rightPaddle = self.__paddles[1] @@ -250,7 +255,7 @@ class Playground(object): callback() ticks = 0 - while True: + while not self.cancelled: ticks += 1 time.sleep(0.08) if ticks %2 == 0: From 7f754c032b06672b69ad6c2775ecd42a5bc8bb42 Mon Sep 17 00:00:00 2001 From: Frederic Date: Thu, 13 Feb 2020 22:34:17 +0100 Subject: [PATCH 5/5] cancel game when second player joins --- games/balancep0ng.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/games/balancep0ng.py b/games/balancep0ng.py index b761829..91d3e93 100755 --- a/games/balancep0ng.py +++ b/games/balancep0ng.py @@ -130,6 +130,15 @@ class B4lancePong(object): else: self.__dimension = blup.frame.FrameDimension(18, 8, 2, 1) + def gametickcb(self): + for i, p in enumerate(self.__players): + if isinstance(p, pong.PongBot): + print('bot in game') + if (isinstance(p, pong.PongBot) and \ + self.__bplayers[i].get_player_ready()): + print('second player joined, cancelling current game') + self.__playground.cancel() + def runGame(self): print('starting a game...') scoreLeft = 0 @@ -141,13 +150,13 @@ class B4lancePong(object): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(self.__balanceserver) print('connected!') - bplayers = [ + self.__bplayers = [ blup.balance_util.BalanceUtil(sock, 0), blup.balance_util.BalanceUtil(sock, 1) ] - while not (bplayers[0].get_player_ready() or - bplayers[1].get_player_ready()): + while not (self.__bplayers[0].get_player_ready() or + self.__bplayers[1].get_player_ready()): time.sleep(0.1) for i in range(5): @@ -155,8 +164,8 @@ class B4lancePong(object): self.__out.sendFrame(frame) print('waiting for second player...') - if (bplayers[0].get_player_ready() and - bplayers[1].get_player_ready()): + if (self.__bplayers[0].get_player_ready() and + self.__bplayers[1].get_player_ready()): break time.sleep(1) @@ -164,9 +173,9 @@ class B4lancePong(object): for i in [0, 1]: paddle = self.__playground.leftPaddle if i == 0 else \ self.__playground.rightPaddle - if bplayers[i].get_player_ready(): + if self.__bplayers[i].get_player_ready(): player = BalanceBoardPlayer(self.__playground, paddle, - bplayers[i]) + self.__bplayers[i]) else: player = pong.PongBot(self.__playground, paddle, 3) self.__players.append(player) @@ -184,7 +193,10 @@ class B4lancePong(object): self.__out.sendFrame(frame) time.sleep(1) - while max(scoreLeft, scoreRight) < __MAX_SCORE__: + self.__playground.addGameTickCallback(self.gametickcb) + + while (max(scoreLeft, scoreRight) < __MAX_SCORE__ and + not self.__playground.cancelled): winner = self.__playground.play() if winner is self.__playground.leftPaddle: scoreLeft += 1 @@ -192,13 +204,14 @@ class B4lancePong(object): scoreRight += 1 pong.displayScore(self.__out, self.__dimension, scoreLeft, scoreRight, 3000) - for i in range(3): + if not self.__playground.cancelled: + for i in range(3): + frame = blup.frame.Frame(self.__dimension) + self.__out.sendFrame(frame) + time.sleep(0.5) + pong.displayScore(self.__out, self.__dimension, scoreLeft, scoreRight, 500) frame = blup.frame.Frame(self.__dimension) self.__out.sendFrame(frame) - time.sleep(0.5) - pong.displayScore(self.__out, self.__dimension, scoreLeft, scoreRight, 500) - frame = blup.frame.Frame(self.__dimension) - self.__out.sendFrame(frame) self.__playground = None self.__players = []