Розробка гри Limbo на блокчейні

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка гри Limbo на блокчейні
Простий
від 1 дня до 3 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Розробка блокчейн-гри Limbo

Limbo — гра, де випадкове число генерується в діапазоні від 1.00x до дуже високого значення (теоретично нескінченність). Гравець вибирає цільовий множник (наприклад 2x, 10x, 100x), робить ставку. Якщо згенероване число >= цільовий — виграш у цільовий множник. Проста механіка з великим діапазоном риск/награду.

Математика

При цільовому множнику M: вірогідність виграшу = 1/M × (1 - houseEdge).

Цільовий 2x: win_prob = 50% × 0.99 = 49.5%. Реальна виплата = 2x. Цільовий 10x: win_prob = 10% × 0.99 = 9.9%. Виплата = 10x. Цільовий 1000x: win_prob = 0.1% × 0.99 = 0.099%. Виплата = 1000x.

Smart Contract

contract BlockchainLimbo is VRFConsumerBaseV2Plus {
    uint256 public houseEdge = 100; // 1%
    uint256 public maxMultiplier = 1_000_000; // максимум 1,000,000x
    
    struct LimboBet {
        address player;
        uint256 amount;
        uint256 targetMultiplier; // у basis points (20000 = 2.00x)
    }
    
    mapping(uint256 => LimboBet) public bets;
    
    event LimboResult(
        uint256 indexed requestId,
        address player,
        uint256 resultMultiplier,
        uint256 targetMultiplier,
        bool win,
        uint256 payout
    );
    
    function bet(uint256 targetMultiplier) external payable returns (uint256 requestId) {
        require(targetMultiplier >= 10100, "Min target 1.01x"); // мінімум 1.01x
        require(targetMultiplier <= maxMultiplier * 100, "Too high target");
        require(msg.value >= MIN_BET && msg.value <= getMaxBet(targetMultiplier));
        
        requestId = _requestVRF();
        bets[requestId] = LimboBet(msg.sender, msg.value, targetMultiplier);
    }
    
    function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) 
        internal override 
    {
        LimboBet memory b = bets[requestId];
        delete bets[requestId];
        
        // Генеруємо множник результату
        // Використовуємо формулу: result = 100 * MAX / (random % MAX + 1)
        // Це створює розподіл: P(result >= X) = 1/X (рівновага)
        uint256 MAX = 1_000_000;
        uint256 resultRaw = (randomWords[0] % MAX) + 1;
        uint256 resultMultiplier = (MAX * 10000) / resultRaw; // у basis points
        
        // Застосовуємо house edge: казино «обрізає» 1% випадків
        // Якщо resultRaw в нижніх 1% діапазоні — казино виграє
        bool houseTakes = resultRaw > MAX * (10000 - houseEdge) / 10000;
        
        bool win = !houseTakes && resultMultiplier >= b.targetMultiplier;
        
        uint256 payout = 0;
        if (win) {
            payout = (b.amount * b.targetMultiplier) / 10000;
            payable(b.player).transfer(payout);
        }
        
        emit LimboResult(requestId, b.player, resultMultiplier, b.targetMultiplier, win, payout);
    }
    
    // Максимальна ставка обмежена банкролом / цільовим множником
    function getMaxBet(uint256 targetMultiplier) public view returns (uint256) {
        return (address(this).balance * 10000) / targetMultiplier;
    }
}

Limbo — простої реалізації, 2-3 тижні з фронтенду. Основна робота у фронтенді: слайдер для вибору множника з реалтайм відображенням вірогідності та потенційного виграшу.