from flask import Flask, render_template_string, request, jsonify, session
import random
import time
from datetime import datetime
app = Flask(__name__)
app.secret_key = 'roulette_secret_key_2024'
class RouletteGame:
def __init__(self):
self.numbers = list(range(0, 37))
self.reds = [1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]
self.blacks = [2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35]
self.wheel_order = [0, 32, 15, 19, 4, 21, 2, 25, 17, 34, 6, 27, 13, 36, 11, 30, 8, 23,
10, 5, 24, 16, 33, 1, 20, 14, 31, 9, 22, 18, 29, 7, 28, 12, 35, 3, 26]
def spin(self):
return random.choice(self.numbers)
def check_win(self, number, bet_type, bet_value):
if bet_type == 'number':
return number == int(bet_value)
elif bet_type == 'color':
if bet_value == 'red':
return number in self.reds
elif bet_value == 'black':
return number in self.blacks
elif bet_type == 'even_odd':
if number == 0:
return False
if bet_value == 'even':
return number % 2 == 0
elif bet_value == 'odd':
return number % 2 == 1
elif bet_type == 'dozen':
if bet_value == 'first':
return 1 <= number <= 12
elif bet_value == 'second':
return 13 <= number <= 24
elif bet_value == 'third':
return 25 <= number <= 36
elif bet_type == 'column':
col = int(bet_value)
return number != 0 and (number % 3 == col)
elif bet_type == 'half':
if bet_value == '1-18':
return 1 <= number <= 18
elif bet_value == '19-36':
return 19 <= number <= 36
return False
def get_payout_multiplier(self, bet_type):
multipliers = {
'number': 35,
'color': 2,
'even_odd': 2,
'dozen': 3,
'column': 3,
'half': 2
}
return multipliers.get(bet_type, 1)
def init_session():
"""Инициализация сессии"""
if 'balance' not in session:
session['balance'] = 1000
session['history'] = []
session['total_games'] = 0
session['total_wins'] = 0
session.modified = True
HTML_TEMPLATE = '''
Казино Рулетка
Игровой стол
Красное (x2)
Черное (x2)
Четное (x2)
Нечетное (x2)
1-12 (x3)
13-24 (x3)
25-36 (x3)
1-18 (x2)
19-36 (x2)
1-я колонка (x3)
2-я колонка (x3)
3-я колонка (x3)
Сделайте ставку и нажмите "Крутить"
'''
game = RouletteGame()
@app.route('/')
def index():
# Initialize session
init_session()
return render_template_string(HTML_TEMPLATE)
@app.route('/spin', methods=['POST'])
def spin():
# Ensure session is initialized
init_session()
data = request.json
bet_type = data['betType']
bet_value = data['betValue']
bet_amount = float(data['betAmount'])
# Check if player has enough balance
if bet_amount > session['balance']:
return jsonify({'error': 'Недостаточно средств'}), 400
# Deduct bet amount
session['balance'] -= bet_amount
session['total_games'] = session.get('total_games', 0) + 1
# Spin the wheel
winning_number = game.spin()
win = game.check_win(winning_number, bet_type, bet_value)
# Calculate payout
payout = 0
if win:
multiplier = game.get_payout_multiplier(bet_type)
payout = bet_amount * multiplier
session['balance'] += payout
session['total_wins'] = session.get('total_wins', 0) + 1
# Add to history
history_item = {
'number': winning_number,
'bet_type': bet_type,
'bet_value': bet_value,
'amount': bet_amount,
'payout': payout,
'won': win,
'timestamp': datetime.now().strftime('%H:%M:%S')
}
session['history'] = session.get('history', [])
session['history'].insert(0, history_item)
if len(session['history']) > 10:
session['history'] = session['history'][:10]
session.modified = True
return jsonify({
'winningNumber': winning_number,
'win': win,
'payout': payout,
'color': 'red' if winning_number in game.reds else 'black',
'newBalance': session['balance']
})
@app.route('/reset', methods=['POST'])
def reset():
session['balance'] = 1000
session['history'] = []
session['total_games'] = 0
session['total_wins'] = 0
session.modified = True
return jsonify({'message': 'Игра сброшена', 'balance': session['balance']})
@app.before_request
def before_request():
"""Ensure session is initialized before each request"""
init_session()
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=7860)