聚焦Web3、区块链技术、NFT、加密货币与数字资产资讯门户

区块链小游戏源码开发教程|从 0 到部署一个链上猜大小游戏

2025-04-22 15:32 115
摘要

想开发区块链小游戏?本文手把手教你用Solidity编写猜大小智能合约,通过Hardhat部署至测试网,并实现React前端交互,完整掌握Web3游戏开发全流程!(附完整源码)

说到区块链开发游戏,你有没有刷到过“猜数字赢币”“链上开箱子”等小游戏?

这些不是普通网页游戏,而是运行在区块链上的智能合约小游戏,所有规则写死在代码里,透明、不可篡改,甚至可以实现链上奖池分发!

区块链小游戏源码开发教程|从 0 到部署一个链上猜大小游戏

今天,我们就手把手开发一个:

🎮 区块链小游戏:《猜大小》
玩家下注 + 猜大小,合约自动开奖 + 发奖金,玩法简洁但合约真实可用!


🎯 教程目标

我们要做的游戏逻辑是:

  • 玩家发送一定的 ETH(0.01起),并猜一个数字(大 or 小)

  • 合约生成随机值(伪随机),判断输赢

  • 如果猜对,奖金翻倍;猜错,归奖池


🛠️ 技术栈说明

模块 工具 说明
智能合约 Solidity + Hardhat 编写、测试、部署合约
前端 React + Ethers.js 连接钱包,调用合约函数
钱包支持 MetaMask 用户连接、发交易、接收奖励
测试链 Goerli / Sepolia 验证部署与互动效果

📄 一、智能合约核心源码(Solidity)

文件名:GuessGame.sol

solidity
 
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract GuessGame { address public owner; uint256 public minimumBet = 0.01 ether; event GameResult(address player, uint256 number, bool win, uint256 amount); constructor() { owner = msg.sender; } function guess(bool guessBig) public payable { require(msg.value >= minimumBet, "Insufficient bet"); uint256 random = uint256( keccak256(abi.encodePacked(block.timestamp, block.difficulty, msg.sender)) ) % 100 + 1; bool win = (guessBig && random > 50) || (!guessBig && random <= 50); if (win) { uint256 prize = msg.value * 2; require(address(this).balance >= prize, "Not enough balance"); payable(msg.sender).transfer(prize); } emit GameResult(msg.sender, random, win, msg.value); } function fund() public payable {} // 供合约充钱 function withdraw() public { require(msg.sender == owner, "Only owner"); payable(owner).transfer(address(this).balance); } receive() external payable {} }

🧪 二、本地部署与测试(Hardhat)

bash
 
npm init -y npm install --save-dev hardhat npx hardhat # 选择“创建基本项目”,然后在 contracts/ 中添加 GuessGame.sol

编辑 scripts/deploy.js

js
 
const hre = require("hardhat"); async function main() { const GuessGame = await hre.ethers.getContractFactory("GuessGame"); const game = await GuessGame.deploy(); await game.deployed(); console.log(`Game deployed to: ${game.address}`); } main();

运行部署:

bash
 
npx hardhat run scripts/deploy.js --network sepolia

💻 三、前端调用合约(React + Ethers)

我们用最简单的按钮实现交互:

js
 
import { ethers } from "ethers"; const contractAddress = "YOUR_DEPLOYED_ADDRESS"; const abi = [/* ABI JSON,这里省略,可复制合约编译产物 */]; async function playGame(guessBig) { if (!window.ethereum) return alert("请安装MetaMask"); const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = provider.getSigner(); const game = new ethers.Contract(contractAddress, abi, signer); const tx = await game.guess(guessBig, { value: ethers.utils.parseEther("0.01") }); await tx.wait(); alert("游戏完成,请查看是否中奖"); }

按钮绑定:

html
 
<button onClick={() => playGame(true)}>猜大</button> <button onClick={() => playGame(false)}>猜小</button>

📦 四、上线测试网 / 主网的步骤

  1. 使用 Alchemy / Infura 注册项目,获取 API KEY

  2. 配置 Hardhat 的 hardhat.config.js,接入测试网

  3. 用钱包给部署账户充值 Sepolia ETH

  4. 一键部署 + 拷贝合约地址到前端即可


🎮 五、玩法扩展建议(适合后续开发)

扩展点 实现效果
正式随机数 接入 Chainlink VRF(安全随机)
结果排行榜 用 mapping 存储历史结果
Token 奖励 中奖后发放自定义 ERC20 代币
管理后台 开发者可暂停、修改最小投注额等参数
NFT 积分奖励 输赢记录 mint NFT 勋章

✅ 总结

区块链小游戏是最适合开发者上手的 Web3 入口场景,可学智能合约、钱包交互、交易过程与 Gas 管理。

本教程虽然简单,但涉及完整开发流程,从合约编写 → 本地测试 → 前端交互 → 上链部署,全流程通了,就可以写更复杂的合约游戏啦!


💬 结语

今天的区块链小游戏源码开发教程就到这里了,不知道屏幕前的你有没有学会开发一个链上猜大小游戏呢?

声明:本文所述观点并非个性区块链技术的立场,不构成任何投资活动的邀约或建议。本文仅供参考。投资存在风险,请自行评估。转载需注明来源,违者必究!文章投稿请联系wwwwebx@gmail.com