Skip to content

Instantly share code, notes, and snippets.

@vis-kid
Created March 19, 2022 16:06
Show Gist options
  • Save vis-kid/4b442a48c57957667ba463c500fec9b4 to your computer and use it in GitHub Desktop.
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=
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