我的任务是写一篇赞美面向对象编程优点的文章,并创建一个附带的游戏来展示它们。
我最初的想法是找到一个用不遵循 OOP 范式的编程语言编写的简单游戏的教程(或用 OOP 语言编写但不是以 OOP 方式编写)并使用 C# 或 Java 以 OOP 方式重新创建它(尚未决定)。这将使我能够在两者之间进行具体比较。
游戏不必太复杂;俄罗斯方块、乒乓球等等之类的东西。到目前为止我遇到的问题是找到合适的教程,有什么建议吗?
我的任务是写一篇赞美面向对象编程优点的文章,并创建一个附带的游戏来展示它们。
我最初的想法是找到一个用不遵循 OOP 范式的编程语言编写的简单游戏的教程(或用 OOP 语言编写但不是以 OOP 方式编写)并使用 C# 或 Java 以 OOP 方式重新创建它(尚未决定)。这将使我能够在两者之间进行具体比较。
游戏不必太复杂;俄罗斯方块、乒乓球等等之类的东西。到目前为止我遇到的问题是找到合适的教程,有什么建议吗?
假设您找到了一个不在 OOP 中的游戏的源代码。您可以在文章中指出一些 OOP 美德:
组织。 由于游戏有很多任务,因此将职责分配给一个类是一个好主意。这意味着编写一个记录分数的类,一个进行文件访问的类(例如读写游戏状态),代表你的角色的类等。否则,你将拥有一个包含数千行代码的巨大文本文件。甚至看它都是一场噩梦,更不用说找到你需要的东西并修复它了。
封装。 这是为了更好的组织将属性和功能组合在一起。我们曾经有一个不同的数组来存储每个属性 - (例如)一个数组用于飞机名称,一个数组用于火力,另一个数组用于最高速度等。这很糟糕,因为您需要确保所有这些数组的索引相同实际上描述了正确的飞机。最好创建一个 Aircraft 对象并给它那些属性名称。然后,您将拥有一个容纳飞机的阵列 - 无需跟踪太多阵列。
可重用性。 随着您编写更多游戏(甚至是其他应用程序),您会遇到重用类的需求。例如,您将在纸牌游戏中使用与您将来编写的任何纸牌游戏相同的 Card 类。
多态性/继承。 假设你想在某种网格中显示每个角色——英雄和恶棍。您将希望 Hero 和 Villain 都继承 Character。Character 将具有共同的属性,甚至还有一个 [n abstract] Display() 函数。然后,您将为 Character 和 Villain(访问特定于类的数据以进行绘图)编写自定义 Display() 函数。然后,您创建一个 Character 对象数组,您可以在每个插槽中存储一个 Villain 或 Hero。当游戏通过该列表进行显示时,每个 item.Display() 调用都会根据角色的实际类型自动选择正确的 Display() 函数。尝试在没有 OOP 的情况下执行此操作,您最终会得到一个很长的 if-else(甚至可能是嵌套的)语句和一个地方的所有绘图例程。
这只是我从一般编程经验中得出的结论,您绝对可以将其应用于游戏编程。OOP 方面可能比提到的要多,所以你可能想研究一下。最好的一切为你的文章!
您可以尝试从TICalc、Omnimaga或大多数其他计算器编程网站获取(简单)TI-Basic 游戏并尝试理解其代码。
试试这个网站的 BASIC 游戏: