Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.0;
- contract Dice {
- uint constant _game_barier = 500;
- uint constant _game_max = 1000;
- uint constant _game_min = 0;
- uint constant _multiplier = 2;
- address private _owner;
- struct Player {
- address addr;
- string nickname;
- uint bet_number;
- uint deposit;
- bool isVal;
- }
- mapping(address => Player) public _players;
- address[] _players_list;
- modifier onlyOwner {
- require(_owner == msg.sender);
- _;
- }
- modifier onlyNewPlayer {
- require(_players[msg.sender].isVal == false);
- _;
- }
- function Dice() public {
- // starts new game!
- _owner = msg.sender;
- }
- // payable
- function joinGame(string player_nickname, uint bet_num) public payable onlyNewPlayer {
- _players[msg.sender] = Player({addr: msg.sender, deposit: msg.value, bet_number: bet_num, nickname: player_nickname, isVal: true});
- _players_list.push(msg.sender);
- _owner.transfer(msg.value);
- }
- // external as it consume too many gas
- // warn: Gas requirement of function Dice._players(address) high: infinite. If the gas requirement of a function is higher than the block gas limit, it cannot be executed. Please avoid loops in your functions or actions that modify large areas of storage (this includes clearing or copying arrays in storage)
- function finishGame() external payable onlyOwner {
- uint random_number = uint(block.blockhash(block.number-1))%1000;
- address pl_addr;
- for(uint i = 0; i < _players_list.length; i++) {
- if (random_number < 500) {
- pl_addr = _players_list[i];
- pl_addr.transfer( _players[pl_addr].deposit * _multiplier);
- }
- delete _players[pl_addr];
- }
- delete _players_list;
- }
- }
- v
Add Comment
Please, Sign In to add comment