Created
March 19, 2022 16:06
-
-
Save vis-kid/4b442a48c57957667ba463c500fec9b4 to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.7+commit.e28d00a7.js&optimize=false&runs=200&gist=
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity >=0.7.0 <0.9.0; | |
contract DealerGame { | |
uint public playerCount; | |
uint public pot = 0; | |
address public dealer; | |
Player[] public playersInGame; | |
enum Level {Novice, Intermediate, Advanced} | |
mapping(address => Player) public players; | |
struct Player { | |
Level playerLevel; | |
string firstName; | |
string lastName; | |
address playerAddress; | |
uint createdAt; | |
} | |
constructor() { | |
dealer = msg.sender; | |
} | |
function addPlayer(string memory _firstName, string memory _lastName) private { | |
Player memory newPlayer = Player(Level.Novice, _firstName, _lastName, msg.sender, block.timestamp); | |
players[msg.sender] = newPlayer; | |
playersInGame.push(newPlayer); | |
} | |
function getPlayerLevel(address _playerAddress) private view returns (Level) { | |
Player storage player = players[_playerAddress]; | |
return player.playerLevel; | |
} | |
function setPlayerLevel(address _playerAddress) private { | |
Player storage player = players[_playerAddress]; | |
if(block.timestamp >= player.createdAt +20) { | |
player.playerLevel = Level.Intermediate; | |
} | |
} | |
function joinGame(string memory _firstName, string memory _lastName) public payable { | |
require(msg.value == 25 ether, "Joining requires 25 ether!"); | |
if(payable(dealer).send(msg.value)) { | |
addPlayer(_firstName, _lastName); | |
playerCount += 1; | |
pot += 25; | |
} | |
} | |
function payoutWiners(address _loserAddress) public payable { | |
require(msg.sender == dealer, "Not authorized!"); | |
require(msg.value == pot *(1 ether)); | |
uint payoutPerWinner = msg.value / (playerCount - 1); | |
for (uint i=0; i < playerCount; i++) { | |
address currentPlayerAddress = playersInGame[i].playerAddress; | |
if(currentPlayerAddress != _loserAddress) { | |
payable(currentPlayerAddress).transfer(payoutPerWinner); | |
} | |
pot = 0; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment