【问题标题】:create a room in solidity坚固地创造一个房间
【发布时间】:2019-02-02 06:02:19
【问题描述】:

我正在尝试为我们的游戏创建一个稳固的空间。这是一个只有3人被限制在一个数组中的游戏,如果超过3人进入游戏,那么我们需要创建另一个房间。我在一个网站上找到了这段代码,但是当我尝试将它与我的代码合并时它对我不起作用。

pragma solidity ^0.4.18;

contract StructArrayInit {

  event OnCreateRoom(address indexed _from, uint256 _value);

  struct Room {
    address[] players;       
    uint256 whosTurnId;
    uint256 roomState;
  }  

  Room[] public rooms;

  function createRoom() public {
      Room memory room = Room(new address[](0), 0, 0);
      rooms.push(room);
      rooms[rooms.length-1].players.push(msg.sender);

      OnCreateRoom(msg.sender, 0);
  }
  function getRoomPlayers(uint i) public view returns (address[]){
      return rooms[i].players;
  }
}

任何帮助将不胜感激。在此先感谢。

【问题讨论】:

    标签: blockchain solidity


    【解决方案1】:

    你可以试试下面的代码,如果有问题请告诉我!

    pragma solidity ^0.5.2;
    
    contract PlayerChannel {
    
        struct Player
        { 
            uint PlayerId;
            address payable userAddr; 
        }
        struct Channel
        {
            uint[] playerCount;
            uint ChannelList; 
            mapping(uint => Player) playerStructs;
            Player player;
        }
    
        mapping(uint => Channel) channelStructs;
        uint[] allChannels;
    
        //Create New Game Channel
        function newChannel(uint chanelnumber) public returns(bool success)
        {
            //To check Channel is created or not!
            for(uint i =1; i <=chanelnumber; i++){
                require(channelStructs[chanelnumber].ChannelList != i );
            }
            channelStructs[chanelnumber].ChannelList = chanelnumber;
            allChannels.push(chanelnumber);
            return true;
        }
    
        //Get Channel Details
        function getChannel(uint chanelnumber) public view returns(uint playerCounts)
        {
            //To check Channel is created or not!
            uint channelNum = channelStructs[chanelnumber].ChannelList;
            if(channelNum != 0){
                return(channelStructs[chanelnumber].playerCount.length);
            }
            else{
                revert("Channel is not created!!");
            }
        }
    
        //To Add player in Channel
        function addPlayer(uint chanelnumber,uint playerId) public returns(bool message)
        {
            //To check Channel is created or not!
            uint channelNum = channelStructs[chanelnumber].ChannelList;
            if(channelNum != 0){
                uint playerCounter = channelStructs[chanelnumber].playerCount.length;
                if(playerCounter < 3){
                    channelStructs[chanelnumber].playerCount.push(playerId);
                    channelStructs[chanelnumber].playerStructs[playerId].userAddr = msg.sender;
                    channelStructs[chanelnumber].playerStructs[playerId].PlayerId = playerId;
                    return true;
                }
                else{
                    revert("Enter in new Channel, its full!!");
                }
            }
            else{
                revert("Channel is not created!!");
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 2010-10-06
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      相关资源
      最近更新 更多