当前位置:首页|资讯|ChatGPT|编程

【开源笔记】(C#笔记05)在控制台玩的《2048》项目(送给ChatGPT)

作者:重庆梁平扩展现实大学发布时间:2023-01-12

视频地址:

此文章为站内视频“ AV28779788 ” P24~P111(第二章“C#基础”)里面涉及到《2048》项目的整理。(面向有C#语言基础的读者)

此文章是文集 https://www.bilibili.com/read/readlist/rl651706 正文第5篇,初衷是配合C#笔记01到04学习的一个暗线整理(明线是祁老师在第112集,回顾的这章的PPT)。

本文结构如下

0. 前言部分:C#代码文件的使用方法;

  1. 第一部分(代码开源)——就是后面的三个类文件;

  2. 第二部分是介绍《2048》的需求分析;

  3. 第三部分:第75集《2048》最初版的算法代码;

  4. 第四部分:代码的更新(第76到108集,与《2048》项目有关的部分);

  5. 第五部分:花三集完善《2048》代码(仅整理了每集的逻辑结构,我没放代码)。


(后面第二到四部分,是便于读者跳转,写给那些想只观看《2048》项目相关的视频内容的读者,做的整理)

(如果你想改代码的话,建议看看第二到四部分,复习一下二维数组和枚举——不想改代码的话,可以只看前言和第一部分)


(这个《2048》项目,对应大学课程,相当于是大一第2学期的期末实训周项目,本来还应该按照特定格式,用Word文档写实训报告,但我赶时间求职,改做跳转链接整理


前言部分:C#代码文件的使用方法

——在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行代码)


确保下面四个文件都不报错:

  1. GameCore.cs

  2. Location.cs

  3. MoveDirection.cs

  4. Program.cs

然后你就可以点左上角菜单“调试” - “开始执行”(ctrl+F5),在控制台玩《2048》了。


(后面第二到四部分,是便于读者跳转,做的整理)

第二部分:介绍《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为空白格子,同时提到如何合并。

图1_第74集干货


第三部分:第75集《2048》最初版的算法代码

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()”(入口函数)里面做个测试

图2_第75集的逻辑结构(折叠的节点,就是前面几段的代码块)


第四部分:代码的更新

随着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》

  1. 只能说尽量理解,毕竟是大一第二学期的期末考试,第89集相对于大一第二学期开学不久(第二学期第一个月?)

  2. 火候没到

第90集学新知识点“枚举”(枚举[méi jǔ]:一个个的列举出来)

好处1,增强代码可读性

好处2,可以利用代码助手,做选择题,而不是看重载做填空题

(枚举限定了调用者的取值)


第106集和第107集,对应《原神》游戏的主线剧情,相当于是在“风龙废墟”区域,寻找“导光机关”,解锁副本

图3_第106集_二维数组获取各方向数据

本集代码:


P107,二维数组助手类

图4_第107集_二维数组助手类

文件代码DoubleArrayHelper.cs

调用测试

P107 - 16:52,杂谈,可以直接下一集

1. 实际参数可以根据需求变,这里只有上下左右,可以拓展为八个方向

2. 在Direction.cs文件中用到了静态属性,类名一点,方向就拿到了

3. DoubleArrayHelper可以做成静态类


第五部分:花三集完善《2048》代码

对应《原神》游戏的主线剧情,相当于是在“风龙废墟”区域的副本崩塌时,特瓦林来救主角团的那段动画(直到安柏说“啊,是你们!荣誉骑士凯旋归来啦。”就对应)

第109集,是做《2048》核心类的第一个(移动)

图5(第109集)2048核心类,第一个,移动

第110集,是做《2048》核心类的第二个(生成数字)

图6_第110集_逻辑结构

第111集,主要是了解MVC架构和面向对象思想的“分而治之”。

图6_第111集_逻辑结构


这个《2048》项目,对应《原神》游戏的主线剧情,相当于是击败风魔龙的主线副本,然后视频教程AV28779788的第112集,相当于是从 “与安柏一起打扫战场,到与风神巴巴托斯交换情报,告别蒙德” 这个阶段的剧情)


这个《2048》项目,也相当于《Sword Art Online》(刀剑神域系列动画版)主角Kirito在发现Heathcliff是不可破坏物体后,茅场晶彦邀请桐谷和人一对一比赛。

如果你只看《刀剑神域》前14集(艾恩葛朗特篇),看到主角桐谷和人苏醒后消失在走廊

——就相当于是玩《原神》游戏,主线第一章玩到帝君遇刺时,要你绕过千岩军潜行出去这个任务反复失败,你卡关了,然后不玩了。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1