视频地址:
此文章为站内视频“ AV28779788 ” P24~P111(第二章“C#基础”)里面涉及到《2048》项目的整理。(面向有C#语言基础的读者)
此文章是文集 https://www.bilibili.com/read/readlist/rl651706 正文第5篇,初衷是配合C#笔记01到04学习的一个暗线整理(明线是祁老师在第112集,回顾的这章的PPT)。
本文结构如下
0. 前言部分:C#代码文件的使用方法;
第一部分(代码开源)——就是后面的三个类文件;
第二部分是介绍《2048》的需求分析;
第三部分:第75集《2048》最初版的算法代码;
第四部分:代码的更新(第76到108集,与《2048》项目有关的部分);
第五部分:花三集完善《2048》代码(仅整理了每集的逻辑结构,我没放代码)。
(后面第二到四部分,是便于读者跳转,写给那些想只观看《2048》项目相关的视频内容的读者,做的整理)
(如果你想改代码的话,建议看看第二到四部分,复习一下二维数组和枚举——不想改代码的话,可以只看前言和第一部分)
(这个《2048》项目,对应大学课程,相当于是大一第2学期的期末实训周项目,本来还应该按照特定格式,用Word文档写实训报告,但我赶时间求职,改做跳转链接整理)
——在Visual Studio软件内运行
第一步,下载最新版Visual Studio安装包
微软官方网站: https://visualstudio.microsoft.com/zh-hans/downloads
“社区版”(Visual Studio Community)是免费的,不能选择安装路径,需要预留C盘空间;
软件本体安装完成后,模块勾选“.NET桌面开发”、“通用Windows平台开发”和“使用Unity的游戏开发”;(如果你只是想运行本文的C#项目,可以不安装这些模块)
社区版登录微软账号,然后更新许可证,即可记得激活软件。
第二步,打开VS编辑器,新建空白解决方案
(“Visual Studio 2022”版本是右侧“创建新项目”)
1. 弹出“创建新项目”对话框
2. 直接搜“解决方案”就行
3. 双击“空白解决方案”,进入“配置新项目”窗口
4. 重命名,比如说“SolutionBase”(基本解决方案)
5. 位置,老师建议是(在D盘或E盘)新建一个英文名称的文件夹——我个人是“D:\cSharpProject\”,当然,代码文件放C盘也可以,前提是你找得到文件夹路径
6. 设置好名称和路径之后点“创建”进下一步
第三步,新建项目
1. 找到“解决方案资源管理器”窗口(或者是在左上角“视图”菜单里面呼出此窗口)——快捷键ctrl + w + s或ctrl + alt + L
2. 在“解决方案SolutionBase”这行字上右键 → 添加 → 新建项目,呼出“添加新项目”窗口
3. “Visual Studio 2022”版本是在搜索框下面有三个下拉菜单,第一个“所有语言”下拉菜单选“C#”,双击“控制台应用”(没括号)——如果没有c#的可以在“Visual Studio Installer”里面选上“通过Windows开发”;
4. 项目名称(默认“ConsoleApp1”)改为“Console2048”(在控制台玩的2048)即可,位置不修改;
5. “Visual Studio 2022”版本还要选框架,如果你只是使用本文的C#代码,可以不勾选“不使用顶级语句”
——如果勾选“不使用顶级语句”,软件会自动生成namespace Day01、internal class Program、static void Main这些内容,如果是现敲代码的话可以节省时间。
这个“Program.cs”文件,就是一个类似于index.html的入口文件了。可以把下一段的代码粘贴过来,覆盖自动生成的代码。(不用数了,59行代码,自动生成“internal”关键字和小括号内的“string[] args”可有可无)
(你现在保存Program.cs一定会报错,因为缺失后面的三个类文件)
第四步,使用类文件
在VS软件“解决方案资源管理器”窗口内,“Console2048”(就是项目名称)处呼出右键菜单
→“添加” → “类”,名称与“代码开源”部分的文件名一致。
(“类”遵循大驼峰命名法)
枚举文件MoveDirection.cs
位置类文件Location.cs
游戏核心类文件GameCore.cs(不用数了,188行代码)
确保下面四个文件都不报错:
GameCore.cs
Location.cs
MoveDirection.cs
Program.cs
然后你就可以点左上角菜单“调试” - “开始执行”(ctrl+F5),在控制台玩《2048》了。
(后面第二到四部分,是便于读者跳转,做的整理)
(首次提到《2048》是在P72 - 09'30"~10'40,祁老师让大家去玩《2048》,了解游戏规则——这个时候,发弹幕的大家,还没有意识到事情的严重性……)
P73 - 15'52",介绍《2048》,弹幕效果炸裂……精准空降链接:https://www.bilibili.com/video/av28779788/?p=73&t=952
如果你希望复习相关知识点,着手改代码的话,建议从P72 - 10'42",二维数组知识点开始看https://www.bilibili.com/video/av28779788/?p=72&t=635
第二章第6节(2.6_数组)的相关干货可以看此笔记↓ (图11到图15是一维数组,图19是二维数组)
《2048》核心算法则是第74集(2.C#基础08-09)的内容→https://www.bilibili.com/video/av28779788/?p=74
整行、整列,进行移动,元素0为空白格子,同时提到如何合并。
https://www.bilibili.com/video/av28779788/?p=75
00'48",去零方法
06'03",合并方法
【P75 - 13'11"】
《2048》表格中每个元素的索引如下:
|[0,0]|[0,1]|[0,2]|[0,3]|
|[1,0]|[1,1]|[1,2]|[1,3]|
|[2,0]|[2,1]|[2,2]|[2,3]|
|[3,0]|[3,1]|[3,2]|[3,3]|
10'45",上移方法
16'22",下移方法
21'00",更新显示二维数组的自定义函数
22'20",最后在“Main()”(入口函数)里面做个测试
随着C#基础的学习,《2048》项目的代码,也在断断续续的更新。
第一个是“2.7.3_局部变量”章节,P81 - 11'00",更新2048核心代码(方法重构)
https://www.bilibili.com/video/av28779788/?p=75
第一处,自定义函数“OrderBy()”链接到“2.6.5_常用方法及属性”章节 - P71(2.C#基础08-06)冒泡排序算法优化(CV20860596 的图18)
通过索引,修改堆内的数据,不需要返回(直接对return语句使用单行注释即可)
顺便说一句,内置函数“Array.Sort()”方法也是这样,不需要接收返回值,通过地址改内容
第二处,“RemoveZero()”方法(P81 - 19'10")
第三处,“Merge()”方法(去掉返回值和return语句就行)
第四处,上移、下移
P89 - 22'20",提了一嘴,现阶段的《2048》
只能说尽量理解,毕竟是大一第二学期的期末考试,第89集相对于大一第二学期开学不久(第二学期第一个月?)
火候没到
第90集学新知识点“枚举”(枚举[méi jǔ]:一个个的列举出来)
好处1,增强代码可读性
好处2,可以利用代码助手,做选择题,而不是看重载做填空题
(枚举限定了调用者的取值)
第106集和第107集,对应《原神》游戏的主线剧情,相当于是在“风龙废墟”区域,寻找“导光机关”,解锁副本。
本集代码:
P107,二维数组助手类
文件代码DoubleArrayHelper.cs
调用测试
P107 - 16:52,杂谈,可以直接下一集
1. 实际参数可以根据需求变,这里只有上下左右,可以拓展为八个方向
2. 在Direction.cs文件中用到了静态属性,类名一点,方向就拿到了
3. DoubleArrayHelper可以做成静态类
对应《原神》游戏的主线剧情,相当于是在“风龙废墟”区域的副本崩塌时,特瓦林来救主角团的那段动画(直到安柏说“啊,是你们!荣誉骑士凯旋归来啦。”就对应)
第109集,是做《2048》核心类的第一个(移动)
第110集,是做《2048》核心类的第二个(生成数字)
第111集,主要是了解MVC架构和面向对象思想的“分而治之”。
这个《2048》项目,对应《原神》游戏的主线剧情,相当于是击败风魔龙的主线副本,然后视频教程AV28779788的第112集,相当于是从 “与安柏一起打扫战场,到与风神巴巴托斯交换情报,告别蒙德” 这个阶段的剧情)
这个《2048》项目,也相当于《Sword Art Online》(刀剑神域系列动画版)主角Kirito在发现Heathcliff是不可破坏物体后,茅场晶彦邀请桐谷和人一对一比赛。
如果你只看《刀剑神域》前14集(艾恩葛朗特篇),看到主角桐谷和人苏醒后消失在走廊
——就相当于是玩《原神》游戏,主线第一章玩到帝君遇刺时,要你绕过千岩军潜行出去这个任务反复失败,你卡关了,然后不玩了。