Skip to content

Instantly share code, notes, and snippets.

@lychees
Created January 12, 2018 13:29
Show Gist options
  • Save lychees/7a8917272b2944436f3100596ab5efe7 to your computer and use it in GitHub Desktop.
Save lychees/7a8917272b2944436f3100596ab5efe7 to your computer and use it in GitHub Desktop.
GuessGame2.sol
pragma solidity ^0.4.19;
contract GuessGame2 {
mapping(address => uint) ans;
mapping(address => address) opp;
mapping(address => uint) bal;
address unmatched_player;
/**
* Constructs funcion.
*/
function GuessGame2() internal{
}
/**
* Join a new game.
*/
event NewRoom(address p, uint z); // Player p create with a new room with answer z.
event JoinRoom(address p1, address p2, uint z); // Player p1 join player p2's room with answer z.
function join(uint z) payable public{
require(opp[msg.sender] == 0);
require(msg.value > 10);
ans[msg.sender] = z;
bal[msg.sender] = msg.value;
if (unmatched_player != 0) {
opp[msg.sender] = unmatched_player;
opp[unmatched_player] = msg.sender;
JoinRoom(msg.sender, unmatched_player, z);
unmatched_player = 0;
} else {
unmatched_player = msg.sender;
NewRoom(msg.sender, z);
}
}
/**
* Make a guess.
*/
event Guess(address p, uint s); // Player p make a guess s.
event WrongAnswer(address p, int z); // Player p get a WrongAnswer with hint z.
event Accepted(address p, uint z); // Player p get Accepted and won z as reward.
function guess(uint s) public payable returns (int z){
require(msg.value >= 10);
require(opp[msg.sender] != 0);
Guess(msg.sender, s);
uint t = ans[opp[msg.sender]];
if (s < t) {
WrongAnswer(msg.sender, -1);
return -1;
} else if (s > t) {
WrongAnswer(msg.sender, 1);
return 1;
} else {
t = bal[msg.sender] + bal[opp[msg.sender]];
bal[msg.sender] = 0;
bal[opp[msg.sender]] = 0;
opp[opp[msg.sender]] = 0;
opp[msg.sender] = 0;
msg.sender.transfer(t);
Accepted(msg.sender, t);
return 0;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment