Compare commits
2 Commits
70b1665b31
...
fd383481fd
| Author | SHA1 | Date | |
|---|---|---|---|
| fd383481fd | |||
| a0bae4b6b8 |
+30
@@ -0,0 +1,30 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.0.0.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Tetris", "Tetris.vcxproj", "{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Debug|x64.Build.0 = Debug|x64
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Release|Win32.Build.0 = Release|Win32
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Release|x64.ActiveCfg = Release|x64
|
||||
{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2A6B54D6-B945-4445-8A94-9B38E625493E}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
+204
@@ -0,0 +1,204 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>18.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{A6B8E95B-7C95-46C2-A3E2-48F342D1F20B}</ProjectGuid>
|
||||
<RootNamespace>Tetris</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v145</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v145</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v145</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v145</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings" />
|
||||
<ImportGroup Label="Shared" />
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<OutDir>$(ProjectDir).vscode-build\vs2026\$(Platform)\$(Configuration)\</OutDir>
|
||||
<IntDir>$(ProjectDir).vscode-build\vs2026\obj\$(Platform)\$(Configuration)\</IntDir>
|
||||
<TargetName>Tetris</TargetName>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;gdiplus.lib;gdi32.lib;user32.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;$(ProjectDir)assets\icons;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;gdiplus.lib;gdi32.lib;user32.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;$(ProjectDir)assets\icons;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;gdiplus.lib;gdi32.lib;user32.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;$(ProjectDir)assets\icons;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>winmm.lib;gdiplus.lib;gdi32.lib;user32.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>$(ProjectDir)src\include;$(ProjectDir)assets\icons;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>UNICODE;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\source\Tetris.cpp" />
|
||||
<ClCompile Include="src\source\TetrisLogic.cpp" />
|
||||
<ClCompile Include="src\source\TetrisRender.cpp" />
|
||||
<ClCompile Include="src\source\stdafx.cpp" />
|
||||
<ClCompile Include="src\source\app\TetrisInput.cpp" />
|
||||
<ClCompile Include="src\source\app\TetrisLayout.cpp" />
|
||||
<ClCompile Include="src\source\app\TetrisMedia.cpp" />
|
||||
<ClCompile Include="src\source\app\TetrisTimers.cpp" />
|
||||
<ClCompile Include="src\source\common\TetrisAssets.cpp" />
|
||||
<ClCompile Include="src\source\extensions\TetrisGameExtensions.cpp" />
|
||||
<ClCompile Include="src\source\logic\TetrisCoreHelpers.cpp" />
|
||||
<ClCompile Include="src\source\logic\TetrisPieceEffects.cpp" />
|
||||
<ClCompile Include="src\source\render\TetrisRenderAssets.cpp" />
|
||||
<ClCompile Include="src\source\render\TetrisRenderMain.cpp" />
|
||||
<ClCompile Include="src\source\rogue\TetrisRogue.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\include\resource.h" />
|
||||
<ClInclude Include="src\include\stdafx.h" />
|
||||
<ClInclude Include="src\include\targetver.h" />
|
||||
<ClInclude Include="src\include\Tetris.h" />
|
||||
<ClInclude Include="src\include\TetrisAppInternal.h" />
|
||||
<ClInclude Include="src\include\TetrisAssets.h" />
|
||||
<ClInclude Include="src\include\TetrisLogicInternal.h" />
|
||||
<ClInclude Include="src\include\TetrisRenderInternal.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="src\resources\Tetris.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{0E9F8A8A-4B33-47F4-8409-BBD2E632BD02}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\app">
|
||||
<UniqueIdentifier>{4040C716-0A25-434E-8225-3FB91E96C9C2}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\common">
|
||||
<UniqueIdentifier>{A0E8AA27-81E0-4B07-8436-84237CBFC4A8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\extensions">
|
||||
<UniqueIdentifier>{D9E2B29D-32A7-4A92-9824-64B07CE76CEF}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\logic">
|
||||
<UniqueIdentifier>{86ED6590-B71E-4555-A5ED-131EAB571D32}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\render">
|
||||
<UniqueIdentifier>{E19CF9D7-1762-45A0-AE35-9806E551112D}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\rogue">
|
||||
<UniqueIdentifier>{28A22C80-54CC-44AF-9925-926D1EE5BAE9}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{F7961514-73CF-48BD-A777-525FB4964E26}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{2BF6F47B-88D9-47B6-971A-54309126F736}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;bmp;png;jpg;jpeg</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\source\Tetris.cpp"><Filter>Source Files</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\TetrisLogic.cpp"><Filter>Source Files</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\TetrisRender.cpp"><Filter>Source Files</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\stdafx.cpp"><Filter>Source Files</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\app\TetrisInput.cpp"><Filter>Source Files\app</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\app\TetrisLayout.cpp"><Filter>Source Files\app</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\app\TetrisMedia.cpp"><Filter>Source Files\app</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\app\TetrisTimers.cpp"><Filter>Source Files\app</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\common\TetrisAssets.cpp"><Filter>Source Files\common</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\extensions\TetrisGameExtensions.cpp"><Filter>Source Files\extensions</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\logic\TetrisCoreHelpers.cpp"><Filter>Source Files\logic</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\logic\TetrisPieceEffects.cpp"><Filter>Source Files\logic</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\render\TetrisRenderAssets.cpp"><Filter>Source Files\render</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\render\TetrisRenderMain.cpp"><Filter>Source Files\render</Filter></ClCompile>
|
||||
<ClCompile Include="src\source\rogue\TetrisRogue.cpp"><Filter>Source Files\rogue</Filter></ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\include\resource.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\stdafx.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\targetver.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\Tetris.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\TetrisAppInternal.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\TetrisAssets.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\TetrisLogicInternal.h"><Filter>Header Files</Filter></ClInclude>
|
||||
<ClInclude Include="src\include\TetrisRenderInternal.h"><Filter>Header Files</Filter></ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="src\resources\Tetris.rc"><Filter>Resource Files</Filter></ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,197 @@
|
||||
# 只使用 Visual Studio 2026 运行本项目
|
||||
|
||||
本文说明如何只依赖 Visual Studio 2026 自带的 C++ 工具链运行本项目,不额外安装 MinGW、GCC 或其他第三方编译器。
|
||||
|
||||
本文档编写日期为 2026-05-08。Microsoft Learn 的发布历史显示,Visual Studio 2026 在 2026-04-28 的稳定通道版本为 18.5.2。
|
||||
|
||||
## 1. 结论
|
||||
|
||||
可以只用 Visual Studio 2026。
|
||||
|
||||
需要安装 Visual Studio 2026 的 `Desktop development with C++` 工作负载。该工作负载会提供本项目需要的主要工具:
|
||||
|
||||
- `cl.exe`:Microsoft C/C++ 编译器
|
||||
- `link.exe`:Microsoft 链接器
|
||||
- `rc.exe`:Windows 资源编译器
|
||||
- Windows SDK:提供 Win32 API、GDI、GDI+ 等头文件和库
|
||||
|
||||
本项目当前没有 `.sln` 或 `.vcxproj` 工程文件,因此推荐在 Visual Studio 2026 中打开文件夹,然后在 `Developer PowerShell for VS 2026` 中执行构建命令。
|
||||
|
||||
## 2. 安装 Visual Studio 2026
|
||||
|
||||
1. 打开 Visual Studio Installer。
|
||||
2. 安装 Visual Studio 2026 Community、Professional 或 Enterprise 均可。
|
||||
3. 在工作负载页面选择 `Desktop development with C++`。
|
||||
4. 保留默认勾选的 MSVC 工具集和 Windows SDK。
|
||||
5. 完成安装后启动 Visual Studio 2026。
|
||||
|
||||
不要额外安装 MinGW。本文后续命令只使用 Visual Studio 2026 自带工具。
|
||||
|
||||
## 3. 打开项目文件夹
|
||||
|
||||
1. 启动 Visual Studio 2026。
|
||||
2. 在开始窗口选择 `Open a local folder`。
|
||||
3. 选择项目根目录:
|
||||
|
||||
```text
|
||||
D:\VSC_program\Tereis
|
||||
```
|
||||
|
||||
4. 打开后可以在 Solution Explorer 中看到:
|
||||
|
||||
```text
|
||||
src
|
||||
assets
|
||||
build-mingw.ps1
|
||||
build-vs2026.ps1
|
||||
VS2026_RUN_GUIDE.md
|
||||
```
|
||||
|
||||
说明:`build-mingw.ps1` 是旧的 MinGW 构建脚本。只使用 VS2026 时不需要运行它。
|
||||
`build-vs2026.ps1` 是本项目提供的 VS2026 专用构建脚本。
|
||||
|
||||
## 4. 打开 VS2026 开发者终端
|
||||
|
||||
普通 PowerShell 通常找不到 `cl.exe` 和 `rc.exe`。要使用 VS2026 自带编译器,应打开开发者终端:
|
||||
|
||||
1. 在 Visual Studio 2026 顶部菜单选择 `Tools -> Command Line -> Developer PowerShell`。
|
||||
2. 进入项目根目录:
|
||||
|
||||
```powershell
|
||||
cd D:\VSC_program\Tereis
|
||||
```
|
||||
|
||||
3. 检查工具是否可用:
|
||||
|
||||
```powershell
|
||||
cl
|
||||
rc
|
||||
```
|
||||
|
||||
如果能看到 Microsoft C/C++ Compiler 和 Microsoft Windows Resource Compiler 的版本信息,说明 VS2026 C++ 工具链可用。
|
||||
|
||||
## 5. 使用 VS2026 工具链构建
|
||||
|
||||
在 `Developer PowerShell for VS 2026` 中执行:
|
||||
|
||||
```powershell
|
||||
.\build-vs2026.ps1
|
||||
```
|
||||
|
||||
构建并运行:
|
||||
|
||||
```powershell
|
||||
.\build-vs2026.ps1 -Run
|
||||
```
|
||||
|
||||
生成结果:
|
||||
|
||||
```text
|
||||
.vscode-build\vs2026\Tetris.exe
|
||||
```
|
||||
|
||||
该脚本会递归编译 `src\source` 下所有 `.cpp` 文件,包括 `render`、`app`、`logic`、`rogue`、`common`、`extensions` 等目录,避免手动建 VS 工程时漏加源文件。
|
||||
|
||||
如果需要手动理解脚本做了什么,核心命令如下。
|
||||
|
||||
先创建输出目录:
|
||||
|
||||
```powershell
|
||||
New-Item -ItemType Directory -Force -Path .\.vscode-build\vs2026
|
||||
```
|
||||
|
||||
编译资源文件:
|
||||
|
||||
```powershell
|
||||
rc /nologo /i .\src\include /i .\assets\icons /fo .\.vscode-build\vs2026\Tetris.res .\src\resources\Tetris.rc
|
||||
```
|
||||
|
||||
编译并链接 C++ 源码:
|
||||
|
||||
```powershell
|
||||
$sources = Get-ChildItem .\src\source -Recurse -Filter *.cpp | ForEach-Object { $_.FullName }
|
||||
cl /nologo /utf-8 /std:c++17 /EHsc /Zi /Od /DUNICODE /D_UNICODE /D_WINDOWS /I .\src\include $sources .\.vscode-build\vs2026\Tetris.res /Fe:.\.vscode-build\vs2026\Tetris.exe /link /SUBSYSTEM:WINDOWS winmm.lib gdiplus.lib gdi32.lib user32.lib shell32.lib
|
||||
```
|
||||
|
||||
## 6. 运行程序
|
||||
|
||||
运行时建议从项目根目录启动,因为程序会读取 `assets/` 目录中的图片、音频和视频资源。
|
||||
|
||||
```powershell
|
||||
Start-Process .\.vscode-build\vs2026\Tetris.exe -WorkingDirectory .
|
||||
```
|
||||
|
||||
如果直接双击 exe,可能因为工作目录不对导致背景图、音乐或视频加载失败。
|
||||
|
||||
## 7. 常见问题
|
||||
|
||||
### 找不到 `cl.exe`
|
||||
|
||||
原因:没有在 VS2026 开发者终端中运行命令,或安装 VS2026 时没有选择 `Desktop development with C++`。
|
||||
|
||||
处理:
|
||||
|
||||
1. 打开 `Tools -> Command Line -> Developer PowerShell`。
|
||||
2. 如果仍然找不到 `cl.exe`,打开 Visual Studio Installer,修改安装,勾选 `Desktop development with C++`。
|
||||
|
||||
### 找不到 `rc.exe`
|
||||
|
||||
原因:Windows SDK 没有安装,或没有进入 VS2026 开发者终端。
|
||||
|
||||
处理:打开 Visual Studio Installer,确认 C++ 桌面开发工作负载中的 Windows SDK 已安装。
|
||||
|
||||
### 资源文件编译失败,提示找不到图标
|
||||
|
||||
原因:`Tetris.rc` 中引用了图标文件,资源编译命令必须包含图标目录。
|
||||
|
||||
处理:确认资源编译命令中包含:
|
||||
|
||||
```powershell
|
||||
/i .\assets\icons
|
||||
```
|
||||
|
||||
### 程序运行后没有图片、音乐或视频
|
||||
|
||||
原因:程序没有从项目根目录启动,导致 `assets/` 相对路径无法读取。
|
||||
|
||||
处理:
|
||||
|
||||
```powershell
|
||||
Start-Process .\.vscode-build\vs2026\Tetris.exe -WorkingDirectory .
|
||||
```
|
||||
|
||||
### 程序能运行、有音乐,但窗口黑屏
|
||||
|
||||
原因通常是手动创建 Visual Studio 工程时没有把所有源文件加入编译,尤其是漏掉了这些目录:
|
||||
|
||||
```text
|
||||
src\source\app
|
||||
src\source\common
|
||||
src\source\extensions
|
||||
src\source\logic
|
||||
src\source\render
|
||||
src\source\rogue
|
||||
```
|
||||
|
||||
处理:不要运行手动残缺工程生成的 exe,改用 VS2026 开发者终端运行项目脚本:
|
||||
|
||||
```powershell
|
||||
.\build-vs2026.ps1 -Run
|
||||
```
|
||||
|
||||
如果一定要手动建 VS 工程,必须把 `src\source` 下所有 `.cpp` 文件递归加入项目,并把工作目录设置为项目根目录 `D:\VSC_program\Tereis`。
|
||||
|
||||
### 直接按 F5 不能运行
|
||||
|
||||
原因:本项目当前没有 Visual Studio `.sln` 或 `.vcxproj` 工程文件,VS2026 不知道应该如何构建和启动。
|
||||
|
||||
处理:使用本文的 `Developer PowerShell for VS 2026` 构建方式。后续如果需要 F5 调试体验,可以再创建 Visual Studio C++ 工程文件。
|
||||
|
||||
## 8. 参考资料
|
||||
|
||||
- Visual Studio 2026 Release Notes: <https://learn.microsoft.com/visualstudio/releases/vs18/release-notes>
|
||||
- Visual Studio 2026 Release History: <https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-history>
|
||||
- Visual Studio 2026 System Requirements: <https://learn.microsoft.com/en-us/visualstudio/releases/2026/vs-system-requirements>
|
||||
- Install Visual Studio: <https://learn.microsoft.com/en-us/visualstudio/install/install-visual-studio>
|
||||
- Use the Microsoft C++ toolset from the command line: <https://learn.microsoft.com/en-us/cpp/build/building-on-the-command-line>
|
||||
- MSVC compiler command-line syntax: <https://learn.microsoft.com/en-us/cpp/build/reference/compiler-command-line-syntax>
|
||||
@@ -0,0 +1,75 @@
|
||||
param(
|
||||
[switch]$Run
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
$Root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
$ProjectDir = Join-Path $Root "src"
|
||||
$IncludeDir = Join-Path $ProjectDir "include"
|
||||
$SourceDir = Join-Path $ProjectDir "source"
|
||||
$ResourceDir = Join-Path $ProjectDir "resources"
|
||||
$AssetIconDir = Join-Path $Root "assets\icons"
|
||||
$BuildDir = Join-Path $Root ".vscode-build\vs2026"
|
||||
$ExePath = Join-Path $BuildDir "Tetris.exe"
|
||||
$ResPath = Join-Path $BuildDir "Tetris.res"
|
||||
$RcPath = Join-Path $ResourceDir "Tetris.rc"
|
||||
|
||||
if (-not (Get-Command cl.exe -ErrorAction SilentlyContinue)) {
|
||||
throw "cl.exe not found. Open Visual Studio 2026: Tools -> Command Line -> Developer PowerShell, then run this script again."
|
||||
}
|
||||
|
||||
if (-not (Get-Command rc.exe -ErrorAction SilentlyContinue)) {
|
||||
throw "rc.exe not found. Install the Windows SDK from the Visual Studio Installer C++ desktop workload."
|
||||
}
|
||||
|
||||
New-Item -ItemType Directory -Force -Path $BuildDir | Out-Null
|
||||
|
||||
$Sources = Get-ChildItem -Path $SourceDir -Recurse -Filter "*.cpp" |
|
||||
Sort-Object FullName |
|
||||
Select-Object -ExpandProperty FullName
|
||||
|
||||
if ($Sources.Count -lt 10) {
|
||||
throw "Too few source files found under src\source. The render, app, logic, rogue, common, and extension modules must all be compiled."
|
||||
}
|
||||
|
||||
& rc.exe `
|
||||
/nologo `
|
||||
/i $IncludeDir `
|
||||
/i $AssetIconDir `
|
||||
/fo $ResPath `
|
||||
$RcPath
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
|
||||
& cl.exe `
|
||||
/nologo `
|
||||
/utf-8 `
|
||||
/std:c++17 `
|
||||
/EHsc `
|
||||
/Zi `
|
||||
/Od `
|
||||
/DUNICODE `
|
||||
/D_UNICODE `
|
||||
/D_WINDOWS `
|
||||
/I $IncludeDir `
|
||||
$Sources `
|
||||
$ResPath `
|
||||
/Fe:$ExePath `
|
||||
/link `
|
||||
/SUBSYSTEM:WINDOWS `
|
||||
winmm.lib `
|
||||
gdiplus.lib `
|
||||
gdi32.lib `
|
||||
user32.lib `
|
||||
shell32.lib
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
|
||||
if ($Run) {
|
||||
Start-Process -FilePath $ExePath -WorkingDirectory $Root
|
||||
}
|
||||
@@ -2,18 +2,15 @@
|
||||
|
||||
/**
|
||||
* @file resource.h
|
||||
* @brief 定义菜单、图标、对话框和命令等 Windows 资源编号。
|
||||
* @brief Defines Windows resource IDs for menus, icons, dialogs, commands, and strings.
|
||||
*/
|
||||
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ 生成的包含文件。
|
||||
// 供 Tetris.rc 使用
|
||||
//
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by Tetris.rc.
|
||||
|
||||
// 字符串资源:窗口标题等文本由 Win32 启动流程按编号读取。
|
||||
#define IDS_APP_TITLE 103
|
||||
|
||||
// 图标、对话框、菜单和命令编号需要与 Tetris.rc 中的资源定义保持一致。
|
||||
#define IDR_MAINFRAME 128
|
||||
#define IDD_TETRIS_DIALOG 102
|
||||
#define IDD_ABOUTBOX 103
|
||||
@@ -26,13 +23,11 @@
|
||||
#define IDC_MYICON 2
|
||||
|
||||
#ifndef IDC_STATIC
|
||||
// 静态文本控件使用 -1,表示运行时不需要通过控件 ID 单独访问。
|
||||
#define IDC_STATIC -1
|
||||
#endif
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
// 以下编号由资源编辑器维护,手工改动容易导致新增资源编号冲突。
|
||||
#define _APS_NO_MFC 130
|
||||
#define _APS_NEXT_RESOURCE_VALUE 129
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user