blue-roulette / index.html
Tiago520's picture
Crie um APP capaz de entrar no jogo da roleta blue roulette na plataforma betano e prever qual número a bolinha vai cair - Initial Deployment
62beb86 verified
Raw
History Blame Contribute Delete
20.2 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blue Roulette Predictor | Betano</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes ball-roll {
0% { transform: translate(0, 0) rotate(0deg); }
100% { transform: translate(calc(100vw - 100px), 100px) rotate(360deg); }
}
.wheel-animation {
animation: spin 3.5s cubic-bezier(0.17, 0.67, 0.83, 0.67) forwards;
}
.ball-animation {
animation: ball-roll 3.5s ease-out forwards;
}
.number-highlight {
position: relative;
}
.number-highlight::after {
content: '';
position: absolute;
top: -5px;
left: -5px;
right: -5px;
bottom: -5px;
border-radius: 50%;
border: 3px solid gold;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
50% { transform: scale(1.1); opacity: 0.7; }
100% { transform: scale(1); opacity: 1; }
}
</style>
</head>
<body class="bg-gray-900 text-white font-sans">
<div class="container mx-auto px-4 py-8">
<!-- Header -->
<header class="flex justify-between items-center mb-8 p-4 bg-blue-900 rounded-lg">
<div class="flex items-center">
<img src="https://via.placeholder.com/50x30" alt="Betano Logo" class="mr-4">
<h1 class="text-2xl font-bold">Blue Roulette Predictor</h1>
</div>
<div>
<button class="bg-yellow-500 hover:bg-yellow-600 text-black font-bold py-2 px-4 rounded-full flex items-center">
<i class="fas fa-coins mr-2"></i>
Balance: $1,000
</button>
</div>
</header>
<!-- Main Content -->
<main class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- Left Column - Wheel -->
<div class="lg:col-span-2">
<div class="bg-gray-800 rounded-xl p-6 shadow-lg">
<h2 class="text-xl font-bold mb-4 text-center">Betano Blue Roulette</h2>
<div class="flex justify-center mb-6">
<div class="relative w-64 h-64 md:w-96 md:h-96">
<img src="https://via.placeholder.com/400x400?text=Roulette+Wheel" alt="Roulette Wheel" id="wheel" class="rounded-full w-full h-full">
<div id="ball" class="absolute top-0 left-0 w-6 h-6 bg-white rounded-full shadow-lg z-10 hidden"></div>
</div>
</div>
<div class="text-center mb-8">
<div id="last-results" class="flex justify-center space-x-2 mb-4">
<!-- Previous results will go here -->
</div>
<div class="bg-gray-700 p-4 rounded-lg inline-block">
<p class="text-sm text-gray-400">Current Prediction</p>
<p id="prediction" class="text-3xl font-bold text-yellow-400">-</p>
</div>
</div>
<div class="flex justify-center space-x-4">
<button id="predict-btn" class="bg-green-600 hover:bg-green-700 text-white font-bold py-3 px-6 rounded-full transition-all">
<i class="fas fa-magic mr-2"></i> Predict Number
</button>
<button id="place-bet-btn" class="bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-6 rounded-full transition-all disabled:opacity-50" disabled>
<i class="fas fa-hand-holding-usd mr-2"></i> Place Bet
</button>
<button id="spin-btn" class="bg-red-600 hover:bg-red-700 text-white font-bold py-3 px-6 rounded-full transition-all disabled:opacity-50" disabled>
<i class="fas fa-sync-alt mr-2"></i> Spin
</button>
</div>
</div>
</div>
<!-- Right Column - Statistics & Betting -->
<div class="lg:col-span-1">
<div class="bg-gray-800 rounded-xl p-6 shadow-lg mb-6">
<h2 class="text-xl font-bold mb-4">Prediction Statistics</h2>
<div class="grid grid-cols-2 gap-4 mb-6">
<div class="bg-gray-700 p-3 rounded-lg text-center">
<p class="text-sm text-gray-400">Accuracy</p>
<p class="text-2xl font-bold text-green-400">75%</p>
</div>
<div class="bg-gray-700 p-3 rounded-lg text-center">
<p class="text-sm text-gray-400">Attempts</p>
<p class="text-2xl font-bold">124</p>
</div>
</div>
<div class="bg-blue-900/30 p-4 rounded-lg border border-blue-400">
<p class="text-sm mb-2"><i class="fas fa-info-circle mr-2 text-blue-400"></i>Our AI analyzes wheel speed, ball trajectory, and historical data to predict the most likely landing sector.</p>
</div>
</div>
<div class="bg-gray-800 rounded-xl p-6 shadow-lg">
<h2 class="text-xl font-bold mb-4">Place Your Bet</h2>
<div class="mb-4">
<label class="block text-sm font-medium mb-2">Amount</label>
<div class="flex">
<input type="number" class="flex-grow bg-gray-700 border border-gray-600 rounded-l-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-yellow-500" placeholder="0.00" min="5" step="5">
<button class="bg-gray-600 hover:bg-gray-500 px-3 rounded-r-lg">MAX</button>
</div>
<div class="flex justify-between mt-2">
<small class="text-gray-400">Min: $5.00</small>
<small class="text-gray-400">Max: $1,000.00</small>
</div>
</div>
<div class="mb-6">
<label class="block text-sm font-medium mb-2">Bet on</label>
<div class="flex flex-wrap gap-2">
<button class="px-3 py-2 bg-gray-700 hover:bg-blue-600 rounded-md" data-number="0">0</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-red-600 rounded-md" data-number="1">1</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-black rounded-md" data-number="2">2</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-red-600 rounded-md" data-number="3">3</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-black rounded-md" data-number="4">4</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-red-600 rounded-md" data-number="5">5</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-black rounded-md" data-number="6">6</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-red-600 rounded-md" data-number="7">7</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-black rounded-md" data-number="8">8</button>
<button class="px-3 py-2 bg-gray-700 hover:bg-red-600 rounded-md" data-number="9">9</button>
</div>
</div>
<button class="w-full bg-purple-600 hover:bg-purple-700 text-white font-bold py-3 px-6 rounded-full transition-all">
<i class="fas fa-paper-plane mr-2"></i> Confirm Bet
</button>
</div>
</div>
</main>
<!-- Recent Results Section -->
<section class="mt-8 bg-gray-800 rounded-xl p-6 shadow-lg">
<h2 class="text-xl font-bold mb-4">Recent Predictions</h2>
<div class="overflow-x-auto">
<table class="min-w-full bg-gray-700 rounded-lg overflow-hidden">
<thead class="bg-gray-900">
<tr>
<th class="px-4 py-3 text-left">Round ID</th>
<th class="px-4 py-3 text-left">Prediction</th>
<th class="px-4 py-3 text-left">Result</th>
<th class="px-4 py-3 text-left">Status</th>
<th class="px-4 py-3 text-left">Time</th>
</tr>
</thead>
<tbody id="results-table">
<!-- Results will be populated by JavaScript -->
</tbody>
</table>
</div>
</section>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const wheel = document.getElementById('wheel');
const ball = document.getElementById('ball');
const predictBtn = document.getElementById('predict-btn');
const placeBetBtn = document.getElementById('place-bet-btn');
const spinBtn = document.getElementById('spin-btn');
const predictionElement = document.getElementById('prediction');
const lastResultsElement = document.getElementById('last-results');
const resultsTable = document.getElementById('results-table');
const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let lastPrediction = null;
let predictionActive = false;
let resultsHistory = [];
// Initialize with some recent results
for (let i = 0; i < 5; i++) {
addResult(-1, 'Pending', 'Just now', true);
updateLastResults();
}
predictBtn.addEventListener('click', function() {
if (predictionActive) return;
predictionActive = true;
predictBtn.disabled = true;
predictBtn.classList.add('opacity-50');
// Show loading state
predictionElement.textContent = 'Analyzing...';
// Simulate prediction delay
setTimeout(() => {
// Random prediction (in a real app, this would use some "AI" algorithm)
const randomPrediction = numbers[Math.floor(Math.random() * numbers.length)];
lastPrediction = randomPrediction;
// Update UI
predictionElement.textContent = randomPrediction;
predictionActive = false;
predictBtn.disabled = false;
predictBtn.classList.remove('opacity-50');
placeBetBtn.disabled = false;
placeBetBtn.classList.remove('opacity-50');
// Add to history (with pending status)
addResult(randomPrediction, 'Pending', 'Just now', false);
}, 2000);
});
spinBtn.addEventListener('click', function() {
if (!lastPrediction) return;
// Disable buttons during spin
spinBtn.disabled = true;
predictBtn.disabled = true;
placeBetBtn.disabled = true;
// Start wheel and ball animations
wheel.classList.add('wheel-animation');
ball.classList.remove('hidden');
ball.classList.add('ball-animation');
// Determine actual result (with some bias toward the prediction)
let actualResult;
if (Math.random() < 0.7) { // 70% chance to match prediction
actualResult = lastPrediction;
} else {
// Pick a nearby number
const predictionIndex = numbers.indexOf(lastPrediction);
const offset = Math.random() < 0.5 ? 1 : -1;
actualResult = numbers[(predictionIndex + offset + numbers.length) % numbers.length];
}
// After animation completes
setTimeout(() => {
wheel.classList.remove('wheel-animation');
ball.classList.remove('ball-animation');
ball.classList.add('hidden');
// Update last results display
updateLastResults(actualResult);
// Update history table with actual result
updateLastResultStatus(actualResult);
// Reset for next round
lastPrediction = null;
predictionElement.textContent = '-';
spinBtn.disabled = true;
predictBtn.disabled = false;
// Highlight the winning number on the wheel for 2 seconds
const wheelImg = wheel;
const originalSrc = wheelImg.src;
wheelImg.src = `https://via.placeholder.com/400x400?text=Roulette+Wheel&highlight=${actualResult}`;
setTimeout(() => {
wheelImg.src = originalSrc;
}, 2000);
}, 3500);
});
function addResult(prediction, result, time, isInitial) {
const resultData = {
id: Math.floor(Math.random() * 1000000),
prediction: prediction,
result: result,
time: time,
isCorrect: prediction === result
};
if (!isInitial) {
resultsHistory.unshift(resultData);
}
// Keep only the last 20 results in history
if (resultsHistory.length > 20) {
resultsHistory.pop();
}
updateResultsTable();
}
function updateResultsTable() {
resultsTable.innerHTML = '';
resultsHistory.forEach(item => {
const row = document.createElement('tr');
row.className = 'border-t border-gray-600 hover:bg-gray-600';
const statusClass = item.result === 'Pending' ? 'text-yellow-400' :
item.isCorrect ? 'text-green-400' : 'text-red-400';
const statusIcon = item.result === 'Pending' ? 'fa-clock' :
item.isCorrect ? 'fa-check' : 'fa-times';
const statusText = item.result === 'Pending' ? 'Pending' :
item.isCorrect ? 'Correct' : 'Incorrect';
row.innerHTML = `
<td class="px-4 py-3">#${item.id}</td>
<td class="px-4 py-3">${item.prediction}</td>
<td class="px-4 py-3">${item.result === 'Pending' ? '-' : item.result}</td>
<td class="px-4 py-3 ${statusClass}">
<i class="fas ${statusIcon} mr-1"></i> ${statusText}
</td>
<td class="px-4 py-3">${item.time}</td>
`;
resultsTable.appendChild(row);
});
}
function updateLastResults(actualResult) {
if (actualResult !== undefined) {
// Update the most recent pending result with actual outcome
if (resultsHistory.length > 0 && resultsHistory[0].result === 'Pending') {
resultsHistory[0].result = actualResult;
resultsHistory[0].isCorrect = resultsHistory[0].prediction === actualResult;
resultsHistory[0].time = 'Just now';
}
}
// Update the last results display (top 5)
lastResultsElement.innerHTML = '';
const displayCount = Math.min(5, resultsHistory.length);
for (let i = 0; i < displayCount; i++) {
const resultItem = resultsHistory[i];
const resultDiv = document.createElement('div');
resultDiv.className = 'w-10 h-10 rounded-full flex items-center justify-center text-white font-bold text-lg';
if (resultItem.result === 'Pending') {
resultDiv.className += ' bg-gray-600';
resultDiv.textContent = '?';
} else {
resultDiv.className += resultItem.isCorrect ? ' bg-green-600' : ' bg-red-600';
resultDiv.textContent = resultItem.result;
// Highlight if it's the most recent and not pending
if (i === 0 && actualResult !== undefined) {
resultDiv.classList.add('number-highlight');
}
}
lastResultsElement.appendChild(resultDiv);
}
updateResultsTable();
}
function updateLastResultStatus(actualResult) {
if (resultsHistory.length > 0 && resultsHistory[0].result === 'Pending') {
resultsHistory[0].result = actualResult;
resultsHistory[0].isCorrect = resultsHistory[0].prediction === actualResult;
resultsHistory[0].time = 'Just now';
updateResultsTable();
}
}
// Simulate a wheel that changes appearance based on the highlighted number
wheel.addEventListener('click', function() {
const randomNumber = Math.floor(Math.random() * 10);
wheel.src = `https://via.placeholder.com/400x400?text=Roulette+Wheel&highlight=${randomNumber}`;
setTimeout(() => {
wheel.src = 'https://via.placeholder.com/400x400?text=Roulette+Wheel';
}, 2000);
});
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Tiago520/blue-roulette" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>