【solidity学习】僵尸之谜一

我们开始做一个NFT游戏”僵尸之谜“,类似于迷恋猫。话不多说,现在开始。

需求分析。

 知道需求后,首先使用solidity在线工具Remix - Ethereum IDE

新建一个项目,名为”zombieDemo“,引入两个工具类文件,分别是Owner.sol和safemath.sol

工具地址

然后创建文件:zombieFactory.sol

开始编写我们的需求。

 

pragma solidity ^0.5.12;//声明使用的版本
//导入应用的文件
import "./Ownable.sol";
import "./safemath.sol";

//定义合约,并且继承Ownable
contract ZombieFactory is Ownable {

    using SafeMath for uint256;

    uint dnaDigits = 16;//基因位数16
    uint dnaModules = 16 ** dnaDigits;//基因16位单位
    uint public coolDownTime = 1 days;//冷却时间
    uint public zombiePrice = 0.01 ether;//僵尸价格
    uint public zombieCountt = 0;//初始僵尸数量

    //结构体
    struct Zombie {

        string name;
        uint zombieDna;
        uint16 level;
        uint16 reodyTime;
        uint32 winCount;
        uint32 LossCount;

    }

    //僵尸数组
    Zombie[] public zombies;

    //映射
    mapping (uint => address) public zombieToOnwer;
    mapping (address => uint) onwerZombieCount;
    mapping (uint => uint) public zombieFeedTimes;

    //事件
    event newZombie(string name,uint zombieDna,uint id);

    //创建僵尸
    function createZombie(string memory _name) public {
        //验证发送者初始僵尸数量为0,才能获得第一个免费僵尸
        require(onwerZombieCount[msg.sender] == 0);
        
        uint randDna = uint(uint(keccak256(abi.encodePacked(_name))) % dnaModules);

        randDna = randDna - randDna % 10;

        uint id = zombies.push(Zombie(_name,randDna,1,0,0,0)) - 1;

        zombieToOnwer[id] = msg.sender;
        onwerZombieCount[msg.sender] = onwerZombieCount[msg.sender].add(1);
        zombieFeedTimes[id] = 0;
        zombieCountt = zombieCountt.add(1);
        emit newZombie(_name,randDna,id);
        
    }

    
}

然后部署。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值