|
from flows.base_flows import Flow |
|
from typing import Dict |
|
|
|
from .RockPaperScissorsPlayer import RockPaperScissorsPlayer |
|
|
|
|
|
class RockPaperScissorsJudge(Flow): |
|
|
|
def __init__(self, **kwargs): |
|
super(RockPaperScissorsJudge, self).__init__(**kwargs) |
|
|
|
self.flow_state["A"] = RockPaperScissorsPlayer(name="Player A", description="RockPaperScissorsPlayer") |
|
self.flow_state["B"] = RockPaperScissorsPlayer(name="Player B", description="RockPaperScissorsPlayer") |
|
self.flow_state["A_score"] = 0 |
|
self.flow_state["B_score"] = 0 |
|
self.flow_state["n_party_played"] = 0 |
|
|
|
def run(self, input_data, expected_outputs) -> Dict: |
|
flow_a = self.flow_state["A"] |
|
flow_b = self.flow_state["B"] |
|
|
|
for _ in range(3): |
|
A_task = self.package_task_message(flow_a, "run", {}, expected_outputs=["choice"]) |
|
B_task = self.package_task_message(flow_b, "run", {}, expected_outputs=["choice"]) |
|
|
|
A_output = flow_a(A_task) |
|
self._log_message(A_output) |
|
B_output = flow_b(B_task) |
|
self._log_message(B_output) |
|
|
|
A_choice = A_output.data["choice"] |
|
B_choice = B_output.data["choice"] |
|
|
|
self._update_state({"n_party_played": self.flow_state["n_party_played"] + 1}) |
|
|
|
if A_choice == B_choice: |
|
|
|
pass |
|
elif (A_choice == "rock" and B_choice == "scissors" |
|
or A_choice == "paper" and B_choice == "rock" |
|
or A_choice == "scissors" and B_choice == "paper"): |
|
self._update_state({"A_score": self.flow_state["A_score"] + 1}) |
|
else: |
|
self._update_state({"B_score": self.flow_state["B_score"] + 1}) |
|
|
|
return self._get_keys_from_state(expected_outputs, allow_class_namespace=False) |
|
|