gpt4 book ai didi

oop - 帮助设计国际象棋游戏

转载 作者:行者123 更新时间:2023-12-04 06:45:27 25 4
gpt4 key购买 nike

我是一名尝试学习设计的 C++ 程序员,作为开始,我试图通过给自己一个任务来为国际象棋游戏进行 OO 设计来掌握设计的窍门。这不是一个家庭作业 q 只是想培养一些技能.
以下是我到目前为止的想法的摘要:
一个“棋子”类,它将保存棋子在棋盘上的当前位置。
专业类“ Camel ”“马”“女王”“骑士”“典当”和“大象”将派生自“棋子”类。这些类中的每一个都将包含 2 个成员,“不允许移动的地方”和“移动规则”,并获取检索相同的方法。

一个基本的“播放器”类,将由“BlackPiecePlayer”和“WhitePiecePlayer”类扩展。这些类中的每一个都将包含另一个名为“PieceManager”的类实例。“PieceManager”类将决定在棋盘上移动棋子的逻辑。

一个“ChessBoard”类,它将保存棋盘上所有棋子的映射,并可以访问一组可以移动棋子的规则。它将提供接口(interface)来验证“PieceManager”计算的移动,然后在更新自己的映射时进行移动。

这是我可以可视化的通用流程。一个类“WhitePiecePlayer”被要求出手,它会要求自己的“WhitePieceManager”出手。 “WhitePieceManager”将通过“Board”类的接口(interface)访问棋子在棋盘上的位置。然后它将使用其内部逻辑来计算棋子的移动。每个棋子都存储其位置,因此它会计算该棋子的位置。然后通过调用 Board 类的方法验证移动是可能的,然后使用 Board 类接口(interface)进行移动..等等..

对不起,长篇大论,我只是想对设计产生一种感觉,这就是我现在的想法,你认为它是一个好的开始还是关于如何让它变得更好的任何建议(如果它是正确的)

最佳答案

几点建议

  • 您对棋子相关类的层次结构似乎是合理的(尽管使用棋子的专有名称 Knight、Rook 和 Bishop 可能比 Horse、Camel 和 Elephant 更可取)。
  • 我不会存储一 block 允许移动的方格数。您可能希望在“移动规则”方法中对其进行编码,因为这可能会根据情况而改变。一个棋子可以在其初始移动中移动两个格子,然后在后续移动中移动一个格子。除非是易位,否则国王只能移动一格。
  • 您的棋子类将需要某种方法来获取所有棋子的有效移动的列表,以便将这些信息提供给将要选择移动的引擎。
  • 您不需要 BlackPiecePlayer 和 WhitePiecePlayer 类。您只需要实例化 Player 类的两个不同实例并确保存在“颜色”属性。
  • ChessBoard 类是一个好主意,它需要表示棋子的位置,但它不应该实现逻辑评估移动。这是移动引擎要做的事情。

  • 正如 Javier 所讨论的那样,构建一个国际象棋程序可能需要在设计一个有效的选择走法的算法上付出相当多的努力。假设您的意图是应用 OO 概念,而不是深入讨论如何构建国际象棋引擎(这通常会牺牲 OO 纯度以获得更好的性能),并假设您想要构建可以玩得足够好的东西有趣,您可能要考虑实现 antichess而不是普通的国际象棋。从 OO 的角度来看,它本质上是一个相同的问题,但最终结果是在没有花费数百小时掌握国际象棋算法的情况下,可以玩得相当好。这比一个玩得很糟糕的国际象棋程序要有趣得多。

    关于oop - 帮助设计国际象棋游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3793676/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com