создать комнату в солидности - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь создать комнату в солидности для нашей игры.Это игра, в которой только 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;
  }
}

Любая помощь будет принята. Спасибо заранее.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы можете попробовать код ниже и дайте мне знать, если что-то пойдет не так!

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!!");
        }
    }
}
...