“增加小游网站”
This commit is contained in:
parent
68534977a4
commit
cb5afd7302
@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iyixiGames.Web", "src\iyixi
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iyixiGames.AI", "src\iyixiGames.AI\iyixiGames.AI.csproj", "{EFC60DE0-44E8-4E7C-B24C-4BC5CF9C76CB}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "iyixiGames.miniGame", "src\iyixiGames.miniGame\iyixiGames.miniGame.csproj", "{A61950D8-246C-4785-A37C-1B20FFAC371D}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@ -85,6 +87,18 @@ Global
|
||||
{EFC60DE0-44E8-4E7C-B24C-4BC5CF9C76CB}.Release|x64.Build.0 = Release|Any CPU
|
||||
{EFC60DE0-44E8-4E7C-B24C-4BC5CF9C76CB}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EFC60DE0-44E8-4E7C-B24C-4BC5CF9C76CB}.Release|x86.Build.0 = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|x64.Build.0 = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -95,5 +109,6 @@ Global
|
||||
{1BBE943D-93BE-461D-8019-AA8A0FC3A38C} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{3DB52C51-960A-4FDA-9BD0-579B5E828A5A} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{EFC60DE0-44E8-4E7C-B24C-4BC5CF9C76CB} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
{A61950D8-246C-4785-A37C-1B20FFAC371D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
55
src/iyixiGames.Domain/DTOs/AdSitting/GoogleDTOs.cs
Normal file
55
src/iyixiGames.Domain/DTOs/AdSitting/GoogleDTOs.cs
Normal file
@ -0,0 +1,55 @@
|
||||
namespace iyixiGames.Domain.DTOs.AdSitting;
|
||||
|
||||
public class GoogleDTOs
|
||||
{
|
||||
// Google自动广告
|
||||
/// <summary>
|
||||
/// Google自动广告
|
||||
/// </summary>
|
||||
public string? AutoAd { get; set; }
|
||||
// Google自动广告是否开启,开启为1不开启为0,int 类型
|
||||
/// <summary>
|
||||
/// Google自动广告是否开启,开启为1不开启为0,int 类型
|
||||
/// </summary>
|
||||
public int? AutoAdIsOpen { get; set; }
|
||||
// AMP自动广告
|
||||
/// <summary>
|
||||
/// AMP自动广告
|
||||
/// </summary>
|
||||
public string? AmpAutoAd { get; set; }
|
||||
// AMP自动广告是否开启,开启为1不开启为0,int 类型
|
||||
/// <summary>
|
||||
/// AMP自动广告是否开启,开启为1不开启为0,int 类型
|
||||
/// </summary>
|
||||
public int? AmpAutoAdIsOpen { get; set; }
|
||||
// Body位置
|
||||
/// <summary>
|
||||
/// Body位置
|
||||
/// </summary>
|
||||
public string? BodyPosition { get; set; }
|
||||
// Body位置是否开启,开启为1不开启为0,int 类型
|
||||
/// <summary>
|
||||
/// Body位置是否开启,开启为1不开启为0,int 类型
|
||||
/// </summary>
|
||||
public int? BodyPositionIsOpen { get; set; }
|
||||
// List位置
|
||||
/// <summary>
|
||||
/// List位置
|
||||
/// </summary>
|
||||
public string? ListPosition { get; set; }
|
||||
// List位置是否开启,开启为1不开启为0,int 类型
|
||||
/// <summary>
|
||||
/// List位置是否开启,开启为1不开启为0,int 类型
|
||||
/// </summary>
|
||||
public int? ListPositionIsOpen { get; set; }
|
||||
// Footer位置
|
||||
/// <summary>
|
||||
/// Footer位置
|
||||
/// </summary>
|
||||
public string? FooterPosition { get; set; }
|
||||
// Footer位置是否开启,开启为1不开启为0,int 类型
|
||||
/// <summary>
|
||||
/// Footer位置是否开启,开启为1不开启为0,int 类型
|
||||
/// </summary>
|
||||
public int? FooterPositionIsOpen { get; set; }
|
||||
}
|
||||
@ -69,7 +69,7 @@ namespace iyixiGames.Domain.DTOs.Games
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Path { get; set; } = string.Empty;
|
||||
public string? Description { get; set; } // New: Make it nullable
|
||||
public List<string> Category { get; set; } = new List<string>();
|
||||
public List<string>? Category { get; set; } = new List<string>();
|
||||
public int Popularity { get; set; }
|
||||
public double AvgRating { get; set; }
|
||||
public DateTime ReleaseDate { get; set; }
|
||||
|
||||
7
src/iyixiGames.Domain/DTOs/Seo/HreFlangDTOs.cs
Normal file
7
src/iyixiGames.Domain/DTOs/Seo/HreFlangDTOs.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace iyixiGames.Domain.DTOs.Seo;
|
||||
|
||||
public class HreFlangDTOs
|
||||
{
|
||||
public string? Href { get; set; }
|
||||
public string? Lang { get; set; }
|
||||
}
|
||||
30
src/iyixiGames.Domain/DTOs/Seo/SeoDTOs.cs
Normal file
30
src/iyixiGames.Domain/DTOs/Seo/SeoDTOs.cs
Normal file
@ -0,0 +1,30 @@
|
||||
namespace iyixiGames.Domain.DTOs.Seo;
|
||||
|
||||
public class SeoDTOs
|
||||
{
|
||||
public string? Description { get; set; }
|
||||
public string? Keywords { get; set; }
|
||||
public string? Title { get; set; }
|
||||
public string? Canonical { get; set; }
|
||||
|
||||
public List<HreFlangDTOs>? Alternate { get; set; }
|
||||
|
||||
public string? OgTitle { get; set; }
|
||||
public string? OgDescription { get; set; }
|
||||
public string? OgType { get; set; }
|
||||
public string? OgUrl { get; set; }
|
||||
public string? OgImage { get; set; }
|
||||
public string? OgLocale { get; set; }
|
||||
public string? OgSiteName { get; set; }
|
||||
|
||||
public string? TwitterCard { get; set; }
|
||||
public string? TwitterSite { get; set; }
|
||||
public string? TwitterCreator { get; set; }
|
||||
public string? TwitterTitle { get; set; }
|
||||
public string? TwitterDescription { get; set; }
|
||||
public string? TwitterImage { get; set; }
|
||||
public string? TwitterImageAlt { get; set; }
|
||||
|
||||
public string? Icon { get; set; }
|
||||
public string? ShortIcon { get; set; }
|
||||
}
|
||||
@ -32,44 +32,30 @@
|
||||
|
||||
<table class="table table-striped table-hover">
|
||||
<thead class="table-dark">
|
||||
<tr>
|
||||
<th>@Html.DisplayNameFor(model => model.Name)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Path)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Description)</th> @* New: Description column *@
|
||||
<th>@Html.DisplayNameFor(model => model.Category)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Popularity)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.AvgRating)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.ReleaseDate)</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>@Html.DisplayNameFor(model => model.Name)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Path)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Description)</th> @* New: Description column *@
|
||||
<th>@Html.DisplayNameFor(model => model.Category)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.Popularity)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.AvgRating)</th>
|
||||
<th>@Html.DisplayNameFor(model => model.ReleaseDate)</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (Model != null && Model.Any())
|
||||
{
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<tr>
|
||||
<td>@Html.DisplayFor(modelItem => item.Name)</td>
|
||||
<td>@Html.DisplayFor(modelItem => item.Path)</td>
|
||||
<td>@Html.DisplayFor(modelItem => item.Description)</td> @* Display Description *@
|
||||
<td>@(string.Join(", ", item.Category))</td>
|
||||
<td>@Html.DisplayFor(modelItem => item.Popularity)</td>
|
||||
<td>@Html.DisplayFor(modelItem => item.AvgRating)</td>
|
||||
<td>@Html.DisplayFor(modelItem => item.ReleaseDate.ToShortDateString())</td>
|
||||
<td>
|
||||
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-sm btn-info me-1">编辑</a>
|
||||
<a asp-action="Details" asp-route-id="@item.Id" class="btn btn-sm btn-secondary me-1">详情</a>
|
||||
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-sm btn-danger">删除</a>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<tr>
|
||||
<td colspan="8" class="text-center text-muted">暂无游戏数据。</td> @* Update colspan count *@
|
||||
</tr>
|
||||
}
|
||||
@if (Model != null && Model.Any())
|
||||
{
|
||||
<tr>
|
||||
<td colspan="8" class="text-center text-muted">暂无游戏数据。</td> @* Update colspan count *@
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
<tr>
|
||||
<td colspan="8" class="text-center text-muted">暂无游戏数据。</td> @* Update colspan count *@
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -87,7 +73,7 @@
|
||||
<p>请输入小游戏的文件夹名称,每行一个。系统将以这些名称创建默认游戏条目。</p>
|
||||
<div class="mb-3">
|
||||
<label for="gamePathsText" class="form-label">游戏文件夹名称列表:</label>
|
||||
<textarea class="form-control" id="gamePathsText" name="GamePathsText" rows="10"
|
||||
<textarea class="form-control" id="gamePathsText" name="GamePathsText" rows="10"
|
||||
placeholder="例如: space-shooter-v1 puzzle-mania retro-platformer"></textarea>
|
||||
<span id="gamePathsTextValidation" class="text-danger"></span>
|
||||
</div>
|
||||
@ -102,7 +88,7 @@
|
||||
</div>
|
||||
|
||||
@section Scripts {
|
||||
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
|
||||
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
|
||||
|
||||
<script>
|
||||
// Batch Create Modal logic (remains the same)
|
||||
|
||||
52
src/iyixiGames.miniGame/Controllers/GamesController.cs
Normal file
52
src/iyixiGames.miniGame/Controllers/GamesController.cs
Normal file
@ -0,0 +1,52 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using iyixiGames.miniGame.Models;
|
||||
|
||||
namespace iyixiGames.miniGame.Controllers;
|
||||
|
||||
public class GamesController : Controller
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
|
||||
public GamesController(ILogger<HomeController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏列表
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 游戏详情
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult Details()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// PlayGame
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult PlayGame()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 错误处理
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
}
|
||||
43
src/iyixiGames.miniGame/Controllers/HomeController.cs
Normal file
43
src/iyixiGames.miniGame/Controllers/HomeController.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using iyixiGames.miniGame.Models;
|
||||
|
||||
namespace iyixiGames.miniGame.Controllers;
|
||||
|
||||
public class HomeController : Controller
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
|
||||
public HomeController(ILogger<HomeController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 首页
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 隐私
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IActionResult Privacy()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 错误处理
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
}
|
||||
8
src/iyixiGames.miniGame/Models/ErrorViewModel.cs
Normal file
8
src/iyixiGames.miniGame/Models/ErrorViewModel.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace iyixiGames.miniGame.Models;
|
||||
|
||||
public class ErrorViewModel
|
||||
{
|
||||
public string? RequestId { get; set; }
|
||||
|
||||
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
}
|
||||
27
src/iyixiGames.miniGame/Program.cs
Normal file
27
src/iyixiGames.miniGame/Program.cs
Normal file
@ -0,0 +1,27 @@
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddControllersWithViews();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Home/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseHttpsRedirection();
|
||||
app.UseStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||
|
||||
app.Run();
|
||||
38
src/iyixiGames.miniGame/Properties/launchSettings.json
Normal file
38
src/iyixiGames.miniGame/Properties/launchSettings.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:49172",
|
||||
"sslPort": 44388
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5292",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7253;http://localhost:5292",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace iyixiGames.miniGame.ViewComponents;
|
||||
|
||||
public class AdSittingViewComponent : ViewComponent
|
||||
{
|
||||
public async Task<IViewComponentResult> InvokeAsync(string routStr)
|
||||
{
|
||||
switch (routStr)
|
||||
{
|
||||
case "Head":
|
||||
var adSitting = new List<string>
|
||||
{
|
||||
"head",
|
||||
"ca-pub-9479337834161326"
|
||||
};
|
||||
return View(routStr, adSitting);
|
||||
case "Body":
|
||||
adSitting = new List<string>
|
||||
{
|
||||
"body",
|
||||
"<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9479337834161326"\n crossorigin="anonymous"></script>\n<!-- hf_001 -->\n<ins class="adsbygoogle"\n style="display:block"\n data-ad-client="ca-pub-9479337834161326"\n data-ad-slot="1367425129"\n data-ad-format="auto"\n data-full-width-responsive="true"></ins>\n<script>\n (adsbygoogle = window.adsbygoogle || []).push({});\n</script>"
|
||||
};
|
||||
return View(routStr, adSitting);
|
||||
case "List":
|
||||
adSitting = new List<string>
|
||||
{
|
||||
"list",
|
||||
""
|
||||
};
|
||||
return View(routStr, adSitting);
|
||||
case "Footer":
|
||||
adSitting = new List<string>
|
||||
{
|
||||
"footer",
|
||||
""
|
||||
};
|
||||
return View(routStr, adSitting);
|
||||
default:
|
||||
return View();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace iyixiGames.miniGame.ViewComponents;
|
||||
|
||||
public class NavigationMenuViewComponent : ViewComponent
|
||||
{
|
||||
public async Task<IViewComponentResult> InvokeAsync()
|
||||
{
|
||||
// 这里可以从数据库、服务等获取数据
|
||||
var menuItems = new List<string> { "Home", "Products", "About", "Contact" };
|
||||
return View(menuItems); // 将数据传递给视图组件的默认视图
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
using iyixiGames.Domain.DTOs.Seo;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace iyixiGames.miniGame.ViewComponents;
|
||||
|
||||
public class NavigationSEOViewComponent : ViewComponent
|
||||
{
|
||||
public async Task<IViewComponentResult> InvokeAsync()
|
||||
{
|
||||
var seoModel = new SeoDTOs()
|
||||
{
|
||||
Description = "iyixiGames.miniGame",
|
||||
Keywords = "iyixiGames.miniGame",
|
||||
Title = "iyixiGames.miniGame",
|
||||
Canonical = "https://iyixiGames.com",
|
||||
Alternate = new List<HreFlangDTOs>()
|
||||
{
|
||||
new HreFlangDTOs()
|
||||
{
|
||||
Href = "https://iyixiGames.com",
|
||||
Lang = "en"
|
||||
}
|
||||
},
|
||||
OgTitle = "iyixiGames.miniGame",
|
||||
OgDescription = "iyixiGames.miniGame",
|
||||
OgType = "website",
|
||||
OgUrl = "https://iyixiGames.com",
|
||||
OgImage = "https://iyixiGames.com/images/logo.png",
|
||||
OgLocale = "en_US",
|
||||
OgSiteName = "iyixiGames.miniGame",
|
||||
TwitterCard = "summary",
|
||||
TwitterSite = "@iyixiGames",
|
||||
TwitterCreator = "@iyixiGames",
|
||||
TwitterTitle = "iyixiGames.miniGame",
|
||||
TwitterDescription = "iyixiGames.miniGame",
|
||||
TwitterImage = "https://iyixiGames.com/images/logo.png",
|
||||
TwitterImageAlt = "iyixiGames.miniGame",
|
||||
Icon = "https://iyixiGames.com/images/logo.png",
|
||||
ShortIcon = "https://iyixiGames.com/images/logo.png",
|
||||
};
|
||||
return View(seoModel);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
96
src/iyixiGames.miniGame/Views/Games/Details.cshtml
Normal file
96
src/iyixiGames.miniGame/Views/Games/Details.cshtml
Normal file
@ -0,0 +1,96 @@
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Games";
|
||||
}
|
||||
|
||||
<main class="detail-page">
|
||||
<div class="container">
|
||||
<div class="game-header">
|
||||
<img src="/images/games/game1.png" alt="太空冒险" class="game-logo-large">
|
||||
<div class="game-header-info">
|
||||
<h1>太空冒险</h1>
|
||||
<div class="game-meta-large">
|
||||
<span class="rating">4.8 ★ (1,245 评价)</span>
|
||||
<span class="popularity">🔥 12.5k 玩家</span>
|
||||
<span class="category">动作 / 冒险</span>
|
||||
</div>
|
||||
<div class="game-meta-large">
|
||||
<a class="btn-play" asp-area="" asp-controller="Games" asp-action="PlayGame" asp-route-id="123">="">立即游玩</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="game-content">
|
||||
<div class="game-description">
|
||||
<h2>游戏介绍</h2>
|
||||
<p>《太空冒险》是一款激动人心的动作冒险游戏,玩家将扮演一名太空探险家,在浩瀚宇宙中探索未知星球,与外星生物战斗,收集稀有资源,升级你的飞船装备。</p>
|
||||
<p>游戏特点:</p>
|
||||
<ul>
|
||||
<li>超过50个独特的星球可供探索</li>
|
||||
<li>多种外星生物和Boss战斗</li>
|
||||
<li>丰富的飞船升级系统</li>
|
||||
<li>精美的太空场景和特效</li>
|
||||
<li>支持单人模式和多人合作模式</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="game-screenshots">
|
||||
<h2>游戏截图</h2>
|
||||
<div class="screenshots-grid">
|
||||
<img src="/images/games/game1/screenshot1.jpg" alt="截图1">
|
||||
<img src="/images/games/game1/screenshot2.jpg" alt="截图2">
|
||||
<img src="/images/games/game1/screenshot3.jpg" alt="截图3">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="game-reviews">
|
||||
<h2>玩家评价</h2>
|
||||
<div class="review-form">
|
||||
<h3>发表评价</h3>
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="review-rating">评分</label>
|
||||
<select id="review-rating">
|
||||
<option value="5">5 ★</option>
|
||||
<option value="4">4 ★</option>
|
||||
<option value="3">3 ★</option>
|
||||
<option value="2">2 ★</option>
|
||||
<option value="1">1 ★</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="review-content">评价内容</label>
|
||||
<textarea id="review-content" rows="4"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn-submit">提交评价</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="reviews-list">
|
||||
<div class="review-item">
|
||||
<div class="reviewer-info">
|
||||
<img src="/images/avatars/user1.jpg" alt="用户头像" class="reviewer-avatar">
|
||||
<div class="reviewer-name">太空探索者</div>
|
||||
<div class="review-rating">5 ★</div>
|
||||
</div>
|
||||
<div class="review-content">
|
||||
<p>这款游戏太棒了!画面精美,玩法丰富,我已经玩了20多个小时了,每次探索新星球都有惊喜。</p>
|
||||
<div class="review-date">2023-05-15</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="review-item">
|
||||
<div class="reviewer-info">
|
||||
<img src="/images/avatars/user2.jpg" alt="用户头像" class="reviewer-avatar">
|
||||
<div class="reviewer-name">星际旅人</div>
|
||||
<div class="review-rating">4 ★</div>
|
||||
</div>
|
||||
<div class="review-content">
|
||||
<p>游戏整体不错,但有些Boss战难度太高了,希望能调整平衡性。飞船升级系统很有深度。</p>
|
||||
<div class="review-date">2023-04-28</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
92
src/iyixiGames.miniGame/Views/Games/Index.cshtml
Normal file
92
src/iyixiGames.miniGame/Views/Games/Index.cshtml
Normal file
@ -0,0 +1,92 @@
|
||||
|
||||
@{
|
||||
ViewData["Title"] = "Games";
|
||||
}
|
||||
<main class="list-page">
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>所有游戏</h1>
|
||||
<div class="filter-controls">
|
||||
<select id="sort-by">
|
||||
<option value="popular">按热度排序</option>
|
||||
<option value="rating">按评分排序</option>
|
||||
<option value="newest">按最新排序</option>
|
||||
</select>
|
||||
<select id="filter-category">
|
||||
<option value="all">所有分类</option>
|
||||
<option value="action">动作游戏</option>
|
||||
<option value="puzzle">益智游戏</option>
|
||||
<option value="adventure">冒险游戏</option>
|
||||
<option value="sports">体育游戏</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="games-list">
|
||||
<div class="game-item">
|
||||
<a class="game-link" asp-area="" asp-controller="Games" asp-action="Details" asp-route-id="123">
|
||||
<img src="/images/games/game1.png" alt="太空冒险" class="game-list-logo">
|
||||
<div class="game-details">
|
||||
<h3>太空冒险</h3>
|
||||
<p class="game-description">在浩瀚宇宙中探索未知星球,与外星生物战斗。</p>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.8 ★</span>
|
||||
<span class="popularity">🔥 12.5k</span>
|
||||
<span class="category">动作</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<a href="/detail.html?id=game2" class="game-link">
|
||||
<img src="/images/games/game2.png" alt="宝石消除" class="game-list-logo">
|
||||
<div class="game-details">
|
||||
<h3>宝石消除</h3>
|
||||
<p class="game-description">匹配彩色宝石,创造连锁反应,获得高分!</p>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
<span class="category">益智</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<a href="/detail.html?id=game3" class="game-link">
|
||||
<img src="/images/games/game3.png" alt="赛车狂飙" class="game-list-logo">
|
||||
<div class="game-details">
|
||||
<h3>赛车狂飙</h3>
|
||||
<p class="game-description">在极限赛道上与其他车手一较高下。</p>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.7 ★</span>
|
||||
<span class="popularity">🔥 10.2k</span>
|
||||
<span class="category">体育</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-item">
|
||||
<a href="/detail.html?id=game4" class="game-link">
|
||||
<img src="/images/games/game4.png" alt="农场物语" class="game-list-logo">
|
||||
<div class="game-details">
|
||||
<h3>农场物语</h3>
|
||||
<p class="game-description">经营你的农场,种植作物,饲养动物。</p>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.3 ★</span>
|
||||
<span class="popularity">🔥 7.1k</span>
|
||||
<span class="category">模拟</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pagination">
|
||||
<a href="#" class="page-link active">1</a>
|
||||
<a href="#" class="page-link">2</a>
|
||||
<a href="#" class="page-link">3</a>
|
||||
<a href="#" class="page-link">4</a>
|
||||
<a href="#" class="page-link">下一页 »</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
16
src/iyixiGames.miniGame/Views/Games/PlayGame.cshtml
Normal file
16
src/iyixiGames.miniGame/Views/Games/PlayGame.cshtml
Normal file
@ -0,0 +1,16 @@
|
||||
@{
|
||||
ViewData["Title"] = "Games";
|
||||
}
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>title</title>
|
||||
</head>
|
||||
<body>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
196
src/iyixiGames.miniGame/Views/Home/Index.cshtml
Normal file
196
src/iyixiGames.miniGame/Views/Home/Index.cshtml
Normal file
@ -0,0 +1,196 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
}
|
||||
<main class="home-page">
|
||||
<section class="hero-banner">
|
||||
<div class="container">
|
||||
<h1>发现并玩最好的在线游戏</h1>
|
||||
<p>无需下载,点击即玩!</p>
|
||||
<a href="/list.html" class="btn">浏览游戏</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="featured-games">
|
||||
<div class="container">
|
||||
<h2 class="section-title">精选游戏</h2>
|
||||
<div class="games-grid">
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game1">
|
||||
<img src="/images/games/game1.png" alt="游戏1" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>太空冒险</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.8 ★</span>
|
||||
<span class="popularity">🔥 12.5k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game3">
|
||||
<img src="/images/games/game3.png" alt="游戏3" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>赛车狂飙</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.7 ★</span>
|
||||
<span class="popularity">🔥 10.2k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="games-grid">
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game1">
|
||||
<img src="/images/games/game1.png" alt="游戏1" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>太空冒险</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.8 ★</span>
|
||||
<span class="popularity">🔥 12.5k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game3">
|
||||
<img src="/images/games/game3.png" alt="游戏3" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>赛车狂飙</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.7 ★</span>
|
||||
<span class="popularity">🔥 10.2k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="games-grid">
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game1">
|
||||
<img src="/images/games/game1.png" alt="游戏1" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>太空冒险</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.8 ★</span>
|
||||
<span class="popularity">🔥 12.5k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game2">
|
||||
<img src="/images/games/game2.png" alt="游戏2" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>宝石消除</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.5 ★</span>
|
||||
<span class="popularity">🔥 8.7k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="game-card">
|
||||
<a href="/detail.html?id=game3">
|
||||
<img src="/images/games/game3.png" alt="游戏3" class="game-logo">
|
||||
<div class="game-info">
|
||||
<h3>赛车狂飙</h3>
|
||||
<div class="game-meta">
|
||||
<span class="rating">4.7 ★</span>
|
||||
<span class="popularity">🔥 10.2k</span>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="game-categories">
|
||||
<div class="container">
|
||||
<h2 class="section-title">游戏分类</h2>
|
||||
<div class="categories-grid">
|
||||
<a href="/list.html?category=action" class="category-card">
|
||||
<div class="category-icon">🎮</div>
|
||||
<h3>动作游戏</h3>
|
||||
</a>
|
||||
<a href="/list.html?category=puzzle" class="category-card">
|
||||
<div class="category-icon">🧩</div>
|
||||
<h3>益智游戏</h3>
|
||||
</a>
|
||||
<a href="/list.html?category=adventure" class="category-card">
|
||||
<div class="category-icon">🗺️</div>
|
||||
<h3>冒险游戏</h3>
|
||||
</a>
|
||||
<a href="/list.html?category=sports" class="category-card">
|
||||
<div class="category-icon">⚽</div>
|
||||
<h3>体育游戏</h3>
|
||||
</a>
|
||||
<a href="/list.html?category=sports" class="category-card">
|
||||
<div class="category-icon">✈️</div>
|
||||
<h3>射击游戏</h3>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
87
src/iyixiGames.miniGame/Views/Home/Privacy.cshtml
Normal file
87
src/iyixiGames.miniGame/Views/Home/Privacy.cshtml
Normal file
@ -0,0 +1,87 @@
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
}
|
||||
<div style="background: #ffffff;margin-top: 10px;padding: 20px 50px 20px 50px;">
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<div>
|
||||
<h1>隐私政策</h1>
|
||||
<p>本隐私政策解释了 [您的游戏/公司名称](以下简称“我们”、“我们的”)如何收集、使用、存储和披露用户(以下简称“您”)在使用我们的游戏 [您的游戏名称](以下简称“游戏”)以及相关服务时提供的信息。</p>
|
||||
<p>我们承诺保护您的隐私。请仔细阅读本政策,了解我们如何处理您的个人信息。</p>
|
||||
<p class="last-updated">最后更新日期:2025年7月16日</p>
|
||||
|
||||
<h2>1. 我们收集的信息</h2>
|
||||
<p>为了提供、改进和维护我们的游戏及服务,我们可能会收集以下类型的信息:</p>
|
||||
<h3>1.1 您直接提供的信息</h3>
|
||||
<ul>
|
||||
<li><strong>账户信息:</strong> 当您创建游戏账户时,我们可能收集您的用户名、密码、电子邮件地址、绑定的第三方账户信息(如Google、Facebook账户ID)。</li>
|
||||
<li><strong>客户支持信息:</strong> 当您与我们联系以获取支持时,您提供的任何信息,例如您的姓名、联系方式、问题描述等。</li>
|
||||
<li><strong>交易信息:</strong> 如果您进行游戏内购买,我们可能会收集支付提供商提供的交易ID,但通常不直接存储您的支付卡信息。</li>
|
||||
</ul>
|
||||
|
||||
<h3>1.2 自动收集的信息</h3>
|
||||
<ul>
|
||||
<li><strong>设备信息:</strong> 我们可能会收集有关您用于访问游戏的设备信息,包括设备型号、操作系统版本、唯一设备标识符(如IMEI、UDID)、IP地址、浏览器类型和语言设置。</li>
|
||||
<li><strong>使用数据:</strong> 我们会自动收集您如何使用游戏的信息,包括您的游戏进度、成就、游戏时长、功能使用情况、游戏内购买、崩溃报告和错误信息。</li>
|
||||
<li><strong>位置信息:</strong> 在您明确同意的情况下,我们可能收集粗略的位置信息(例如通过IP地址推断的城市级别位置),用于提供地区性服务或分析用户分布。</li>
|
||||
<li><strong>Cookie 和类似技术:</strong> 我们使用Cookie、像素标签和其他类似技术来收集信息,以改进您的游戏体验、提供个性化内容和广告(如果适用)、分析网站流量和使用模式。</li>
|
||||
</ul>
|
||||
|
||||
<h3>1.3 第三方来源的信息</h3>
|
||||
<ul>
|
||||
<li><strong>第三方平台:</strong> 如果您通过第三方平台(如Google Play、Apple App Store、Steam、Facebook)登录或链接您的游戏账户,我们可能会收到该平台共享的某些信息,具体取决于您在该平台的隐私设置。</li>
|
||||
<li><strong>广告和分析服务:</strong> 我们可能会使用第三方广告和分析服务,它们可能会收集和处理您的数据,以提供有针对性的广告和分析用户行为。</li>
|
||||
</ul>
|
||||
|
||||
<h2>2. 我们如何使用您的信息</h2>
|
||||
<p>我们收集您的信息主要用于以下目的:</p>
|
||||
<ul>
|
||||
<li><strong>提供和维护游戏:</strong> 运行游戏,管理您的账户,处理交易,提供客户支持。</li>
|
||||
<li><strong>改进游戏体验:</strong> 分析游戏使用情况,修复bug,开发新功能,优化游戏性能,提供个性化内容。</li>
|
||||
<li><strong>个性化服务:</strong> 根据您的游戏习惯和偏好提供定制化的内容和推荐。</li>
|
||||
<li><strong>营销和广告:</strong> 向您发送有关我们产品、服务、促销活动的信息,并可能通过第三方平台展示个性化广告。</li>
|
||||
<li><strong>安全与反作弊:</strong> 检测和防止欺诈、作弊行为和滥用服务。</li>
|
||||
<li><strong>分析和研究:</strong> 进行数据分析和研究,以了解用户行为和市场趋势。</li>
|
||||
<li><strong>法律合规:</strong> 遵守适用的法律法规,响应法律要求,保护我们的权利和利益。</li>
|
||||
</ul>
|
||||
|
||||
<h2>3. 信息分享与披露</h2>
|
||||
<p>我们不会向无关的第三方出售您的个人信息。我们可能在以下情况下分享或披露您的信息:</p>
|
||||
<ul>
|
||||
<li><strong>服务提供商:</strong> 我们可能与协助我们提供服务的第三方合作,如支付处理商、云服务提供商、数据分析服务、广告合作伙伴等。这些服务提供商仅在必要范围内访问您的信息,并受合同义务约束,以保护您的数据安全。</li>
|
||||
<li><strong>业务转移:</strong> 在合并、收购、资产出售等业务交易中,您的信息可能作为资产的一部分被转移。</li>
|
||||
<li><strong>法律要求和执法:</strong> 当法律要求、法院命令或政府机构提出合理要求时,我们可能披露您的信息。</li>
|
||||
<li><strong>保护我们的权利:</strong> 为保护我们的权利、财产或安全,以及我们的用户或公众的权利、财产或安全,我们可能披露您的信息。</li>
|
||||
<li><strong>您的同意:</strong> 在您明确同意的情况下,我们可能与第三方分享您的信息。</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. 您的权利</h2>
|
||||
<p>根据适用的数据保护法律,您可能拥有以下权利:</p>
|
||||
<ul>
|
||||
<li><strong>访问权:</strong> 您有权请求访问我们持有的关于您的个人信息。</li>
|
||||
<li><strong>更正权:</strong> 您有权要求更正不准确或不完整的个人信息。</li>
|
||||
<li><strong>删除权:</strong> 在某些情况下,您有权要求删除您的个人信息。</li>
|
||||
<li><strong>限制处理权:</strong> 在某些情况下,您有权限制我们处理您的个人信息。</li>
|
||||
<li><strong>数据可移植权:</strong> 您有权以结构化、常用且机器可读的格式接收您提供给我们的个人信息。</li>
|
||||
<li><strong>反对权:</strong> 您有权反对我们处理您的个人信息,特别是用于直接营销目的。</li>
|
||||
<li><strong>撤回同意权:</strong> 如果我们依赖您的同意处理您的信息,您有权随时撤回该同意,但这不影响撤回前处理的合法性。</li>
|
||||
</ul>
|
||||
<p>如需行使您的权利,请通过本政策末尾提供的联系方式与我们联系。我们可能会在处理您的请求前验证您的身份。</p>
|
||||
|
||||
<h2>5. 数据安全</h2>
|
||||
<p>我们采取合理的物理、技术和管理措施来保护您的信息免受未经授权的访问、使用、披露、更改或破坏。然而,没有任何互联网传输或电子存储方法是100%安全的,因此我们无法保证绝对安全。</p>
|
||||
|
||||
<h2>6. 儿童隐私</h2>
|
||||
<p>我们的游戏不针对13岁以下的儿童(或根据您所在司法管辖区法律规定的其他年龄)。我们不会在知情的情况下收集13岁以下儿童的个人信息。如果我们发现我们无意中收集了儿童的个人信息,我们将采取合理措施尽快删除这些信息。</p>
|
||||
<p>如果您的孩子向我们提供了个人信息,并且您希望删除这些信息,请通过以下方式联系我们。</p>
|
||||
|
||||
<h2>7. 政策变更</h2>
|
||||
<p>我们可能会不时更新本隐私政策。任何变更将在本页面上发布新的隐私政策。我们建议您定期查看本政策以了解最新信息。本隐私政策的任何变更在发布到本页面时即生效。</p>
|
||||
|
||||
<h2>8. 联系我们</h2>
|
||||
<p>如果您对本隐私政策有任何疑问或疑虑,请通过以下方式联系我们:</p>
|
||||
<ul>
|
||||
<li>电子邮件:[您的支持邮箱地址,例如: support@yourgame.com]</li>
|
||||
<li>邮寄地址:[您的公司地址(可选)]</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -0,0 +1,6 @@
|
||||
@model List<string>
|
||||
|
||||
@if (Model[0] == "body")
|
||||
{
|
||||
@Model[1]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
@model List<string>
|
||||
|
||||
<p style="color: #f65e3b">哈哈哈</p>
|
||||
@ -0,0 +1,6 @@
|
||||
@model List<string>
|
||||
|
||||
@if (Model[0] == "footer")
|
||||
{
|
||||
@Model[1]
|
||||
}
|
||||
@ -0,0 +1,8 @@
|
||||
@model iyixiGames.Domain.DTOs.AdSitting.GoogleDTOs
|
||||
|
||||
@if (Model.AutoAdIsOpen == 1)
|
||||
{
|
||||
//@Model[1]
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=@Model.AutoAd"
|
||||
crossorigin="anonymous"></script>
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
@model List<string>
|
||||
|
||||
@if (Model[0] == "list")
|
||||
{
|
||||
@Model[1]
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
@model List<string>
|
||||
<ul class="nav">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<li><a href="#">@item</a></li>
|
||||
}
|
||||
</ul>
|
||||
@ -0,0 +1,40 @@
|
||||
@model iyixiGames.Domain.DTOs.Seo.SeoDTOs
|
||||
|
||||
<meta name="description" content="@Model.Description">
|
||||
|
||||
<meta name="keywords" content="@Model.Keywords">
|
||||
|
||||
<link rel="canonical" href="@Model.Canonical">
|
||||
|
||||
@if (Model.Alternate != null)
|
||||
{
|
||||
foreach (var item in Model.Alternate)
|
||||
{
|
||||
<link rel="alternate" href="@item.Href" hreflang="@item.Lang"/>
|
||||
}
|
||||
}
|
||||
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/zh-cn/index.html" hreflang="zh-cn"/> *@
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/en/index.html" hreflang="en"/> *@
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/zh-tw/index.html" hreflang="zh-tw"/> *@
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/ru/index.html" hreflang="ru"/> *@
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/es/index.html" hreflang="es"/> *@
|
||||
@* <link rel="alternate" href="https://www.yourgame.com/en/index.html" hreflang="x-default"/> *@
|
||||
|
||||
<meta property="og:title" content="@Model.OgTitle"/>
|
||||
<meta property="og:description" content="@Model.OgDescription"/>
|
||||
<meta property="og:type" content="@Model.OgType"/>
|
||||
<meta property="og:url" content="@Model.OgUrl"/>
|
||||
<meta property="og:image" content="@Model.OgImage"/>
|
||||
<meta property="og:locale" content="@Model.OgLocale"/>
|
||||
<meta property="og:site_name" content="@Model.OgSiteName"/>
|
||||
|
||||
<meta name="twitter:card" content="@Model.TwitterCard"/>
|
||||
<meta name="twitter:site" content="@Model.TwitterSite"/>
|
||||
<meta name="twitter:title" content="@Model.TwitterTitle"/>
|
||||
<meta name="twitter:description" content="@Model.TwitterDescription"/>
|
||||
<meta name="twitter:image" content="@Model.TwitterImage"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link rel="icon" href="@Model.Icon" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="@Model.ShortIcon" type="image/x-icon">
|
||||
25
src/iyixiGames.miniGame/Views/Shared/Error.cshtml
Normal file
25
src/iyixiGames.miniGame/Views/Shared/Error.cshtml
Normal file
@ -0,0 +1,25 @@
|
||||
@model iyixiGames.miniGame.Models.ErrorViewModel
|
||||
@{
|
||||
ViewData["Title"] = "Error";
|
||||
}
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (Model.ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@Model.RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
||||
85
src/iyixiGames.miniGame/Views/Shared/_Layout.cshtml
Normal file
85
src/iyixiGames.miniGame/Views/Shared/_Layout.cshtml
Normal file
@ -0,0 +1,85 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
@await Component.InvokeAsync("NavigationSEO")
|
||||
<title>@ViewData["Title"] - 游戏天堂 - 发现并玩最好的在线游戏</title>
|
||||
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
|
||||
<link rel="stylesheet" href="~/iyixiGames.miniGame.styles.css" asp-append-version="true"/>
|
||||
<link rel="stylesheet" href="/css/style.css">
|
||||
<link rel="stylesheet" href="/css/theme.css">
|
||||
<link rel="shortcut icon" href="/images/logo.png" type="image/png">
|
||||
@await Component.InvokeAsync("AdSitting", "Head")
|
||||
</head>
|
||||
<body>
|
||||
@await Component.InvokeAsync("AdSitting", "Body")
|
||||
<header class="site-header">
|
||||
<div class="container">
|
||||
<div class="logo">
|
||||
<a href="/">
|
||||
<img src="/images/logo.png" alt="游戏天堂">
|
||||
</a>
|
||||
</div>
|
||||
<nav class="main-nav">
|
||||
<ul>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
|
||||
<li><a asp-area="" asp-controller="Games" asp-action="Index">All Games</a></li>
|
||||
<li><a href="#">分类</a></li>
|
||||
<li><a href="#">排行榜</a></li>
|
||||
@await Component.InvokeAsync("NavigationMenu")
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="search-box">
|
||||
<input type="text" placeholder="搜索游戏...">
|
||||
<button>搜索</button>
|
||||
</div>
|
||||
<div class="mobile-menu-toggle">
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
<main role="main" class="pb-3">
|
||||
@RenderBody()
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<div class="footer-columns">
|
||||
<div class="footer-column">
|
||||
<h3>关于我们</h3>
|
||||
<p>游戏天堂致力于为玩家提供最好的HTML5游戏体验,所有游戏均可直接在浏览器中运行。</p>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h3>快速链接</h3>
|
||||
<ul>
|
||||
<li><a href="/">首页</a></li>
|
||||
<li><a href="/list.html">游戏列表</a></li>
|
||||
<li><a href="#">热门游戏</a></li>
|
||||
<li><a href="#">新游戏</a></li>
|
||||
<li><a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="footer-column">
|
||||
<h3>联系我们</h3>
|
||||
<p>邮箱: contact@gametopia.com</p>
|
||||
<p>电话: 400-123-4567</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="copyright">
|
||||
<p>© 2023 游戏天堂. 保留所有权利.</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="/js/script.js"></script>
|
||||
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||
@await RenderSectionAsync("Scripts", required: false)
|
||||
</body>
|
||||
</html>
|
||||
48
src/iyixiGames.miniGame/Views/Shared/_Layout.cshtml.css
Normal file
48
src/iyixiGames.miniGame/Views/Shared/_Layout.cshtml.css
Normal file
@ -0,0 +1,48 @@
|
||||
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||
for details on configuring this project to bundle and minify static web assets. */
|
||||
|
||||
a.navbar-brand {
|
||||
white-space: normal;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0077cc;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
|
||||
color: #fff;
|
||||
background-color: #1b6ec2;
|
||||
border-color: #1861ac;
|
||||
}
|
||||
|
||||
.border-top {
|
||||
border-top: 1px solid #e5e5e5;
|
||||
}
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
|
||||
.box-shadow {
|
||||
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
|
||||
}
|
||||
|
||||
button.accept-policy {
|
||||
font-size: 1rem;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
line-height: 60px;
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
|
||||
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
|
||||
3
src/iyixiGames.miniGame/Views/_ViewImports.cshtml
Normal file
3
src/iyixiGames.miniGame/Views/_ViewImports.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@using iyixiGames.miniGame
|
||||
@using iyixiGames.miniGame.Models
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
3
src/iyixiGames.miniGame/Views/_ViewStart.cshtml
Normal file
3
src/iyixiGames.miniGame/Views/_ViewStart.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = "_Layout";
|
||||
}
|
||||
8
src/iyixiGames.miniGame/appsettings.Development.json
Normal file
8
src/iyixiGames.miniGame/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
9
src/iyixiGames.miniGame/appsettings.json
Normal file
9
src/iyixiGames.miniGame/appsettings.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
13
src/iyixiGames.miniGame/iyixiGames.miniGame.csproj
Normal file
13
src/iyixiGames.miniGame/iyixiGames.miniGame.csproj
Normal file
@ -0,0 +1,13 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\iyixiGames.Domain\iyixiGames.Domain.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
37
src/iyixiGames.miniGame/wwwroot/css/playgame.css
Normal file
37
src/iyixiGames.miniGame/wwwroot/css/playgame.css
Normal file
@ -0,0 +1,37 @@
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
}
|
||||
|
||||
.game-container {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
.back-button {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
left: 20px;
|
||||
z-index: 1000;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border-radius: 4px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.back-button:hover {
|
||||
background-color: rgba(0, 0, 0, 0.9);
|
||||
transform: translateX(-5px);
|
||||
}
|
||||
|
||||
#game-frame {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border: none;
|
||||
}
|
||||
22
src/iyixiGames.miniGame/wwwroot/css/site.css
Normal file
22
src/iyixiGames.miniGame/wwwroot/css/site.css
Normal file
@ -0,0 +1,22 @@
|
||||
html {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
|
||||
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
|
||||
}
|
||||
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
676
src/iyixiGames.miniGame/wwwroot/css/style.css
Normal file
676
src/iyixiGames.miniGame/wwwroot/css/style.css
Normal file
@ -0,0 +1,676 @@
|
||||
/* 基础样式 */
|
||||
:root {
|
||||
--primary-color: #3498db;
|
||||
--secondary-color: #2ecc71;
|
||||
--dark-color: #2c3e50;
|
||||
--light-color: #ecf0f1;
|
||||
--text-color: #333;
|
||||
--text-light: #7f8c8d;
|
||||
--border-radius: 5px;
|
||||
--box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
line-height: 1.6;
|
||||
color: var(--text-color);
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
border-radius: var(--border-radius);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
background-color: #2980b9;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* 头部样式 */
|
||||
.site-header {
|
||||
background-color: white;
|
||||
box-shadow: var(--box-shadow);
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.site-header .container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 15px 0;
|
||||
}
|
||||
.logo{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-left: 1em;
|
||||
}
|
||||
.logo img {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.main-nav ul {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.main-nav li {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.main-nav a {
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.main-nav a:hover {
|
||||
color: var(--primary-color);
|
||||
}
|
||||
|
||||
.search-box {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.search-box input {
|
||||
padding: 8px 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: var(--border-radius) 0 0 var(--border-radius);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.search-box button {
|
||||
padding: 8px 15px;
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
border: none;
|
||||
border-radius: 0 var(--border-radius) var(--border-radius) 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mobile-menu-toggle {
|
||||
display: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mobile-menu-toggle span {
|
||||
display: block;
|
||||
width: 25px;
|
||||
height: 3px;
|
||||
background-color: var(--text-color);
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
/* 页脚样式 */
|
||||
.site-footer {
|
||||
background-color: var(--dark-color);
|
||||
color: white;
|
||||
padding: 40px 0 20px;
|
||||
}
|
||||
|
||||
.footer-columns {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 30px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.footer-column h3 {
|
||||
margin-bottom: 20px;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.footer-column ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.footer-column li {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.footer-column a {
|
||||
color: var(--light-color);
|
||||
}
|
||||
|
||||
.footer-column a:hover {
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
|
||||
.copyright {
|
||||
text-align: center;
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
/* 首页样式 */
|
||||
.hero-banner {
|
||||
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
|
||||
color: white;
|
||||
text-align: center;
|
||||
padding: 80px 0;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.hero-banner h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.hero-banner p {
|
||||
font-size: 1.2rem;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
font-size: 1.8rem;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title:after {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 60px;
|
||||
height: 3px;
|
||||
background-color: var(--primary-color);
|
||||
margin: 15px auto;
|
||||
}
|
||||
|
||||
.games-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
||||
gap: 20px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.game-card {
|
||||
background-color: white;
|
||||
border-radius: var(--border-radius);
|
||||
overflow: hidden;
|
||||
box-shadow: var(--box-shadow);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.game-card:hover {
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
.game-list-logo {
|
||||
width: 180px;
|
||||
/*height: 150px;*/
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.game-info {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.game-info h3 {
|
||||
margin-bottom: 10px;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.game-meta {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 0.9rem;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
.categories-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||
gap: 20px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.category-card {
|
||||
background-color: white;
|
||||
border-radius: var(--border-radius);
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
box-shadow: var(--box-shadow);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.category-card:hover {
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
transform: translateY(-5px);
|
||||
}
|
||||
|
||||
.category-icon {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
/* 列表页样式 */
|
||||
.list-page {
|
||||
padding: 40px 0;
|
||||
}
|
||||
|
||||
.page-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.filter-controls select {
|
||||
padding: 8px 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: var(--border-radius);
|
||||
margin-left: 10px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.games-list {
|
||||
background-color: white;
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: var(--box-shadow);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.game-item {
|
||||
border-bottom: 1px solid #eee;
|
||||
padding: 15px;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.game-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.game-item:hover {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
||||
.game-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.game-logo {
|
||||
/*width: 80px;*/
|
||||
/*height: 160px;*/
|
||||
object-fit: cover;
|
||||
border-radius: var(--border-radius);
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.game-details {
|
||||
/*flex: 1;*/
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items:flex-start;
|
||||
justify-content: center;
|
||||
padding: 40px 10px;
|
||||
}
|
||||
|
||||
.game-description {
|
||||
color: var(--text-light);
|
||||
font-size: 0.9rem;
|
||||
margin: 5px 0;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.game-meta {
|
||||
display: flex;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.game-meta span {
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.category {
|
||||
background-color: #f0f0f0;
|
||||
padding: 2px 8px;
|
||||
border-radius: 3px;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.pagination {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.page-link {
|
||||
display: inline-block;
|
||||
padding: 8px 15px;
|
||||
margin: 0 5px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: var(--border-radius);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.page-link:hover, .page-link.active {
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
border-color: var(--primary-color);
|
||||
}
|
||||
|
||||
/* 详情页样式 */
|
||||
.detail-page {
|
||||
padding: 40px 0;
|
||||
}
|
||||
|
||||
.game-header {
|
||||
display: flex;
|
||||
margin-bottom: 40px;
|
||||
background-color: white;
|
||||
padding: 20px;
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: var(--box-shadow);
|
||||
}
|
||||
|
||||
.game-logo-large {
|
||||
/*width: 200px;*/
|
||||
height: 300px;
|
||||
object-fit: cover;
|
||||
border-radius: var(--border-radius);
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
.game-header-info {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.game-header-info h1 {
|
||||
font-size: 2rem;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.game-meta-large {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
height: auto;
|
||||
margin-bottom: 20px;
|
||||
color: var(--text-light);
|
||||
}
|
||||
|
||||
.game-meta-large span {
|
||||
/*width: 50%;*/
|
||||
padding: 10px;
|
||||
/*float: left;*/
|
||||
/*margin-right: 20px;*/
|
||||
}
|
||||
|
||||
.btn-play {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
padding: 12px 25px;
|
||||
background-color: var(--secondary-color);
|
||||
color: white;
|
||||
font-size: 1.1rem;
|
||||
border-radius: var(--border-radius);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.btn-play:hover {
|
||||
background-color: #27ae60;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
.game-content {
|
||||
background-color: white;
|
||||
padding: 30px;
|
||||
border-radius: var(--border-radius);
|
||||
box-shadow: var(--box-shadow);
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.game-description h2, .game-screenshots h2, .game-reviews h2 {
|
||||
margin-bottom: 20px;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.game-description p {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.game-description ul {
|
||||
margin-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.screenshots-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||
gap: 15px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.screenshots-grid img {
|
||||
border-radius: var(--border-radius);
|
||||
transition: transform 0.3s ease;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.screenshots-grid img:hover {
|
||||
transform: scale(1.02);
|
||||
}
|
||||
|
||||
.review-form {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
border-radius: var(--border-radius);
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.review-form h3 {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.form-group label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.form-group select, .form-group textarea {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: var(--border-radius);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.btn-submit {
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 10px 20px;
|
||||
border-radius: var(--border-radius);
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
|
||||
.btn-submit:hover {
|
||||
background-color: #2980b9;
|
||||
}
|
||||
|
||||
.reviews-list {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.review-item {
|
||||
display: flex;
|
||||
padding: 20px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.review-item:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.reviewer-info {
|
||||
width: 150px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.reviewer-avatar {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.reviewer-name {
|
||||
font-weight: 500;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.review-rating {
|
||||
color: #f39c12;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.review-content {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.review-date {
|
||||
color: var(--text-light);
|
||||
font-size: 0.8rem;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* 响应式设计 */
|
||||
@media (max-width: 992px) {
|
||||
.game-header {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.game-logo-large {
|
||||
margin-right: 0;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.site-header .container {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.main-nav {
|
||||
display: none;
|
||||
width: 100%;
|
||||
order: 3;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.main-nav.active {
|
||||
padding-left: 5px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.main-nav ul {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.main-nav li {
|
||||
margin-left: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mobile-menu-toggle {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.search-box {
|
||||
order: 2;
|
||||
/*width: 50%;*/
|
||||
/*margin-top: 15px;*/
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.review-item {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.reviewer-info {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.reviewer-avatar {
|
||||
margin-right: 15px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 576px) {
|
||||
.hero-banner {
|
||||
padding: 60px 0;
|
||||
}
|
||||
|
||||
.hero-banner h1 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.filter-controls {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.filter-controls select {
|
||||
margin-left: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.game-link {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.game-logo {
|
||||
margin-right: 0;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
39
src/iyixiGames.miniGame/wwwroot/css/theme-dark.css
Normal file
39
src/iyixiGames.miniGame/wwwroot/css/theme-dark.css
Normal file
@ -0,0 +1,39 @@
|
||||
:root {
|
||||
--primary-color: #3498db;
|
||||
--secondary-color: #2ecc71;
|
||||
--dark-color: #1a1a1a;
|
||||
--light-color: #2d2d2d;
|
||||
--danger-color: #e74c3c;
|
||||
--warning-color: #f39c12;
|
||||
--success-color: #27ae60;
|
||||
--text-color: #f5f5f5;
|
||||
--text-light: #b3b3b3;
|
||||
--bg-color: #121212;
|
||||
--border-color: #333;
|
||||
}
|
||||
|
||||
.main-header {
|
||||
background-color: var(--dark-color);
|
||||
border-bottom: 1px solid #333;
|
||||
}
|
||||
|
||||
.main-footer {
|
||||
background-color: var(--dark-color);
|
||||
border-top: 1px solid #333;
|
||||
}
|
||||
|
||||
.game-card,
|
||||
.category-card,
|
||||
.add-comment {
|
||||
background-color: var(--light-color);
|
||||
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.tab-header {
|
||||
border-bottom-color: var(--border-color);
|
||||
}
|
||||
|
||||
.features-list li,
|
||||
.comment-item {
|
||||
border-bottom-color: var(--border-color);
|
||||
}
|
||||
21
src/iyixiGames.miniGame/wwwroot/css/theme-default.css
Normal file
21
src/iyixiGames.miniGame/wwwroot/css/theme-default.css
Normal file
@ -0,0 +1,21 @@
|
||||
:root {
|
||||
--primary-color: #3498db;
|
||||
--secondary-color: #2ecc71;
|
||||
--dark-color: #2c3e50;
|
||||
--light-color: #ecf0f1;
|
||||
--danger-color: #e74c3c;
|
||||
--warning-color: #f39c12;
|
||||
--success-color: #27ae60;
|
||||
--text-color: #333;
|
||||
--text-light: #7f8c8d;
|
||||
--bg-color: #fff;
|
||||
--border-color: #ddd;
|
||||
}
|
||||
|
||||
.main-header {
|
||||
background-color: var(--dark-color);
|
||||
}
|
||||
|
||||
.main-footer {
|
||||
background-color: var(--dark-color);
|
||||
}
|
||||
45
src/iyixiGames.miniGame/wwwroot/css/theme.css
Normal file
45
src/iyixiGames.miniGame/wwwroot/css/theme.css
Normal file
@ -0,0 +1,45 @@
|
||||
/* 默认主题 - 蓝色 */
|
||||
:root {
|
||||
--primary-color: #3498db;
|
||||
--secondary-color: #2ecc71;
|
||||
--dark-color: #2c3e50;
|
||||
--light-color: #ecf0f1;
|
||||
}
|
||||
|
||||
/* 可以添加其他主题类 */
|
||||
.theme-red {
|
||||
--primary-color: #e74c3c;
|
||||
--secondary-color: #f39c12;
|
||||
--dark-color: #c0392b;
|
||||
}
|
||||
|
||||
.theme-purple {
|
||||
--primary-color: #9b59b6;
|
||||
--secondary-color: #8e44ad;
|
||||
--dark-color: #6c3483;
|
||||
}
|
||||
|
||||
.theme-dark {
|
||||
--primary-color: #3498db;
|
||||
--secondary-color: #2ecc71;
|
||||
--dark-color: #1a1a1a;
|
||||
--light-color: #333;
|
||||
--text-color: #f5f5f5;
|
||||
background-color: #222;
|
||||
}
|
||||
|
||||
.theme-dark .game-card,
|
||||
.theme-dark .category-card,
|
||||
.theme-dark .games-list,
|
||||
.theme-dark .game-item,
|
||||
.theme-dark .game-header,
|
||||
.theme-dark .game-content {
|
||||
background-color: #333;
|
||||
color: #f5f5f5;
|
||||
}
|
||||
|
||||
.theme-dark .game-description,
|
||||
.theme-dark .game-meta,
|
||||
.theme-dark .review-date {
|
||||
color: #bbb;
|
||||
}
|
||||
BIN
src/iyixiGames.miniGame/wwwroot/favicon.ico
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
34
src/iyixiGames.miniGame/wwwroot/games/game1/game.css
Normal file
34
src/iyixiGames.miniGame/wwwroot/games/game1/game.css
Normal file
@ -0,0 +1,34 @@
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
.game-container {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
#gameCanvas {
|
||||
background-color: #111;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.game-ui {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
color: white;
|
||||
font-size: 18px;
|
||||
font-family: 'Arial', sans-serif;
|
||||
}
|
||||
|
||||
.score, .lives {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
195
src/iyixiGames.miniGame/wwwroot/games/game1/game.js
Normal file
195
src/iyixiGames.miniGame/wwwroot/games/game1/game.js
Normal file
@ -0,0 +1,195 @@
|
||||
// 简单的太空射击游戏示例
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const canvas = document.getElementById('gameCanvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
const scoreElement = document.getElementById('score');
|
||||
const livesElement = document.getElementById('lives');
|
||||
|
||||
// 设置画布大小
|
||||
canvas.width = 800;
|
||||
canvas.height = 600;
|
||||
|
||||
// 游戏状态
|
||||
let score = 0;
|
||||
let lives = 3;
|
||||
let gameOver = false;
|
||||
|
||||
// 玩家飞船
|
||||
const player = {
|
||||
x: canvas.width / 2 - 25,
|
||||
y: canvas.height - 60,
|
||||
width: 50,
|
||||
height: 50,
|
||||
speed: 5,
|
||||
color: '#3498db'
|
||||
};
|
||||
|
||||
// 子弹数组
|
||||
let bullets = [];
|
||||
|
||||
// 敌人数组
|
||||
let enemies = [];
|
||||
|
||||
// 控制状态
|
||||
const keys = {
|
||||
ArrowLeft: false,
|
||||
ArrowRight: false,
|
||||
ArrowUp: false,
|
||||
ArrowDown: false,
|
||||
Space: false
|
||||
};
|
||||
|
||||
// 键盘事件监听
|
||||
window.addEventListener('keydown', function(e) {
|
||||
if (keys.hasOwnProperty(e.code)) {
|
||||
keys[e.code] = true;
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener('keyup', function(e) {
|
||||
if (keys.hasOwnProperty(e.code)) {
|
||||
keys[e.code] = false;
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// 游戏主循环
|
||||
function gameLoop() {
|
||||
if (gameOver) return;
|
||||
|
||||
update();
|
||||
render();
|
||||
requestAnimationFrame(gameLoop);
|
||||
}
|
||||
|
||||
// 更新游戏状态
|
||||
function update() {
|
||||
// 移动玩家
|
||||
if (keys.ArrowLeft && player.x > 0) {
|
||||
player.x -= player.speed;
|
||||
}
|
||||
if (keys.ArrowRight && player.x < canvas.width - player.width) {
|
||||
player.x += player.speed;
|
||||
}
|
||||
if (keys.ArrowUp && player.y > 0) {
|
||||
player.y -= player.speed;
|
||||
}
|
||||
if (keys.ArrowDown && player.y < canvas.height - player.height) {
|
||||
player.y += player.speed;
|
||||
}
|
||||
|
||||
// 发射子弹
|
||||
if (keys.Space) {
|
||||
if (Math.random() < 0.1) { // 限制发射频率
|
||||
bullets.push({
|
||||
x: player.x + player.width / 2 - 2.5,
|
||||
y: player.y,
|
||||
width: 5,
|
||||
height: 15,
|
||||
speed: 7,
|
||||
color: '#e74c3c'
|
||||
});
|
||||
}
|
||||
keys.Space = false; // 防止连续发射
|
||||
}
|
||||
|
||||
// 更新子弹位置
|
||||
bullets.forEach((bullet, index) => {
|
||||
bullet.y -= bullet.speed;
|
||||
|
||||
// 移除超出屏幕的子弹
|
||||
if (bullet.y < 0) {
|
||||
bullets.splice(index, 1);
|
||||
}
|
||||
});
|
||||
|
||||
// 生成敌人
|
||||
if (Math.random() < 0.02) {
|
||||
enemies.push({
|
||||
x: Math.random() * (canvas.width - 30),
|
||||
y: -30,
|
||||
width: 30,
|
||||
height: 30,
|
||||
speed: 1 + Math.random() * 2,
|
||||
color: '#2ecc71'
|
||||
});
|
||||
}
|
||||
|
||||
// 更新敌人位置
|
||||
enemies.forEach((enemy, enemyIndex) => {
|
||||
enemy.y += enemy.speed;
|
||||
|
||||
// 检测敌人是否到达底部
|
||||
if (enemy.y > canvas.height) {
|
||||
enemies.splice(enemyIndex, 1);
|
||||
lives--;
|
||||
livesElement.textContent = lives;
|
||||
|
||||
if (lives <= 0) {
|
||||
gameOver = true;
|
||||
alert(`游戏结束!你的得分是: ${score}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 检测子弹与敌人碰撞
|
||||
bullets.forEach((bullet, bulletIndex) => {
|
||||
if (checkCollision(bullet, enemy)) {
|
||||
// 移除子弹和敌人
|
||||
bullets.splice(bulletIndex, 1);
|
||||
enemies.splice(enemyIndex, 1);
|
||||
|
||||
// 增加分数
|
||||
score += 10;
|
||||
scoreElement.textContent = score;
|
||||
}
|
||||
});
|
||||
|
||||
// 检测玩家与敌人碰撞
|
||||
if (checkCollision(player, enemy)) {
|
||||
enemies.splice(enemyIndex, 1);
|
||||
lives--;
|
||||
livesElement.textContent = lives;
|
||||
|
||||
if (lives <= 0) {
|
||||
gameOver = true;
|
||||
alert(`游戏结束!你的得分是: ${score}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 渲染游戏
|
||||
function render() {
|
||||
// 清空画布
|
||||
ctx.fillStyle = '#2c3e50';
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
// 绘制玩家
|
||||
ctx.fillStyle = player.color;
|
||||
ctx.fillRect(player.x, player.y, player.width, player.height);
|
||||
|
||||
// 绘制子弹
|
||||
bullets.forEach(bullet => {
|
||||
ctx.fillStyle = bullet.color;
|
||||
ctx.fillRect(bullet.x, bullet.y, bullet.width, bullet.height);
|
||||
});
|
||||
|
||||
// 绘制敌人
|
||||
enemies.forEach(enemy => {
|
||||
ctx.fillStyle = enemy.color;
|
||||
ctx.fillRect(enemy.x, enemy.y, enemy.width, enemy.height);
|
||||
});
|
||||
}
|
||||
|
||||
// 碰撞检测
|
||||
function checkCollision(obj1, obj2) {
|
||||
return obj1.x < obj2.x + obj2.width &&
|
||||
obj1.x + obj1.width > obj2.x &&
|
||||
obj1.y < obj2.y + obj2.height &&
|
||||
obj1.y + obj1.height > obj2.y;
|
||||
}
|
||||
|
||||
// 开始游戏
|
||||
gameLoop();
|
||||
});
|
||||
208
src/iyixiGames.miniGame/wwwroot/games/game1/index.html
Normal file
208
src/iyixiGames.miniGame/wwwroot/games/game1/index.html
Normal file
@ -0,0 +1,208 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>太空冒险</title>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #000;
|
||||
overflow: hidden;
|
||||
}
|
||||
canvas {
|
||||
display: block;
|
||||
background: #000;
|
||||
margin: 0 auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="gameCanvas"></canvas>
|
||||
<script>
|
||||
const canvas = document.getElementById('gameCanvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
|
||||
// 设置画布大小为窗口大小
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
|
||||
// 游戏状态
|
||||
const gameState = {
|
||||
player: {
|
||||
x: canvas.width / 2,
|
||||
y: canvas.height / 2,
|
||||
size: 20,
|
||||
speed: 5,
|
||||
color: '#3498db'
|
||||
},
|
||||
stars: [],
|
||||
enemies: [],
|
||||
score: 0,
|
||||
gameOver: false
|
||||
};
|
||||
|
||||
// 初始化星星背景
|
||||
for (let i = 0; i < 100; i++) {
|
||||
gameState.stars.push({
|
||||
x: Math.random() * canvas.width,
|
||||
y: Math.random() * canvas.height,
|
||||
size: Math.random() * 2,
|
||||
speed: Math.random() * 2 + 1
|
||||
});
|
||||
}
|
||||
|
||||
// 游戏主循环
|
||||
function gameLoop() {
|
||||
if (gameState.gameOver) return;
|
||||
|
||||
// 清空画布
|
||||
ctx.fillStyle = 'black';
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
// 更新和绘制星星
|
||||
for (let star of gameState.stars) {
|
||||
star.y += star.speed;
|
||||
if (star.y > canvas.height) {
|
||||
star.y = 0;
|
||||
star.x = Math.random() * canvas.width;
|
||||
}
|
||||
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillRect(star.x, star.y, star.size, star.size);
|
||||
}
|
||||
|
||||
// 绘制玩家
|
||||
ctx.fillStyle = gameState.player.color;
|
||||
ctx.fillRect(
|
||||
gameState.player.x - gameState.player.size / 2,
|
||||
gameState.player.y - gameState.player.size / 2,
|
||||
gameState.player.size,
|
||||
gameState.player.size
|
||||
);
|
||||
|
||||
// 随机生成敌人
|
||||
if (Math.random() < 0.02) {
|
||||
gameState.enemies.push({
|
||||
x: Math.random() * canvas.width,
|
||||
y: -20,
|
||||
size: 15 + Math.random() * 15,
|
||||
speed: 2 + Math.random() * 3,
|
||||
color: `hsl(${Math.random() * 360}, 70%, 50%)`
|
||||
});
|
||||
}
|
||||
|
||||
// 更新和绘制敌人
|
||||
for (let i = gameState.enemies.length - 1; i >= 0; i--) {
|
||||
const enemy = gameState.enemies[i];
|
||||
enemy.y += enemy.speed;
|
||||
|
||||
// 检测碰撞
|
||||
const dx = gameState.player.x - enemy.x;
|
||||
const dy = gameState.player.y - enemy.y;
|
||||
const distance = Math.sqrt(dx * dx + dy * dy);
|
||||
|
||||
if (distance < (gameState.player.size + enemy.size) / 2) {
|
||||
gameState.gameOver = true;
|
||||
showGameOver();
|
||||
break;
|
||||
}
|
||||
|
||||
// 移除屏幕外的敌人
|
||||
if (enemy.y > canvas.height + enemy.size) {
|
||||
gameState.enemies.splice(i, 1);
|
||||
gameState.score++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 绘制敌人
|
||||
ctx.fillStyle = enemy.color;
|
||||
ctx.beginPath();
|
||||
ctx.arc(enemy.x, enemy.y, enemy.size / 2, 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
// 绘制分数
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.font = '20px Arial';
|
||||
ctx.fillText(`分数: ${gameState.score}`, 20, 30);
|
||||
|
||||
requestAnimationFrame(gameLoop);
|
||||
}
|
||||
|
||||
// 游戏结束显示
|
||||
function showGameOver() {
|
||||
ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.font = '40px Arial';
|
||||
ctx.textAlign = 'center';
|
||||
ctx.fillText('游戏结束', canvas.width / 2, canvas.height / 2 - 40);
|
||||
|
||||
ctx.font = '30px Arial';
|
||||
ctx.fillText(`最终分数: ${gameState.score}`, canvas.width / 2, canvas.height / 2 + 20);
|
||||
|
||||
ctx.font = '20px Arial';
|
||||
ctx.fillText('点击屏幕重新开始', canvas.width / 2, canvas.height / 2 + 70);
|
||||
|
||||
canvas.addEventListener('click', restartGame);
|
||||
}
|
||||
|
||||
// 重新开始游戏
|
||||
function restartGame() {
|
||||
gameState.player.x = canvas.width / 2;
|
||||
gameState.player.y = canvas.height / 2;
|
||||
gameState.enemies = [];
|
||||
gameState.score = 0;
|
||||
gameState.gameOver = false;
|
||||
|
||||
canvas.removeEventListener('click', restartGame);
|
||||
gameLoop();
|
||||
}
|
||||
|
||||
// 键盘控制
|
||||
const keys = {};
|
||||
window.addEventListener('keydown', (e) => {
|
||||
keys[e.key] = true;
|
||||
});
|
||||
|
||||
window.addEventListener('keyup', (e) => {
|
||||
keys[e.key] = false;
|
||||
});
|
||||
|
||||
// 更新玩家位置
|
||||
function updatePlayer() {
|
||||
if (keys['ArrowLeft'] || keys['a']) {
|
||||
gameState.player.x -= gameState.player.speed;
|
||||
}
|
||||
if (keys['ArrowRight'] || keys['d']) {
|
||||
gameState.player.x += gameState.player.speed;
|
||||
}
|
||||
if (keys['ArrowUp'] || keys['w']) {
|
||||
gameState.player.y -= gameState.player.speed;
|
||||
}
|
||||
if (keys['ArrowDown'] || keys['s']) {
|
||||
gameState.player.y += gameState.player.speed;
|
||||
}
|
||||
|
||||
// 边界检查
|
||||
gameState.player.x = Math.max(gameState.player.size / 2, Math.min(canvas.width - gameState.player.size / 2, gameState.player.x));
|
||||
gameState.player.y = Math.max(gameState.player.size / 2, Math.min(canvas.height - gameState.player.size / 2, gameState.player.y));
|
||||
|
||||
requestAnimationFrame(updatePlayer);
|
||||
}
|
||||
|
||||
// 窗口大小调整
|
||||
window.addEventListener('resize', () => {
|
||||
canvas.width = window.innerWidth;
|
||||
canvas.height = window.innerHeight;
|
||||
});
|
||||
|
||||
// 开始游戏
|
||||
updatePlayer();
|
||||
gameLoop();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
79
src/iyixiGames.miniGame/wwwroot/games/game2/game.css
Normal file
79
src/iyixiGames.miniGame/wwwroot/games/game2/game.css
Normal file
@ -0,0 +1,79 @@
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.game-container {
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #2c3e50;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.game-board {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
grid-gap: 10px;
|
||||
background-color: #bbada0;
|
||||
padding: 10px;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
background-color: #cdc1b4;
|
||||
height: 100px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 36px;
|
||||
font-weight: bold;
|
||||
color: #776e65;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.cell-2 { background-color: #eee4da; }
|
||||
.cell-4 { background-color: #ede0c8; }
|
||||
.cell-8 { background-color: #f2b179; color: white; }
|
||||
.cell-16 { background-color: #f59563; color: white; }
|
||||
.cell-32 { background-color: #f67c5f; color: white; }
|
||||
.cell-64 { background-color: #f65e3b; color: white; }
|
||||
.cell-128 { background-color: #edcf72; color: white; font-size: 30px; }
|
||||
.cell-256 { background-color: #edcc61; color: white; font-size: 30px; }
|
||||
.cell-512 { background-color: #edc850; color: white; font-size: 30px; }
|
||||
.cell-1024 { background-color: #edc53f; color: white; font-size: 24px; }
|
||||
.cell-2048 { background-color: #edc22e; color: white; font-size: 24px; }
|
||||
|
||||
.game-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.score {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
#restartBtn {
|
||||
background-color: #8f7a66;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 10px 20px;
|
||||
font-size: 16px;
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
transition: background-color 0.3s;
|
||||
}
|
||||
|
||||
#restartBtn:hover {
|
||||
background-color: #9f8b77;
|
||||
}
|
||||
272
src/iyixiGames.miniGame/wwwroot/games/game2/game.js
Normal file
272
src/iyixiGames.miniGame/wwwroot/games/game2/game.js
Normal file
@ -0,0 +1,272 @@
|
||||
// 简单的数字合并游戏示例
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const gameBoard = document.getElementById('gameBoard');
|
||||
const scoreElement = document.getElementById('score');
|
||||
const restartBtn = document.getElementById('restartBtn');
|
||||
|
||||
const BOARD_SIZE = 4;
|
||||
let board = [];
|
||||
let score = 0;
|
||||
|
||||
// 初始化游戏
|
||||
function initGame() {
|
||||
// 清空游戏板
|
||||
gameBoard.innerHTML = '';
|
||||
board = [];
|
||||
score = 0;
|
||||
scoreElement.textContent = score;
|
||||
|
||||
// 创建游戏板
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
board[i] = [];
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
board[i][j] = 0;
|
||||
|
||||
const cell = document.createElement('div');
|
||||
cell.className = 'cell';
|
||||
cell.dataset.row = i;
|
||||
cell.dataset.col = j;
|
||||
gameBoard.appendChild(cell);
|
||||
}
|
||||
}
|
||||
|
||||
// 添加初始数字
|
||||
addRandomNumber();
|
||||
addRandomNumber();
|
||||
|
||||
updateBoard();
|
||||
}
|
||||
|
||||
// 添加随机数字(2或4)
|
||||
function addRandomNumber() {
|
||||
const emptyCells = [];
|
||||
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
if (board[i][j] === 0) {
|
||||
emptyCells.push({i, j});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (emptyCells.length > 0) {
|
||||
const {i, j} = emptyCells[Math.floor(Math.random() * emptyCells.length)];
|
||||
board[i][j] = Math.random() < 0.9 ? 2 : 4;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新游戏板显示
|
||||
function updateBoard() {
|
||||
const cells = document.querySelectorAll('.cell');
|
||||
|
||||
cells.forEach(cell => {
|
||||
const row = parseInt(cell.dataset.row);
|
||||
const col = parseInt(cell.dataset.col);
|
||||
const value = board[row][col];
|
||||
|
||||
cell.textContent = value === 0 ? '' : value;
|
||||
cell.className = 'cell';
|
||||
|
||||
if (value > 0) {
|
||||
cell.classList.add(`cell-${value}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 移动数字
|
||||
function move(direction) {
|
||||
let moved = false;
|
||||
|
||||
// 根据方向处理移动
|
||||
switch (direction) {
|
||||
case 'up':
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
for (let i = 1; i < BOARD_SIZE; i++) {
|
||||
if (board[i][j] !== 0) {
|
||||
let k = i;
|
||||
while (k > 0 && board[k-1][j] === 0) {
|
||||
board[k-1][j] = board[k][j];
|
||||
board[k][j] = 0;
|
||||
k--;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
if (k > 0 && board[k-1][j] === board[k][j]) {
|
||||
board[k-1][j] *= 2;
|
||||
board[k][j] = 0;
|
||||
score += board[k-1][j];
|
||||
scoreElement.textContent = score;
|
||||
moved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'down':
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
for (let i = BOARD_SIZE - 2; i >= 0; i--) {
|
||||
if (board[i][j] !== 0) {
|
||||
let k = i;
|
||||
while (k < BOARD_SIZE - 1 && board[k+1][j] === 0) {
|
||||
board[k+1][j] = board[k][j];
|
||||
board[k][j] = 0;
|
||||
k++;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
if (k < BOARD_SIZE - 1 && board[k+1][j] === board[k][j]) {
|
||||
board[k+1][j] *= 2;
|
||||
board[k][j] = 0;
|
||||
score += board[k+1][j];
|
||||
scoreElement.textContent = score;
|
||||
moved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'left':
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
for (let j = 1; j < BOARD_SIZE; j++) {
|
||||
if (board[i][j] !== 0) {
|
||||
let k = j;
|
||||
while (k > 0 && board[i][k-1] === 0) {
|
||||
board[i][k-1] = board[i][k];
|
||||
board[i][k] = 0;
|
||||
k--;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
if (k > 0 && board[i][k-1] === board[i][k]) {
|
||||
board[i][k-1] *= 2;
|
||||
board[i][k] = 0;
|
||||
score += board[i][k-1];
|
||||
scoreElement.textContent = score;
|
||||
moved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'right':
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
for (let j = BOARD_SIZE - 2; j >= 0; j--) {
|
||||
if (board[i][j] !== 0) {
|
||||
let k = j;
|
||||
while (k < BOARD_SIZE - 1 && board[i][k+1] === 0) {
|
||||
board[i][k+1] = board[i][k];
|
||||
board[i][k] = 0;
|
||||
k++;
|
||||
moved = true;
|
||||
}
|
||||
|
||||
if (k < BOARD_SIZE - 1 && board[i][k+1] === board[i][k]) {
|
||||
board[i][k+1] *= 2;
|
||||
board[i][k] = 0;
|
||||
score += board[i][k+1];
|
||||
scoreElement.textContent = score;
|
||||
moved = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (moved) {
|
||||
addRandomNumber();
|
||||
updateBoard();
|
||||
|
||||
// 检查游戏是否结束
|
||||
if (isGameOver()) {
|
||||
setTimeout(() => {
|
||||
alert(`游戏结束!你的得分是: ${score}`);
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 检查游戏是否结束
|
||||
function isGameOver() {
|
||||
// 检查是否有空格
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
if (board[i][j] === 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否有可合并的相邻数字
|
||||
for (let i = 0; i < BOARD_SIZE; i++) {
|
||||
for (let j = 0; j < BOARD_SIZE; j++) {
|
||||
if (j < BOARD_SIZE - 1 && board[i][j] === board[i][j+1]) {
|
||||
return false;
|
||||
}
|
||||
if (i < BOARD_SIZE - 1 && board[i][j] === board[i+1][j]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 键盘控制
|
||||
document.addEventListener('keydown', function(e) {
|
||||
switch (e.key) {
|
||||
case 'ArrowUp':
|
||||
move('up');
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
move('down');
|
||||
break;
|
||||
case 'ArrowLeft':
|
||||
move('left');
|
||||
break;
|
||||
case 'ArrowRight':
|
||||
move('right');
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// 重新开始按钮
|
||||
restartBtn.addEventListener('click', initGame);
|
||||
|
||||
// 触摸滑动控制
|
||||
let touchStartX = 0;
|
||||
let touchStartY = 0;
|
||||
|
||||
gameBoard.addEventListener('touchstart', function(e) {
|
||||
touchStartX = e.touches[0].clientX;
|
||||
touchStartY = e.touches[0].clientY;
|
||||
}, false);
|
||||
|
||||
gameBoard.addEventListener('touchend', function(e) {
|
||||
const touchEndX = e.changedTouches[0].clientX;
|
||||
const touchEndY = e.changedTouches[0].clientY;
|
||||
|
||||
const dx = touchEndX - touchStartX;
|
||||
const dy = touchEndY - touchStartY;
|
||||
|
||||
if (Math.abs(dx) > Math.abs(dy)) {
|
||||
if (dx > 0) {
|
||||
move('right');
|
||||
} else {
|
||||
move('left');
|
||||
}
|
||||
} else {
|
||||
if (dy > 0) {
|
||||
move('down');
|
||||
} else {
|
||||
move('up');
|
||||
}
|
||||
}
|
||||
}, false);
|
||||
|
||||
// 初始化游戏
|
||||
initGame();
|
||||
});
|
||||
20
src/iyixiGames.miniGame/wwwroot/games/game2/index.html
Normal file
20
src/iyixiGames.miniGame/wwwroot/games/game2/index.html
Normal file
@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>数字谜题</title>
|
||||
<link rel="stylesheet" href="game.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="game-container">
|
||||
<h1>数字谜题</h1>
|
||||
<div class="game-board" id="gameBoard"></div>
|
||||
<div class="game-info">
|
||||
<div class="score">分数: <span id="score">0</span></div>
|
||||
<button id="restartBtn">重新开始</button>
|
||||
</div>
|
||||
</div>
|
||||
<script src="game.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game1.png
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 KiB |
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game2.png
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 KiB |
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game3.png
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 KiB |
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game4.png
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/images/games/game4.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 743 KiB |
BIN
src/iyixiGames.miniGame/wwwroot/images/logo.png
Normal file
BIN
src/iyixiGames.miniGame/wwwroot/images/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
344
src/iyixiGames.miniGame/wwwroot/js/main.js
Normal file
344
src/iyixiGames.miniGame/wwwroot/js/main.js
Normal file
@ -0,0 +1,344 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 加载SEO数据
|
||||
loadSEOData();
|
||||
|
||||
// 初始化移动菜单
|
||||
initMobileMenu();
|
||||
|
||||
// 初始化主题切换
|
||||
initThemeToggle();
|
||||
|
||||
// 根据页面加载特定内容
|
||||
if (document.body.classList.contains('home-page')) {
|
||||
loadFeaturedGames();
|
||||
} else if (document.body.classList.contains('games-list-page')) {
|
||||
loadGamesList();
|
||||
} else if (document.body.classList.contains('game-detail-page')) {
|
||||
loadGameDetail();
|
||||
}
|
||||
});
|
||||
|
||||
// 加载SEO数据
|
||||
function loadSEOData() {
|
||||
fetch('/data/seo.json')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
document.getElementById('page-title').textContent = data.title;
|
||||
document.getElementById('page-description').content = data.description;
|
||||
document.getElementById('page-keywords').content = data.keywords;
|
||||
})
|
||||
.catch(error => console.error('Error loading SEO data:', error));
|
||||
}
|
||||
|
||||
// 初始化移动菜单
|
||||
function initMobileMenu() {
|
||||
const toggle = document.querySelector('.mobile-menu-toggle');
|
||||
const mobileNav = document.querySelector('.mobile-nav');
|
||||
|
||||
if (toggle && mobileNav) {
|
||||
toggle.addEventListener('click', function() {
|
||||
this.classList.toggle('active');
|
||||
mobileNav.style.display = mobileNav.style.display === 'block' ? 'none' : 'block';
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化主题切换
|
||||
function initThemeToggle() {
|
||||
const themeToggle = document.getElementById('theme-toggle');
|
||||
const mobileThemeToggle = document.getElementById('mobile-theme-toggle');
|
||||
const themeStyle = document.getElementById('theme-style');
|
||||
const currentTheme = localStorage.getItem('theme') || 'default';
|
||||
|
||||
// 应用保存的主题
|
||||
setTheme(currentTheme);
|
||||
|
||||
// 桌面主题切换
|
||||
if (themeToggle) {
|
||||
themeToggle.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
toggleTheme();
|
||||
});
|
||||
}
|
||||
|
||||
// 移动主题切换
|
||||
if (mobileThemeToggle) {
|
||||
mobileThemeToggle.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
toggleTheme();
|
||||
});
|
||||
}
|
||||
|
||||
function toggleTheme() {
|
||||
const current = localStorage.getItem('theme') || 'default';
|
||||
const newTheme = current === 'default' ? 'dark' : 'default';
|
||||
setTheme(newTheme);
|
||||
localStorage.setItem('theme', newTheme);
|
||||
}
|
||||
|
||||
function setTheme(theme) {
|
||||
if (theme === 'dark') {
|
||||
themeStyle.href = '/css/theme-dark.css';
|
||||
if (themeToggle) themeToggle.textContent = '切换亮色主题';
|
||||
if (mobileThemeToggle) mobileThemeToggle.textContent = '切换亮色主题';
|
||||
} else {
|
||||
themeStyle.href = '/css/theme-default.css';
|
||||
if (themeToggle) themeToggle.textContent = '切换暗色主题';
|
||||
if (mobileThemeToggle) mobileThemeToggle.textContent = '切换暗色主题';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 加载特色游戏
|
||||
function loadFeaturedGames() {
|
||||
fetch('/data/games.json')
|
||||
.then(response => response.json())
|
||||
.then(games => {
|
||||
// 按热度排序
|
||||
games.sort((a, b) => b.popularity - a.popularity);
|
||||
// 只取前6个
|
||||
const featuredGames = games.slice(0, 6);
|
||||
|
||||
const container = document.getElementById('featured-games');
|
||||
if (container) {
|
||||
container.innerHTML = featuredGames.map(game => createGameCard(game)).join('');
|
||||
|
||||
// 为每个卡片添加点击事件
|
||||
document.querySelectorAll('.game-card').forEach(card => {
|
||||
card.addEventListener('click', function() {
|
||||
const gameId = this.getAttribute('data-game-id');
|
||||
window.location.href = `/detail.html?id=${gameId}`;
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(error => console.error('Error loading games:', error));
|
||||
}
|
||||
|
||||
// 创建游戏卡片HTML
|
||||
function createGameCard(game) {
|
||||
return `
|
||||
<div class="game-card" data-game-id="${game.id}">
|
||||
<div class="game-card-img">
|
||||
<img src="/images/games/${game.id}.png" alt="${game.name}">
|
||||
</div>
|
||||
<div class="game-card-info">
|
||||
<h3 class="game-card-title">${game.name}</h3>
|
||||
<div class="game-card-meta">
|
||||
<span class="game-card-rating">${game.avg_rating} ★</span>
|
||||
<span class="game-card-popularity">${game.popularity}</span>
|
||||
</div>
|
||||
<div class="game-card-categories">
|
||||
${game.category.map(cat => `<span class="game-card-category">${cat}</span>`).join('')}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// 加载游戏列表
|
||||
function loadGamesList() {
|
||||
fetch('/data/games.json')
|
||||
.then(response => response.json())
|
||||
.then(games => {
|
||||
// 获取URL参数
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const category = urlParams.get('category');
|
||||
const sortBy = urlParams.get('sort') || 'popularity';
|
||||
|
||||
// 设置排序和筛选选项
|
||||
document.getElementById('sort-by').value = sortBy;
|
||||
if (category) {
|
||||
document.getElementById('filter-category').value = category;
|
||||
}
|
||||
|
||||
// 筛选游戏
|
||||
let filteredGames = games;
|
||||
if (category && category !== 'all') {
|
||||
filteredGames = games.filter(game => game.category.includes(category));
|
||||
}
|
||||
|
||||
// 排序游戏
|
||||
filteredGames.sort((a, b) => {
|
||||
if (sortBy === 'popularity') {
|
||||
return b.popularity - a.popularity;
|
||||
} else if (sortBy === 'rating') {
|
||||
return b.avg_rating - a.avg_rating;
|
||||
} else if (sortBy === 'date') {
|
||||
return new Date(b.release_date) - new Date(a.release_date);
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
|
||||
// 渲染游戏列表
|
||||
const container = document.getElementById('games-list-container');
|
||||
if (container) {
|
||||
container.innerHTML = filteredGames.map(game => createGameCard(game)).join('');
|
||||
|
||||
// 为每个卡片添加点击事件
|
||||
document.querySelectorAll('.game-card').forEach(card => {
|
||||
card.addEventListener('click', function() {
|
||||
const gameId = this.getAttribute('data-game-id');
|
||||
window.location.href = `/detail.html?id=${gameId}`;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 添加排序和筛选事件监听
|
||||
document.getElementById('sort-by').addEventListener('change', function() {
|
||||
const url = new URL(window.location);
|
||||
url.searchParams.set('sort', this.value);
|
||||
window.location.href = url.toString();
|
||||
});
|
||||
|
||||
document.getElementById('filter-category').addEventListener('change', function() {
|
||||
const url = new URL(window.location);
|
||||
if (this.value === 'all') {
|
||||
url.searchParams.delete('category');
|
||||
} else {
|
||||
url.searchParams.set('category', this.value);
|
||||
}
|
||||
window.location.href = url.toString();
|
||||
});
|
||||
})
|
||||
.catch(error => console.error('Error loading games:', error));
|
||||
}
|
||||
|
||||
// 加载游戏详情
|
||||
function loadGameDetail() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const gameId = urlParams.get('id');
|
||||
|
||||
if (!gameId) {
|
||||
window.location.href = '/list.html';
|
||||
return;
|
||||
}
|
||||
|
||||
// 加载游戏基本信息
|
||||
fetch(`/data/${gameId}/info.json`)
|
||||
.then(response => response.json())
|
||||
.then(gameInfo => {
|
||||
// 设置页面标题
|
||||
document.title = `${gameInfo.name} - GameHub`;
|
||||
document.getElementById('page-title').textContent = `${gameInfo.name} - GameHub`;
|
||||
|
||||
// 填充游戏详情
|
||||
document.getElementById('game-name-breadcrumb').textContent = gameInfo.name;
|
||||
document.getElementById('game-title').textContent = gameInfo.name;
|
||||
document.getElementById('game-cover-img').src = `/images/games/${gameId}.png`;
|
||||
document.getElementById('game-cover-img').alt = gameInfo.name;
|
||||
|
||||
// 评分星星
|
||||
const ratingStars = '★'.repeat(Math.floor(gameInfo.avg_rating)) + '☆'.repeat(5 - Math.ceil(gameInfo.avg_rating));
|
||||
document.getElementById('game-rating').innerHTML = `${ratingStars} <span>(${gameInfo.avg_rating.toFixed(1)})</span>`;
|
||||
|
||||
document.getElementById('game-popularity').textContent = `热度: ${gameInfo.popularity}`;
|
||||
document.getElementById('game-release-date').textContent = `发布日期: ${new Date(gameInfo.release_date).toLocaleDateString()}`;
|
||||
document.getElementById('game-description').textContent = gameInfo.description;
|
||||
|
||||
// 游戏特色
|
||||
const featuresList = document.getElementById('game-features');
|
||||
featuresList.innerHTML = gameInfo.features.map(feature => `<li>${feature}</li>`).join('');
|
||||
|
||||
// 评论
|
||||
const commentsContainer = document.getElementById('game-comments');
|
||||
commentsContainer.innerHTML = gameInfo.comments.map(comment => `
|
||||
<div class="comment-item">
|
||||
<div class="comment-avatar">
|
||||
<img src="/images/avatars/${comment.avatar}" alt="${comment.username}">
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-header">
|
||||
<span class="comment-username">${comment.username}</span>
|
||||
<span class="comment-date">${new Date(comment.date).toLocaleDateString()}</span>
|
||||
</div>
|
||||
<div class="comment-rating">${'★'.repeat(comment.rating)}${'☆'.repeat(5 - comment.rating)}</div>
|
||||
<p class="comment-text">${comment.content}</p>
|
||||
</div>
|
||||
</div>
|
||||
`).join('');
|
||||
|
||||
// 设置游玩按钮
|
||||
document.getElementById('play-game-btn').href = `/playgame.html?id=${gameId}`;
|
||||
|
||||
// 初始化标签页
|
||||
initTabs();
|
||||
|
||||
// 初始化评论表单
|
||||
initCommentForm(gameId);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading game info:', error);
|
||||
window.location.href = '/list.html';
|
||||
});
|
||||
}
|
||||
|
||||
// 初始化标签页
|
||||
function initTabs() {
|
||||
const tabLinks = document.querySelectorAll('.tab-link');
|
||||
const tabContents = document.querySelectorAll('.tab-content');
|
||||
|
||||
tabLinks.forEach(link => {
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// 移除所有active类
|
||||
tabLinks.forEach(l => l.classList.remove('active'));
|
||||
tabContents.forEach(c => c.classList.remove('active'));
|
||||
|
||||
// 添加active类到当前标签
|
||||
this.classList.add('active');
|
||||
const tabId = this.getAttribute('data-tab');
|
||||
document.getElementById(`${tabId}-tab`).classList.add('active');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 初始化评论表单
|
||||
function initCommentForm(gameId) {
|
||||
const form = document.getElementById('comment-form');
|
||||
if (form) {
|
||||
form.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const rating = document.getElementById('comment-rating').value;
|
||||
const content = document.getElementById('comment-content').value;
|
||||
|
||||
// 这里应该是发送到服务器的代码
|
||||
// 模拟添加评论
|
||||
const newComment = {
|
||||
avatar: 'default-avatar.jpg',
|
||||
username: '当前用户',
|
||||
rating: parseInt(rating),
|
||||
content: content,
|
||||
date: new Date().toISOString().split('T')[0]
|
||||
};
|
||||
|
||||
// 添加到评论列表
|
||||
const commentsContainer = document.getElementById('game-comments');
|
||||
const commentHTML = `
|
||||
<div class="comment-item">
|
||||
<div class="comment-avatar">
|
||||
<img src="/images/avatars/default-avatar.jpg" alt="当前用户">
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-header">
|
||||
<span class="comment-username">当前用户</span>
|
||||
<span class="comment-date">今天</span>
|
||||
</div>
|
||||
<div class="comment-rating">${'★'.repeat(newComment.rating)}${'☆'.repeat(5 - newComment.rating)}</div>
|
||||
<p class="comment-text">${newComment.content}</p>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
commentsContainer.insertAdjacentHTML('afterbegin', commentHTML);
|
||||
|
||||
// 重置表单
|
||||
form.reset();
|
||||
|
||||
// 显示成功消息
|
||||
alert('评论已提交!感谢您的反馈。');
|
||||
});
|
||||
}
|
||||
}
|
||||
31
src/iyixiGames.miniGame/wwwroot/js/playgame.js
Normal file
31
src/iyixiGames.miniGame/wwwroot/js/playgame.js
Normal file
@ -0,0 +1,31 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
const gameId = urlParams.get('id');
|
||||
|
||||
if (!gameId) {
|
||||
window.location.href = '/list.html';
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置游戏标题
|
||||
document.title = `正在玩游戏 - GameHub`;
|
||||
|
||||
// 设置返回按钮链接
|
||||
document.getElementById('back-to-detail').href = `/detail.html?id=${gameId}`;
|
||||
|
||||
// 加载游戏
|
||||
const gameFrame = document.getElementById('game-frame');
|
||||
gameFrame.src = `/games/${gameId}/index.html`;
|
||||
|
||||
// 全屏处理
|
||||
gameFrame.addEventListener('load', function() {
|
||||
// 可以在这里添加与iframe通信的代码
|
||||
});
|
||||
|
||||
// 监听键盘ESC键返回
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape') {
|
||||
window.location.href = `/detail.html?id=${gameId}`;
|
||||
}
|
||||
});
|
||||
});
|
||||
26
src/iyixiGames.miniGame/wwwroot/js/responsive.js
Normal file
26
src/iyixiGames.miniGame/wwwroot/js/responsive.js
Normal file
@ -0,0 +1,26 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 响应式设计辅助函数
|
||||
|
||||
// 检测移动设备
|
||||
function isMobile() {
|
||||
return window.innerWidth <= 768;
|
||||
}
|
||||
|
||||
// 根据设备类型添加类
|
||||
if (isMobile()) {
|
||||
document.body.classList.add('mobile-device');
|
||||
} else {
|
||||
document.body.classList.add('desktop-device');
|
||||
}
|
||||
|
||||
// 监听窗口大小变化
|
||||
window.addEventListener('resize', function() {
|
||||
if (isMobile() && document.body.classList.contains('desktop-device')) {
|
||||
document.body.classList.remove('desktop-device');
|
||||
document.body.classList.add('mobile-device');
|
||||
} else if (!isMobile() && document.body.classList.contains('mobile-device')) {
|
||||
document.body.classList.remove('mobile-device');
|
||||
document.body.classList.add('desktop-device');
|
||||
}
|
||||
});
|
||||
});
|
||||
114
src/iyixiGames.miniGame/wwwroot/js/script.js
Normal file
114
src/iyixiGames.miniGame/wwwroot/js/script.js
Normal file
@ -0,0 +1,114 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 移动端菜单切换
|
||||
const mobileMenuToggle = document.querySelector('.mobile-menu-toggle');
|
||||
const mainNav = document.querySelector('.main-nav');
|
||||
|
||||
if (mobileMenuToggle && mainNav) {
|
||||
mobileMenuToggle.addEventListener('click', function() {
|
||||
mainNav.classList.toggle('active');
|
||||
});
|
||||
}
|
||||
|
||||
// 游戏列表排序和筛选
|
||||
const sortBy = document.getElementById('sort-by');
|
||||
const filterCategory = document.getElementById('filter-category');
|
||||
|
||||
if (sortBy) {
|
||||
sortBy.addEventListener('change', function() {
|
||||
// 这里可以添加排序逻辑
|
||||
console.log('排序方式:', this.value);
|
||||
});
|
||||
}
|
||||
|
||||
if (filterCategory) {
|
||||
filterCategory.addEventListener('change', function() {
|
||||
// 这里可以添加筛选逻辑
|
||||
console.log('筛选分类:', this.value);
|
||||
});
|
||||
}
|
||||
|
||||
// 评论表单提交
|
||||
const reviewForm = document.querySelector('.review-form form');
|
||||
|
||||
if (reviewForm) {
|
||||
reviewForm.addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
alert('感谢您的评价!');
|
||||
this.reset();
|
||||
});
|
||||
}
|
||||
|
||||
// 从URL获取游戏ID
|
||||
function getGameIdFromUrl() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get('id');
|
||||
}
|
||||
|
||||
// 根据游戏ID加载游戏数据
|
||||
const gameId = getGameIdFromUrl();
|
||||
if (gameId) {
|
||||
console.log('当前游戏ID:', gameId);
|
||||
// 这里可以添加根据ID加载游戏数据的逻辑
|
||||
}
|
||||
|
||||
// 主题切换功能
|
||||
const themeSwitcher = document.createElement('div');
|
||||
themeSwitcher.className = 'theme-switcher';
|
||||
themeSwitcher.innerHTML = `
|
||||
<button data-theme="default">默认</button>
|
||||
<button data-theme="red">红色</button>
|
||||
<button data-theme="purple">紫色</button>
|
||||
<button data-theme="dark">暗黑</button>
|
||||
`;
|
||||
document.body.appendChild(themeSwitcher);
|
||||
|
||||
themeSwitcher.addEventListener('click', function(e) {
|
||||
if (e.target.tagName === 'BUTTON') {
|
||||
const theme = e.target.dataset.theme;
|
||||
document.body.className = theme === 'default' ? '' : `theme-${theme}`;
|
||||
}
|
||||
});
|
||||
|
||||
// 游戏截图点击放大
|
||||
const screenshots = document.querySelectorAll('.screenshots-grid img');
|
||||
screenshots.forEach(img => {
|
||||
img.addEventListener('click', function() {
|
||||
const overlay = document.createElement('div');
|
||||
overlay.className = 'screenshot-overlay';
|
||||
overlay.innerHTML = `
|
||||
<div class="overlay-content">
|
||||
<img src="${this.src}" alt="${this.alt}">
|
||||
<button class="close-overlay">×</button>
|
||||
</div>
|
||||
`;
|
||||
document.body.appendChild(overlay);
|
||||
|
||||
overlay.addEventListener('click', function(e) {
|
||||
if (e.target === overlay || e.target.classList.contains('close-overlay')) {
|
||||
overlay.remove();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// 添加返回顶部按钮
|
||||
const backToTop = document.createElement('button');
|
||||
backToTop.className = 'back-to-top';
|
||||
backToTop.innerHTML = '↑';
|
||||
document.body.appendChild(backToTop);
|
||||
|
||||
window.addEventListener('scroll', function() {
|
||||
if (window.pageYOffset > 300) {
|
||||
backToTop.style.display = 'block';
|
||||
} else {
|
||||
backToTop.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
backToTop.addEventListener('click', function() {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
});
|
||||
});
|
||||
4
src/iyixiGames.miniGame/wwwroot/js/site.js
Normal file
4
src/iyixiGames.miniGame/wwwroot/js/site.js
Normal file
@ -0,0 +1,4 @@
|
||||
// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
|
||||
// for details on configuring this project to bundle and minify static web assets.
|
||||
|
||||
// Write your JavaScript code.
|
||||
22
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/LICENSE
Normal file
22
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/LICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2021 Twitter, Inc.
|
||||
Copyright (c) 2011-2021 The Bootstrap Authors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
4997
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
vendored
Normal file
4997
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4996
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css
vendored
Normal file
4996
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
427
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
vendored
Normal file
427
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css
vendored
Normal file
@ -0,0 +1,427 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-left: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
font-size: 1em;
|
||||
direction: ltr /* rtl:ignore */;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: left;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
/* rtl:raw:
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
*/
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
8
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
vendored
Normal file
8
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
|
||||
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
||||
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
424
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css
vendored
Normal file
424
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css
vendored
Normal file
@ -0,0 +1,424 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
:root {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: var(--bs-body-font-family);
|
||||
font-size: var(--bs-body-font-size);
|
||||
font-weight: var(--bs-body-font-weight);
|
||||
line-height: var(--bs-body-line-height);
|
||||
color: var(--bs-body-color);
|
||||
text-align: var(--bs-body-text-align);
|
||||
background-color: var(--bs-body-bg);
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 1rem 0;
|
||||
color: inherit;
|
||||
background-color: currentColor;
|
||||
border: 0;
|
||||
opacity: 0.25;
|
||||
}
|
||||
|
||||
hr:not([size]) {
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
h6, h5, h4, h3, h2, h1 {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 500;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: calc(1.375rem + 1.5vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h1 {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: calc(1.325rem + 0.9vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: calc(1.3rem + 0.6vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h3 {
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
h4 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
abbr[title],
|
||||
abbr[data-bs-original-title] {
|
||||
-webkit-text-decoration: underline dotted;
|
||||
text-decoration: underline dotted;
|
||||
cursor: help;
|
||||
-webkit-text-decoration-skip-ink: none;
|
||||
text-decoration-skip-ink: none;
|
||||
}
|
||||
|
||||
address {
|
||||
margin-bottom: 1rem;
|
||||
font-style: normal;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul {
|
||||
padding-right: 2rem;
|
||||
}
|
||||
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
ol ol,
|
||||
ul ul,
|
||||
ol ul,
|
||||
ul ol {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-bottom: 0.5rem;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
small {
|
||||
font-size: 0.875em;
|
||||
}
|
||||
|
||||
mark {
|
||||
padding: 0.2em;
|
||||
background-color: #fcf8e3;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
font-size: 0.75em;
|
||||
line-height: 0;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0d6efd;
|
||||
text-decoration: underline;
|
||||
}
|
||||
a:hover {
|
||||
color: #0a58ca;
|
||||
}
|
||||
|
||||
a:not([href]):not([class]), a:not([href]):not([class]):hover {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
font-size: 1em;
|
||||
direction: ltr ;
|
||||
unicode-bidi: bidi-override;
|
||||
}
|
||||
|
||||
pre {
|
||||
display: block;
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
overflow: auto;
|
||||
font-size: 0.875em;
|
||||
}
|
||||
pre code {
|
||||
font-size: inherit;
|
||||
color: inherit;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
code {
|
||||
font-size: 0.875em;
|
||||
color: #d63384;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
a > code {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
kbd {
|
||||
padding: 0.2rem 0.4rem;
|
||||
font-size: 0.875em;
|
||||
color: #fff;
|
||||
background-color: #212529;
|
||||
border-radius: 0.2rem;
|
||||
}
|
||||
kbd kbd {
|
||||
padding: 0;
|
||||
font-size: 1em;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
figure {
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
img,
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
table {
|
||||
caption-side: bottom;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
caption {
|
||||
padding-top: 0.5rem;
|
||||
padding-bottom: 0.5rem;
|
||||
color: #6c757d;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: inherit;
|
||||
text-align: -webkit-match-parent;
|
||||
}
|
||||
|
||||
thead,
|
||||
tbody,
|
||||
tfoot,
|
||||
tr,
|
||||
td,
|
||||
th {
|
||||
border-color: inherit;
|
||||
border-style: solid;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button:focus:not(:focus-visible) {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
optgroup,
|
||||
textarea {
|
||||
margin: 0;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
[role=button] {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
select {
|
||||
word-wrap: normal;
|
||||
}
|
||||
select:disabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
[list]::-webkit-calendar-picker-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
button,
|
||||
[type=button],
|
||||
[type=reset],
|
||||
[type=submit] {
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
button:not(:disabled),
|
||||
[type=button]:not(:disabled),
|
||||
[type=reset]:not(:disabled),
|
||||
[type=submit]:not(:disabled) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
min-width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
legend {
|
||||
float: right;
|
||||
width: 100%;
|
||||
padding: 0;
|
||||
margin-bottom: 0.5rem;
|
||||
font-size: calc(1.275rem + 0.3vw);
|
||||
line-height: inherit;
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
legend {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
}
|
||||
legend + * {
|
||||
clear: right;
|
||||
}
|
||||
|
||||
::-webkit-datetime-edit-fields-wrapper,
|
||||
::-webkit-datetime-edit-text,
|
||||
::-webkit-datetime-edit-minute,
|
||||
::-webkit-datetime-edit-hour-field,
|
||||
::-webkit-datetime-edit-day-field,
|
||||
::-webkit-datetime-edit-month-field,
|
||||
::-webkit-datetime-edit-year-field {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::-webkit-inner-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
[type=search] {
|
||||
outline-offset: -2px;
|
||||
-webkit-appearance: textfield;
|
||||
}
|
||||
|
||||
[type="tel"],
|
||||
[type="url"],
|
||||
[type="email"],
|
||||
[type="number"] {
|
||||
direction: ltr;
|
||||
}
|
||||
::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
::-webkit-color-swatch-wrapper {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
::file-selector-button {
|
||||
font: inherit;
|
||||
}
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
font: inherit;
|
||||
-webkit-appearance: button;
|
||||
}
|
||||
|
||||
output {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
iframe {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
progress {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
|
||||
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
8
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
8
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/*!
|
||||
* Bootstrap Reboot v5.1.0 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2021 The Bootstrap Authors
|
||||
* Copyright 2011-2021 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
|
||||
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */
|
||||
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4866
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css
vendored
Normal file
4866
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4857
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css
vendored
Normal file
4857
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
11221
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.css
vendored
Normal file
11221
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
11197
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css
vendored
Normal file
11197
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/css/bootstrap.rtl.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
6780
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
vendored
Normal file
6780
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4977
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js
vendored
Normal file
4977
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js
vendored
Normal file
7
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map
vendored
Normal file
1
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
5026
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.js
vendored
Normal file
5026
src/iyixiGames.miniGame/wwwroot/lib/bootstrap/dist/js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user