我们开始做一个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);
}
}
然后部署。