Skip to content

Instantly share code, notes, and snippets.

@ripter
Created July 20, 2018 00:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ripter/168080c2fbf6b3a742ecc82330b7622d to your computer and use it in GitHub Desktop.
Save ripter/168080c2fbf6b3a742ecc82330b7622d to your computer and use it in GitHub Desktop.
pragma solidity ^0.4.0;
contract BOSGame {
struct Vote {
uint choice;
uint amount;
address owner;
}
mapping(address => Vote) playerVote;
mapping(address => bool) didPlayerVote;
address[2] players;
function castVote(uint _vote)
public
payable
canVote
{
// Save the player's vote
didPlayerVote[msg.sender] = true;
playerVote[msg.sender] = Vote(_vote, msg.value, msg.sender);
// We need two players, so put this player in the open slot.
// no .push for a fixed length array
if (players[0] == address(0)) {
players[0] = msg.sender;
} else {
players[1] = msg.sender;
}
}
function didIWin()
public
view
mustBeAVoter
needAllVotes
returns(bool)
{
if (playerVote[players[0]].choice == playerVote[players[1]].choice) {
return true;
}
return false;
}
function getVoteChoice()
public
view
mustBeAVoter
returns (uint)
{
return playerVote[msg.sender].choice;
}
function getVoteAmount()
public
view
mustBeAVoter
returns (uint)
{
return playerVote[msg.sender].amount;
}
function getTotalBalance()
public
view
returns (uint)
{
return address(this).balance;
}
modifier mustBeAVoter() {
require(didPlayerVote[msg.sender], "You did not vote.");
_;
}
modifier needAllVotes() {
require(players[0] != 0 && players[1] != 0, "Waiting for votes.");
_;
}
modifier canVote() {
require(msg.value > 0, "Vote needs a value to be cast.");
require(players[0] == 0 || players[1] == 0, "Votes are in.");
require(didPlayerVote[msg.sender] == false, "You already voted.");
_;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment