Python打造在线游戏排行榜

admin 2025-01-13 197 0

在这个数字化时代,游戏已经成为许多人生活中不可或缺的一部分。无论是休闲玩家还是竞技高手,大家都希望有一个平台能展示自己的游戏成就。今天,我们将用Python语言来打造一个在线游戏排行榜,让每个玩家都能找到属于自己的荣耀。

Python打造在线游戏排行榜

项目背景

游戏排行榜不仅能激发玩家的竞争欲望,还能为游戏社区提供一个交流的平台。通过排行榜,玩家可以了解当前最热门的游戏,结识志同道合的朋友。而使用Python来实现这一功能,既简单又高效。

技术选型

为了构建这个在线游戏排行榜,我们需要以下几个技术栈:

  1. Flask框架:用于搭建Web服务器。
  2. SQLite数据库:用于存储游戏和玩家数据。
  3. HTML/CSS:用于前端展示。
  4. JavaScript:用于动态更新排行榜。

项目结构

我们的项目结构如下:

game_ranking/
│
├── app.py          # Flask应用入口
├── templates/      # HTML模板文件
│   ├── index.html  # 主页
│   └── rank.html   # 排行榜页面
├── static/         # 静态文件
│   └── style.css   # CSS样式
└── database.db     # SQLite数据库文件

数据库设计

我们使用SQLite数据库来存储游戏和玩家的数据。数据库包含两个表:

  1. games:存储游戏信息。
  2. players:存储玩家信息和游戏成绩。
CREATE TABLE games (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
);

CREATE TABLE players (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    game_id INTEGER,
    score INTEGER,
    FOREIGN KEY (game_id) REFERENCES games (id)
);

后端实现

首先,我们使用Flask框架搭建后端服务。在app.py中,我们定义了几个路由来处理不同的请求。

from flask import Flask, render_template, request, redirect, url_for
import sqlite3

app = Flask(__name__)

def get_db_connection():
    conn = sqlite3.connect('database.db')
    conn.row_factory = sqlite3.Row
    return conn

@app.route('/')
def index():
    conn = get_db_connection()
    games = conn.execute('SELECT * FROM games').fetchall()
    conn.close()
    return render_template('index.html', games=games)

@app.route('/rank/<int:game_id>')
def rank(game_id):
    conn = get_db_connection()
    players = conn.execute('SELECT * FROM players WHERE game_id = ?', (game_id,)).fetchall()
    game_name = conn.execute('SELECT name FROM games WHERE id = ?', (game_id,)).fetchone()['name']
    conn.close()
    return render_template('rank.html', players=players, game_name=game_name)

@app.route('/add_score', methods=('POST',))
def add_score():
    player_name = request.form['player_name']
    game_id = request.form['game_id']
    score = request.form['score']
    conn = get_db_connection()
    conn.execute('INSERT INTO players (name, game_id, score) VALUES (?, ?, ?)',
                 (player_name, game_id, score))
    conn.commit()
    conn.close()
    return redirect(url_for('rank', game_id=game_id))

if __name__ == '__main__':
    app.run(debug=True)

前端展示

templates/index.html中,我们展示所有游戏列表,并提供链接跳转到对应游戏的排行榜。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>游戏排行榜</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>游戏排行榜</h1>
    <ul>
        {% for game in games %}
            <li><a href="{{ url_for('rank', game_id=game.id) }}">{{ game.name }}</a></li>
        {% endfor %}
    </ul>
</body>
</html>

templates/rank.html中,我们展示特定游戏的玩家排行榜。


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ game_name }} 排行榜</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>{{ game_name }} 排行榜</h1>
    <table>
        <tr>
            <th>玩家</th>
            <th>分数</th>
        </tr>
        {% for player in players %}
            <tr>
                <td>{{ player.name }}</td>
                <td>{{

评论(0)