在这个数字化时代,游戏已经成为许多人生活中不可或缺的一部分。无论是休闲玩家还是竞技高手,大家都希望有一个平台能展示自己的游戏成就。今天,我们将用Python语言来打造一个在线游戏排行榜,让每个玩家都能找到属于自己的荣耀。
项目背景
游戏排行榜不仅能激发玩家的竞争欲望,还能为游戏社区提供一个交流的平台。通过排行榜,玩家可以了解当前最热门的游戏,结识志同道合的朋友。而使用Python来实现这一功能,既简单又高效。
技术选型
为了构建这个在线游戏排行榜,我们需要以下几个技术栈:
- Flask框架:用于搭建Web服务器。
- SQLite数据库:用于存储游戏和玩家数据。
- HTML/CSS:用于前端展示。
- JavaScript:用于动态更新排行榜。
项目结构
我们的项目结构如下:
game_ranking/
│
├── app.py # Flask应用入口
├── templates/ # HTML模板文件
│ ├── index.html # 主页
│ └── rank.html # 排行榜页面
├── static/ # 静态文件
│ └── style.css # CSS样式
└── database.db # SQLite数据库文件
数据库设计
我们使用SQLite数据库来存储游戏和玩家的数据。数据库包含两个表:
- games:存储游戏信息。
- 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)