|
from flask import Flask, render_template, jsonify, request |
|
|
|
from flask import session |
|
from flask_session import Session |
|
|
|
import json |
|
import random |
|
import os |
|
|
|
app = Flask(__name__) |
|
|
|
app.config['SECRET_KEY'] = os.urandom(24) |
|
app.config['SESSION_TYPE'] = 'filesystem' |
|
Session(app) |
|
|
|
|
|
def load_coins(): |
|
if not os.path.exists('coins.json'): |
|
return [{"id": 1, "color": "#CD7F32", "price": 0, "value": 0.10, "winrate": 0.50}] |
|
with open('coins.json', 'r') as f: |
|
return json.load(f) |
|
|
|
|
|
def save_coins(coins): |
|
with open('coins.json', 'w') as f: |
|
json.dump(coins, f) |
|
|
|
@app.route('/') |
|
def index(): |
|
return render_template('index.html') |
|
|
|
@app.route('/api/coins') |
|
def get_coins(): |
|
if 'coins' not in session: |
|
session['coins'] = load_coins() |
|
return jsonify(session['coins']) |
|
|
|
@app.route('/api/flip', methods=['POST']) |
|
def flip_coin(): |
|
data = request.json |
|
coin_id = data['coinId'] |
|
if 'coins' not in session: |
|
session['coins'] = load_coins() |
|
coins = session['coins'] |
|
coin = next((c for c in coins if c['id'] == coin_id), None) |
|
|
|
if coin and random.random() < coin['winrate']: |
|
return jsonify({'result': 'heads', 'value': coin['value']}) |
|
else: |
|
return jsonify({'result': 'tails', 'value': 0}) |
|
|
|
@app.route('/api/mint', methods=['POST']) |
|
def mint_coin(): |
|
if 'coins' not in session: |
|
session['coins'] = load_coins() |
|
coins = session['coins'] |
|
new_id = max(coin['id'] for coin in coins) + 1 |
|
|
|
|
|
base_price = 4 + (new_id - 1) * 2 |
|
winrate = random.uniform(0.42, 0.98) |
|
value = random.uniform(0.5, 1.5) * (base_price / 4) |
|
price = int(base_price * (1 + random.uniform(-0.1, 0.1))) |
|
|
|
new_coin = { |
|
'id': new_id, |
|
'color': f'#{random.randint(0, 0xFFFFFF):06x}', |
|
'price': price, |
|
'value': round(value, 2), |
|
'winrate': round(winrate, 2) |
|
} |
|
|
|
coins.append(new_coin) |
|
session['coins'] = coins |
|
session.modified = True |
|
save_coins(coins) |
|
return jsonify(new_coin) |
|
|
|
@app.route('/api/leaderboard', methods=['GET', 'POST']) |
|
def leaderboard(): |
|
leaderboard_file = 'leaderboard.json' |
|
|
|
if request.method == 'POST': |
|
data = request.json |
|
initials = data['initials'] |
|
score = data['score'] |
|
|
|
try: |
|
with open(leaderboard_file, 'r') as f: |
|
leaderboard = json.load(f) |
|
except FileNotFoundError: |
|
leaderboard = [] |
|
|
|
leaderboard.append({'initials': initials, 'score': score}) |
|
leaderboard.sort(key=lambda x: x['score'], reverse=True) |
|
leaderboard = leaderboard[:10] |
|
|
|
with open(leaderboard_file, 'w') as f: |
|
json.dump(leaderboard, f) |
|
|
|
return jsonify({'success': True}) |
|
else: |
|
try: |
|
with open(leaderboard_file, 'r') as f: |
|
leaderboard = json.load(f) |
|
except FileNotFoundError: |
|
leaderboard = [] |
|
|
|
return jsonify(leaderboard) |
|
|
|
if __name__ == '__main__': |
|
app.run(debug=True, host='0.0.0.0', port=7860) |
|
|