diff --git a/front/src/GamePage.js b/front/src/GamePage.js
new file mode 100644
index 0000000..f7331bb
--- /dev/null
+++ b/front/src/GamePage.js
@@ -0,0 +1,190 @@
+import React, { useState } from "react";
+import MovieIcon from "@mui/icons-material/Movie";
+import EmailIcon from "@mui/icons-material/Email";
+import MusicNoteIcon from "@mui/icons-material/MusicNote";
+import EmojiPeopleIcon from "@mui/icons-material/EmojiPeople";
+import SportsEsportsIcon from "@mui/icons-material/SportsEsports";
+import SportsMartialArtsIcon from "@mui/icons-material/SportsMartialArts";
+import PersonIcon from "@mui/icons-material/Person";
+import AccountCircleIcon from "@mui/icons-material/AccountCircle";
+import "./App.css";
+import { useNavigate } from "react-router-dom";
+
+const navItems = [
+  { label: "电影", icon: <MovieIcon />, path: "/movie" },
+  { label: "剧集", icon: <EmailIcon />, path: "/tv" },
+  { label: "音乐", icon: <MusicNoteIcon />, path: "/music" },
+  { label: "动漫", icon: <EmojiPeopleIcon />, path: "/anime" },
+  { label: "游戏", icon: <SportsEsportsIcon />, path: "/game" },
+  { label: "体育", icon: <SportsMartialArtsIcon />, path: "/sport" },
+  { label: "资料", icon: <PersonIcon />, path: "/info" },
+];
+
+const gameTypes = ["PC", "主机", "移动", "掌机", "视频"];
+
+const areaTabs = [
+  { label: "PC", icon: <MovieIcon fontSize="small" /> },
+  { label: "主机", icon: <EmailIcon fontSize="small" /> },
+  { label: "移动", icon: <PersonIcon fontSize="small" /> },
+  { label: "掌机", icon: <EmojiPeopleIcon fontSize="small" /> },
+  { label: "视频", icon: <PersonIcon fontSize="small" /> },
+];
+
+export default function GamePage() {
+  const navigate = useNavigate();
+  const [activeTab, setActiveTab] = useState(0);
+
+  return (
+    <div className="container">
+      {/* 预留顶部空间用于放图片 */}
+      <div style={{ height: 80 }} />
+      <div
+        className="user-bar"
+        style={{
+          position: "fixed",
+          top: 18,
+          right: 42,
+          zIndex: 100,
+          display: "flex",
+          alignItems: "center",
+          background: "#e0f3ff",
+          borderRadius: 12,
+          padding: "6px 18px",
+          boxShadow: "0 2px 8px #b2d8ea",
+          minWidth: 320,
+          minHeight: 48,
+          width: 420,
+        }}
+      >
+        <div
+          style={{ cursor: "pointer", marginRight: 16 }}
+          onClick={() => navigate("/user")}
+        >
+          <AccountCircleIcon
+            style={{
+              fontSize: 38,
+              color: "#1a237e",
+              background: "#e0f3ff",
+              borderRadius: "50%",
+            }}
+          />
+        </div>
+        <div style={{ color: "#222", fontWeight: 500, marginRight: 24 }}>
+          用户栏
+        </div>
+        <div
+          style={{
+            display: "flex",
+            gap: 28,
+            flex: 1,
+            justifyContent: "flex-end",
+            alignItems: "center",
+          }}
+        >
+          <span style={{ color: "#1976d2", fontWeight: 500 }}>
+            魔力值: <b>12345</b>
+          </span>
+          <span style={{ color: "#1976d2", fontWeight: 500 }}>
+            分享率: <b>2.56</b>
+          </span>
+          <span style={{ color: "#1976d2", fontWeight: 500 }}>
+            上传量: <b>100GB</b>
+          </span>
+          <span style={{ color: "#1976d2", fontWeight: 500 }}>
+            下载量: <b>50GB</b>
+          </span>
+        </div>
+      </div>
+      {/* 下方内容整体下移，留出与音乐界面一致的间距 */}
+      <div style={{ height: 32 }} />
+      <nav className="nav-bar card">
+        {navItems.map((item) => (
+          <div
+            key={item.label}
+            className={item.label === "游戏" ? "nav-item active" : "nav-item"}
+            onClick={() => navigate(item.path)}
+          >
+            {item.icon}
+            <span>{item.label}</span>
+          </div>
+        ))}
+      </nav>
+      <div className="search-section card">
+        <input className="search-input" placeholder="输入搜索关键词" />
+        <button className="search-btn">
+          <span role="img" aria-label="search">
+            🔍
+          </span>
+        </button>
+      </div>
+      <div
+        className="area-tabs"
+        style={{
+          display: "flex",
+          justifyContent: "center",
+          gap: 24,
+          margin: "18px 0",
+        }}
+      >
+        {areaTabs.map((tab, idx) => (
+          <div
+            key={tab.label}
+            className={activeTab === idx ? "area-tab active" : "area-tab"}
+            onClick={() => setActiveTab(idx)}
+          >
+            {tab.icon} <span>{tab.label}</span>
+          </div>
+        ))}
+      </div>
+      <div className="table-section">
+        <table className="movie-table">
+          <thead>
+            <tr>
+              <th>游戏类型</th>
+              <th>标题</th>
+              <th>发布者</th>
+            </tr>
+          </thead>
+          <tbody>
+            {gameTypes.map((type, idx) => (
+              <tr key={type}>
+                <td>{type}</td>
+                <td></td>
+                <td></td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </div>
+      <div style={{ height: 32 }} />
+      <Pagination />
+    </div>
+  );
+}
+
+function Pagination() {
+  const [page, setPage] = React.useState(3);
+  const total = 5;
+  return (
+    <div className="pagination">
+      <button
+        onClick={() => setPage((p) => Math.max(1, p - 1))}
+        disabled={page === 1}
+      >
+        上一页
+      </button>
+      <span className="page-num">
+        {page}/{total}
+      </span>
+      <button
+        onClick={() => setPage((p) => Math.min(total, p + 1))}
+        disabled={page === total}
+      >
+        下一页
+      </button>
+      <span className="page-info">
+        第 <b>{page}</b> 页
+      </span>
+    </div>
+  );
+}
