.NET 10 打造 Google Play 风格游戏商城首页 - 完整实战

本文记录了一个棋牌游戏平台首页的完整开发过程,从数据库展示到 UI 美化,涵盖 ASP.NET Core MVC、Razor 视图、CSS3 动画等核心技术。

项目背景

基于网狐棋牌旗舰版(WHQJ)框架,在 .NET 10 平台上开发一个现代化的游戏展示首页,要求类似 Google Play 商店的视觉效果。

技术栈

  • **后端框架**: ASP.NET Core MVC (.NET 10)

  • **视图引擎**: Razor

  • **数据库**: SQL Server

  • **前端**: HTML5 + CSS3 + JavaScript

  • **UI 风格**: 玻璃态卡片 + 渐变色彩 + 平滑动画

开发过程

一、数据层开发

1. 实体类创建

从 WHQJAdmin 项目复制 `GameGameItem.cs` 到 WHQJFront 项目:

```csharp

namespace Game.Entity.Platform

{

Serializable

public partial class GameGameItem

{

public int GameID { get; set; }

public string GameName { get; set; }

public int SuportType { get; set; }

public string DataBaseAddr { get; set; }

public string DataBaseName { get; set; }

public int ServerVersion { get; set; }

public int ClientVersion { get; set; }

public string ServerDLLName { get; set; }

public string ClientExeName { get; set; }

}

}

```

2. 数据访问层接口

在 `IPlatformDataProvider.cs` 中添加方法:

```csharp

/// <summary>

/// 获取游戏模块列表

/// </summary>

IList<GameGameItem> GetGameGameItemList();

```

3. 数据访问层实现

在 `PlatformDataProvider.cs` 中实现:

```csharp

public IList<GameGameItem> GetGameGameItemList()

{

string sql = "SELECT * FROM GameGameItem WITH(NOLOCK) ORDER BY GameID";

return Database.ExecuteObjectList<GameGameItem>(sql);

}

```

4. 业务逻辑层

在 `PlatformFacade.cs` 中添加:

```csharp

public IList<GameGameItem> GetGameGameItemList()

{

return platformData.GetGameGameItemList();

}

```

二、控制器开发

```csharp

public class HomeController : Controller

{

public IActionResult Index()

{

ViewData["PageTitle"] = "网狐棋牌旗舰版";

// 直接使用数据库连接字符串

string connString = "Data Source=.; Initial Catalog=WHQJPlatformDB; Integrated Security=true;";

var platformData = new PlatformDataProvider(connString);

var gameList = platformData.GetGameGameItemList();

ViewData["GameList"] = gameList;

return View();

}

}

```

三、视图开发

1. 版本号转换算法

数据库中的版本号是位运算存储的,需要转换:

```csharp

// 10112249 -> 6.7.0.1

var v = game.ClientVersion;

var major = v >> 24;

var minor = ((v >> 16) << 24) >> 24;

var build = ((v >> 8) << 24) >> 24;

var revision = (v << 24) >> 24;

var versionStr = $"{major}.{minor}.{build}.{revision}";

```

2. 游戏分类逻辑

```csharp

var categoryName = "other";

if (gameName.Contains("扑克") || gameName.Contains("牛牛") || gameName.Contains("三公"))

{

categoryName = "poker";

}

else if (gameName.Contains("麻将"))

{

categoryName = "majiang";

}

else if (gameName.Contains("捕鱼") || gameName.Contains("鱼"))

{

categoryName = "fish";

}

else if (gameName.Contains("棋"))

{

categoryName = "chess";

}

```

四、UI 设计

1. 整体配色方案

```css

/* 绿色系主题 */

--primary-green: #10b981;

--dark-green: #059669;

--darker-green: #047857;

--light-green: #34d399;

--bg-green: #d1fae5;

```

2. 头部横幅

```css

.hero-section {

background: linear-gradient(135deg, #10b981 0%, #059669 100%);

border-radius: 24px;

box-shadow: 0 20px 60px rgba(16, 185, 129, 0.5);

}

```

3. 分类按钮

```css

.category-tabs .tab {

background: linear-gradient(135deg, #10b981 0%, #059669 100%);

box-shadow: 0 3px 15px rgba(16, 185, 129, 0.3);

}

.tab:hover, .tab.active {

background: linear-gradient(135deg, #34d399 0%, #10b981 100%);

box-shadow: 0 8px 25px rgba(16, 185, 129, 0.5);

}

```

4. 游戏卡片

```css

.game-card {

background: linear-gradient(145deg, rgba(255,255,255,0.98), rgba(248,250,252,0.95));

backdrop-filter: blur(20px);

border-radius: 24px;

box-shadow: 0 10px 40px rgba(0,0,0,0.15);

}

.game-card:hover {

transform: translateY(-8px) scale(1.02);

box-shadow: 0 20px 60px rgba(16, 185, 129, 0.5);

}

/* 悬停时淡入效果 */

.game-card::after {

background: linear-gradient(135deg, rgba(16, 185, 129, 0.08), rgba(5, 150, 105, 0.12));

}

```

5. 进入按钮

```css

.install-btn {

background: linear-gradient(135deg, #10b981 0%, #059669 100%);

box-shadow: 0 5px 20px rgba(16, 185, 129, 0.4);

}

.game-card:hover .install-btn {

background: linear-gradient(135deg, #34d399 0%, #10b981 100%);

box-shadow: 0 5px 25px rgba(16, 185, 129, 0.6);

}

```

6. 热门标签

```css

.hot-tag {

background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);

box-shadow: 0 3px 10px rgba(96, 165, 250, 0.4);

}

```

五、JavaScript 交互

分类过滤功能

```javascript

document.querySelectorAll('.category-tabs .tab').forEach(function(tab) {

tab.addEventListener('click', function() {

// 切换激活状态

document.querySelectorAll('.category-tabs .tab').forEach(function(t) {

t.classList.remove('active');

});

this.classList.add('active');

// 获取选中的分类

var category = this.getAttribute('data-category');

// 过滤游戏卡片

document.querySelectorAll('.game-card').forEach(function(card) {

var cardCategory = card.getAttribute('data-category');

if (category === 'all' || cardCategory === category) {

card.style.display = 'flex';

// 淡入动画

card.style.opacity = '0';

setTimeout(function() {

card.style.transition = 'opacity 0.3s ease';

card.style.opacity = '1';

}, 50);

} else {

card.style.display = 'none';

}

});

});

});

```

关键技术点

1. Razor 视图中的内联代码

在 `@foreach` 循环中定义变量:

```razor

@foreach (var game in gameList)

{

var colors = new[] { "color1", "color2", ... };

var iconColor = colors[game.GameID % colors.Length];

var versionStr = $"{major}.{minor}.{build}.{revision}";

<div class="game-card" data-category="@categoryName">

<!-- 卡片内容 -->

</div>

}

```

2. CSS 动画优化

使用 `cubic-bezier` 实现弹性效果:

```css

transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);

```

3. 玻璃态效果

```css

backdrop-filter: blur(20px);

background: linear-gradient(145deg, rgba(255,255,255,0.98), rgba(248,250,252,0.95));

```

4. 响应式设计

```css

@media (max-width: 768px) {

.game-grid {

grid-template-columns: 1fr;

}

.category-tabs {

overflow-x: auto;

flex-wrap: nowrap;

}

}

```

最终效果

页面特性

✅ **视觉设计**

  • 绿色渐变主题(头部横幅、分类按钮、进入按钮)

  • 玻璃态卡片设计

  • 浅蓝色热门标签

  • 平滑的悬停动画(上浮 + 缩放 + 阴影)

✅ **功能特性**

  • 游戏类型过滤(全部/扑克/麻将/捕鱼/棋类)

  • 版本号正确显示(位运算转换)

  • 游戏名称完整显示(自动换行)

  • 响应式布局(移动端适配)

✅ **性能优化**

  • SQL 查询使用 `WITH(NOLOCK)` 避免锁表

  • CSS 动画使用 `transform` 触发 GPU 加速

  • 淡入动画使用 `opacity` 避免重排

项目结构

```

WHQJFront/

├── Services/

│ ├── Game.Entity/ # 实体层

│ ├── Game.IData/ # 数据接口层

│ ├── Game.Data/ # 数据访问层

│ └── Game.Facade/ # 业务逻辑层

└── WebProjects/

└── Game.Web/

├── Controllers/

│ └── HomeController.cs

└── Views/

└── Home/

└── Index.cshtml

```

总结

本文完整记录了一个现代化游戏商城首页的开发过程,从数据库读取到最终 UI 展示,涵盖了:

  1. **三层架构**的完整实现

  2. **Razor 视图**的高级用法

  3. **CSS3 渐变**和**动画**技巧

  4. **JavaScript 原生**事件处理

  5. **响应式设计**实践

通过本文,你可以学习到如何在 .NET 10 平台上打造具有现代感的 Web 界面。


**项目源码**: 参考本文代码片段

**运行环境**: .NET 10 + SQL Server

**访问地址**: http://localhost:5000

相关推荐
MORE_772 小时前
leecode100-跳跃游戏-贪心算法
算法·游戏·贪心算法
A_nanda2 小时前
ZR.Admin.NET后台管理系统
vue·.net·zradmin
前端不太难2 小时前
AI + 鸿蒙游戏,会不会是下一个爆点?
人工智能·游戏·harmonyos
量子物理学2 小时前
.NET8 中 WPF与ScottPlot 报表 的完美结合
.net·wpf
MORE_772 小时前
leecode100-跳跃游戏2-贪心算法
算法·游戏·贪心算法
似水明俊德2 小时前
16-C#.Net-自研ORM框架-学习笔记
windows·笔记·学习·c#·.net
唐青枫3 小时前
C#.NET System.Threading.Lock 深入解析:新一代 lock、底层语义与使用边界
c#·.net
一个帅气昵称啊14 小时前
基于.NET AgentFramework开发OpenClaw智能体框架
人工智能·自然语言处理·c#·.net·openclaw
唐青枫15 小时前
C#.NET SpinLock 深入解析:自旋锁原理、使用边界与性能取舍
c#·.net