一、当咖啡馆遇见区块链记得我第一次在咖啡馆用手机玩贪吃蛇时,完全没想过有天会亲手开发区块链游戏。现在我们要做的就像给这个经典游戏装上区块链引擎——把简单的蛇吃苹果变成能在以太坊网络上交易的数字资产。1.1 为什么选择Truffle?想象你要...
记得我第一次在咖啡馆用手机玩贪吃蛇时,完全没想过有天会亲手开发区块链游戏。现在我们要做的就像给这个经典游戏装上区块链引擎——把简单的蛇吃苹果变成能在以太坊网络上交易的数字资产。
想象你要开家手工巧克力店:
先确保你的开发环境像咖啡师的工作台一样整洁:
npm install -g trufflemkdir blockchain-game && cd blockchain-gametruffle init修改truffle-config.js:
module.exports = {networks: {development: {host: "127.0.0.1",port: 8545,network_id: "};在contracts目录新建SnakeGame.sol:
pragma solidity ^0.8.0;contract SnakeGame {mapping(address => uint) public scores;uint public applePrice = 0.001 ether;function eatApple external payable {require(msg.value >= applePrice, "需要支付0.001ETH");scores[msg.sender] += 1;function getScore(address player) public view returns(uint) {return scores[player];}| 安全检查 | 现实比喻 |
| require语句 | 咖啡店的"小心地滑"警示牌 |
| mapping类型 | 顾客积分登记表 |
在test目录新建snake_game_test.js:
const SnakeGame = artifacts.require("SnakeGame");contract("SnakeGame", (accounts) => {it("应该正确记录分数", async => {const instance = await SnakeGame.deployed;await instance.eatApple({value: web3.utils.toWei('0.001', 'ether'), from: accounts});const score = await instance.getScore(accounts);assert.equal(score, 1, "分数记录错误");});});运行测试:
truffle test在src目录创建index.html:
区块链贪吃蛇
当前分数: 0

当你看到MetaMask弹出交易确认窗口,就像咖啡机冒出第一缕蒸汽——你的区块链游戏开始运转了。试着在本地网络多买几个虚拟苹果,感受下智能合约如何记录每个操作。