今天艰难的任务.我已经在圈子里工作了大约五个小时.我只是无法绕过这个,看看这个上的雾.这是我们老师今晚指派的作业:
创建一个名为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课程,但他们基本上只有一种方法可以让他们回归摇滚,纸张和剪刀.我不是要求任何人为我制作这个游戏,但任何人都可以让我指出正确的方向吗?谢谢大家!
听起来你需要一个用抽象方法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)