import config
import os
import uuid
import random
class Player:
def __init__(self, game, name):
self.game = game
self.name = name
self.id = str(uuid.uuid4())
self.beginturn()
players[self.id] = self
def beginturn(self):
self.word = ""
self.ready = False
self.selection = -1
def select(self, i):
if self.selection < 0 and i >= 0 and i < len(self.game.cards):
self.selection = i
self.game.playerSelect()
def nextturn(self, word):
if self.game.selected and not self.ready:
self.word = str(word).strip()
self.ready = True
self.game.playerReady()
def status(self):
friend = self.game.players[1] if self.game.players[0] == self else self.game.players[0]
friendId = friend.id if self.game.players[0] == self else None
friendSelection = friend.selection if self.game.selected else -1
cards = []
for i in range(0, len(self.game.cards)):
cards.append({ "index": i, "name": self.game.cards[i], "my": self.selection == i, "friends": friendSelection == i })
return {
"turn": self.game.turn,
"score": self.game.score,
"word": self.game.word,
"wordSource": self.game.wordSource,
"cards": cards,
"selected": self.game.selected,
"host": config.externalHost,
"prefix": config.prefix,
"cardsPrefix": config.cardsPrefix,
"waiting": (self.selection >= 0 and friendSelection < 0) or (self.ready and not friend.ready),
"win": self.game.selected and self.selection == friend.selection,
"lose": self.game.selected and self.selection != friend.selection,
"me": {
"id": self.id,
"name": self.name,
"selection": self.selection,
"selected": self.selection >= 0,
"ready": self.ready },
"friend": {
"id": friendId,
"selection": friendSelection } }
class Game:
def __init__(self):
self.players = ( Player(self, "Player1"), Player(self, "Player2") )
self.turn = 1
self.score = 0
self.cards = []
self.beginturn()
def beginturn(self):
assert(cards)
self.cards.clear()
for i in range(0, config.cardsCount):
for j in range(0, 100):
card = cards[ random.randrange(0, len(cards)) ]
if not card in self.cards:
self.cards.append(card)
break
w0 = self.players[0].word
w1 = self.players[1].word
if not w0 and not w1:
self.word = random.choice(words)
self.wordSource = "choosen by random"
elif not w1:
self.word = w0
self.wordSource = "suggested by player1"
elif not w0:
self.word = w1
self.wordSource = "suggested by player2"
elif w0 == w1:
self.word = w0
self.wordSource = "suggested by both players"
elif random.randrange(0, 1):
self.word = w0
self.wordSource = "suggested by player1 (player2 may be lucky next time)"
else:
self.word = w1
self.wordSource = "suggested by player2 (player1 may be lucky next time)"
self.players[0].beginturn()
self.players[1].beginturn()
self.selected = False
def playerSelect(self):
if not self.selected and self.players[0].selection >= 0 and self.players[1].selection >= 0:
self.selected = True
if self.players[0].selection == self.players[1].selection:
self.score = self.score + 1
def playerReady(self):
if self.selected and self.players[0].ready and self.players[1].ready:
self.turn = self.turn + 1
self.beginturn()
def mergeCards(path):
for f in os.scandir(path):
if f.is_file() and f.name.endswith(".jpg"):
cards.append(f.name)
def mergeWords(path):
global words
ws = set(words)
with open(path, "r") as f:
for word in f.readlines():
w = word.strip()
if w != "":
ws.add(w)
words.clear()
words += ws
players = {}
cards = []
words = []