背景知识
自从上
一篇文章撰写以来已经有一段时间了。 按照承诺,我写了第二部分。 我要感谢所有在评论中提供建议的人,从中我能够学习到一些新东西。 好吧,对于那些希望立即看到该项目的人,
这里是 GitHub项目
的链接 。
只是要注意,此版本中添加和更改的所有内容都是通过非常
很多工作,很多错误。 我的Google收到了大量请求,从MVP的实现功能到异步方法。

更新内容
- 添加了自己的地图编辑器(与原始游戏一样)。
- 更完善的实现。
- 增加了追上驴子和旋转的能力。
- 添加了许多类型的鱼。
- 大大提高了项目绩效。
- 修复了大量错误。
- 此外,在应用程序的体系结构(更确切地说,其外观)上也有重大改进。
- 添加了保存玩家资料。
- 实现的奖杯。
- 增加了白天和黑夜的变化。
- 旅行已添加。
- 开设杂货店。
- 实施了MVP模式。
- 在游戏中实施事件系统
- 诱饵,具有混合成分的能力
- 添加了语音表演
- 添加了动画
- 取决于鱼的大小和生存时间来进行鱼竿的磨损
我将对README Git项目文件进行更多更改。
别人的代码是如何被误导的。

我们在屏幕快照中看到了用于钓鱼的地图编辑器,即每个位置的深度网格(这些是FormBorderStyle = 0的Label元素,以便显示框架)。 顺便说一下,截图是使用我自己的
剪刀制作的。 怎么了
源代码for (int x = 0; x < 51; x++){ for (int y = 0; y < 18; y++){ Point between = new Point(Game.CastPoint.X - LVL.Deeparr[x, y].Location.X, Game.CastPoint.Y - LVL.Deeparr[x, y].Location.Y); float distance = (float)Math.Sqrt(between.X * between.X + between.Y * between.Y); if (distance < 20){ if (Player.getPlayer().lure != null){ Game.gui.DeepLabel.Text = LVL.Deeparr[x, y].Tag.ToString(); Sounder.setY(x); Sounder.setX(y); } } Game.Deep = Convert.ToInt32(Game.gui.DeepLabel.Text); } }
在这里,我们看到了一个二维数组的简单遍历(而不是正确的遍历)。 然后,我们根据勾股定理计算斜边,如果<20,则确定所需的像元。 但是,即使使用正方形,此方法也非常糟糕。 这是矩形。 因此,经常会错误地检测到该单元。 为了辩护,我可以说我是从YouTube那里获取此代码的。
因此,我们需要确定光标位于哪个单元格中。 为此,您可以使用以下源代码:
代号 for (var y = 0; y < CurLvl.Height; y++) { for (var x = 0; x < CurLvl.Widgth; x++) { var r = new Rectangle(CurLvl.DeepArray[x, y].Location, new System.Drawing.Size(LabelInfo.Width, LabelInfo.Height)); if (r.IntersectsWith(new Rectangle(point, new System.Drawing.Size(1, 1)))) { //SomeCode } } }
在这里,我们获取光标的坐标,将其粘贴到PointToClient中,然后将它们传递给Rectangle构造函数,指定大小1和1。然后使用标准的IntersectsWith检查方法,光标交集和标签。 同样,我们不能只处理标签的单击,因为不会显示带有标签的表单。
另外,它允许对3个钓鱼竿实施支撑。
鱼的产生
因此,游戏的主要部分是鱼的产生。 它分为几个阶段:
1.输入位置时,我们来自以下行:
金鱼:25 250-400 [奶酪,蠕虫,Mag,玉米]鱼的大小占最大,最小深度,最大深度的百分数,以及我们得到鱼对象的诱饵列表(请不要忘记通过正则表达式预先检查该行)。 为了使代码美观,我定义了一个将字符串转换为fish的运算符。
public static explicit operator Fish(FishString fs) { return fs.GetFishByStr(); }
结果,这种方法使我们可以编写:
Fish fish = (Fish)new FishString(" : 25 250 - 400 [ , , , ]");
该代码仅作为示例提供,在此项目中找不到此格式。
2,现在我们需要等待扔掉钓鱼竿,之后我们以随机的咬合时间启动定时器(每个钓鱼竿自己的定时器),然后从大小为1000单位的鱼类列表中跟随定时器的刻度,选择栖息深度包括深度的鱼类钓鱼竿。
3.从此列表中,随机选择一条鱼。 我们检查是否可以食用鱼饵,还检查鱼的活动时间与游戏中的当前时间相对应。
4.如果鱼可以吃掉诱饵,我们就对诱饵进行攻击。 我们根据已安装的挂钩下降的机会来计算是否会下降,以及在什么时间之后下降。 如果鱼不能吃掉诱饵,那么我们将循环浏览当前的诱饵(如果有)。 我们检查附近是否有一条鱼会啄到鱼饵上,然后重复同样的事情。
由于生成过程,我已经成为一个自信的LINQ用户。
游戏本身

杂货店的屏幕快照。
可以在资源库中查看其来源。 在那里,用于修改食物图像的MouseEnter和MouseLeft处理程序非常有趣。

旅行表格的屏幕截图。 (所有水体均经过测试,其名称不是真实的。)

游戏截图
计划
- 为游戏制作客户端服务器
- 初级FPGA(FPGA)开发人员
- 通过网络摄像头进行人脸识别(我正在寻找可能有用的文献)
- 用ObjectListView替换常规ListView
在上一篇文章的结尾,我写道我想找到一份工作。 好吧,在9月,尽管在C语言中,我还是通过SNMP关闭了我的第一个TOR。
结论
这个项目已经变得很大,至少有一个理想的但非常不错的代码库,易于维护,在某些地方可能违反了SOLID的原理,但这是由于该项目很长。 另外,如果您是新手开发人员,并且正在寻找可以参与的项目,则可以对该存储库进行提交。 预期更改的列表可以在项目的README文件中找到。
我还要指出的是,我在C#开发人员的职业生涯中看不到任何前景,或者我希望更接近硬件,因此我尝试研究低级语言。
谢谢所有读到最后的人,任何对源代码的批评都将受到欢迎,我们将立即予以考虑。