pragma robustness ^0.4.24; contract RockPaperScissors { // characterize constants address public alice; address public sway; uint public minBet = 1 ether; uint public maxBet = 2 ether; // characterize factors uint public bet; uint public victor; bytes32 public moveA; bytes32 public moveB; // constructor constructor(address _alice, address _bob) public { require(_alice != address(0)); require(_bob != address(0)); alice = _alice; sway = _bob; } // acknowledge bet from Alice work makeBet() public payable { require(msg.value == minBet); require(winner == 0); require(bet == 0); wager = msg.value; } // Alice takes her action work makeMoveA(bytes32 _moveA) public { require(msg.sender == alice); require(winner == 0); require(moveA == bytes32(0)); require(_moveA == bytes32("rock") || _moveA == bytes32("paper") || _moveA == bytes32("scissors")); moveA = _moveA; } // Sway takes his action work makeMoveB(bytes32 _moveB) public { require(msg.sender == sway); require(winner == 0); require(moveB == bytes32(0)); require(_moveB == bytes32("rock") || _moveB == bytes32("paper") || _moveB == bytes32("scissors")); moveB = _moveB; } // work out champ work calculateWinner() public { require(moveA != bytes32(0)); require(moveB != bytes32(0)); require(winner == 0); in the event that (moveA == moveB) { emanate GameTied(alice, bounce, moveA, moveB); alice.transfer(bet); bob.transfer(bet); } else if (moveA == bytes32("rock") && moveB == bytes32("scissors")) { emanate AliceWon(alice, bounce, moveA, moveB); champ = 1; alice.transfer(maxBet); } else if (moveA == bytes32("rock") && moveB == bytes32("paper")) { emanate BobWon(bob, alice, moveA, moveB); champ = 2; bob.transfer(maxBet); } else if (moveA == bytes32("paper") && moveB == bytes32("rock")) { emanate AliceWon(alice, bounce, moveA, moveB); champ = 1; alice.transfer(maxBet); } else if (moveA == bytes32("paper") && moveB == bytes32("scissors")) { emanate BobWon(bob, alice, moveA, moveB); champ = 2; bob.transfer(maxBet); } else if (moveA == bytes32("scissors") && moveB == bytes32("rock")) { emanate BobWon(bob, alice, moveA, moveB); champ = 2; bob.transfer(maxBet); } else if (moveA == bytes32("scissors") && moveB == bytes32("paper")) { emanate AliceWon(alice, bounce, moveA, moveB); champ = 1; alice.transfer(maxBet); } } // occasions occasion GameTied(address listed _winner, address recorded _loser, bytes32 _moveA, bytes32 _moveB); occasion AliceWon(address listed _winner, address recorded _loser, bytes32 _moveA, bytes32 _moveB); occasion BobWon(address listed _winner, address recorded _loser, bytes32 _moveA, bytes32 _moveB); }
0.4.18