使用每个类创建一个Rock-Paper-Scissors游戏

Sco*_*ers 0 c# oop

今天艰难的任务.我已经在圈子里工作了大约五个小时.我只是无法绕过这个,看看这个上的雾.这是我们老师今晚指派的作业:

创建一个名为RockPaperScissors的新Visual Studio控制台应用程序.

Rock/Paper/Scissors游戏有以下规则:

  • Scissor总是赢得Paper
  • 洛克总是赢得反对剪刀
  • 纸总是胜过Rock

创建以下三个遵循以下规则的类:

  • PlayerRock - 始终执行Rock的Act().

  • PlayerScissors - 总是执行Scissors的Act().

  • PlayerPaper - 始终执行Paper的Act().

创建一个具有名为Fight()的方法的Game类,以满足这些要求:

  • Fight()方法接受两个参数:Player1和Player2.

  • Fight()方法调用两个玩家的Act()方法.

  • Fight()方法使用上面的Rock/Paper/Scissors规则返回获胜玩家.

经过100轮比赛,哪位球员获胜?

我可以轻松地将游戏逻辑和脚本编写出来,没问题.如何使每个武器的法案方法成为现实?并传递一个player1和player2?我是否需要类来创建新的播放器对象?我有Rock,Paper,Scissors课程,但他们基本上只有一种方法可以让他们回归摇滚,纸张和剪刀.我不是要求任何人为我制作这个游戏,但任何人都可以让我指出正确的方向吗?谢谢大家!

Gal*_*lax 5

听起来你需要一个用抽象方法abstract调用的基类Player,Act()它返回一个GameAction(可能只是一个enum,除非你想在GameAction类中编码游戏逻辑,这很好).

您可以从中派生三个类PlayerRock等,Player并覆盖Act()每个派生类中的方法.

调用Game.Fight(Player player1, Player player2),传入派生的玩家类的两个实例.在内部Fight(...)你应该调用Act()两个玩家的方法,并根据结果决定谁赢了(如果有的话).

同一个玩家每次都会获胜,但不需要100轮才能表现出来.也许你应该随机生成一些玩家,或者稍后让一些玩家采用更微妙的策略?

抽象和具体类的示例:

namespace RockPaperScissors
{
    enum GameAction
    {
        Rock,
        Paper,
        Scissors
    }

    abstract class Player
    {
        public abstract GameAction Act();
    }

    class PlayerRock : Player
    {
        public override GameAction Act()
        {
            return GameAction.Rock;
        }
    }
Run Code Online (Sandbox Code Playgroud)