多态性 - 使用行为 class 来计算跑步者对象的新位置

Polymorphism - using behavior class to compute new position for runner object

我正在创建一个程序来模拟不同跑步者之间的比赛,使用行为 classes 来实现不同类型的跑步者动作。

为此,将实现一个抽象的 MoveBehaviour class,以及其他几个具体的子 class。这些子 classes 之一是 JumpBehaviour class ,它使跑步者保持在同一行并且 将它向前移动 1 到 8 列之间的随机数向右。

我对应该在 JumpBehaviour 的 move() 中放入什么感到困惑 class。我知道我会使用我的 Random.cc class 生成一个随机数,但我对如何实现 'moves it forward by a random number between 1 and 8 of columns to the right.' 感到困惑 oldPos 和 newPos 参数让我感到困惑,因为我不太确定我应该怎么处理它们。我没有 JumpBehaviour 的头文件,因为我被告知可以将行为 class 定义保存在一个文件中,所以我将它放在 MoveBehaviour.h

我真的很感激任何帮助或推动正确的方向。此外,我不确定 MoveBehaviour 中的 move() 函数是否应该默认留空。我不确定它的目的是什么。

Position.cc

#include <iostream>
using namespace std;
#include <string>
#include "Position.h"

Position::Position(int i1, int i2) : row(i1), column(i2){
}

void Position::setRow(int r){
    row = r;
}

void Position::setColumn(int c){
    column = c;
}

JumpBehaviour.cc

#include <iostream>
using namespace std;
#include <string>
#include "MoveBehaviour.h"

void JumpBehaviour::move(Position& oldPos, Position& newPos, string& log) { 
    
} 

Random.cc

#include <iostream>
#include <cstdlib>

int random(int max){
    double r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) ); 
    return (int)(r * max);
} 

I'm confused as to what I'm supposed to put in move() in the JumpBehaviour class. I know I would generate a random number using my Random.cc class, but I'm stumped on how to achieve the 'moves it forward by a random number between 1 and 8 of columns to the right.' The oldPos and newPos parameters confuse me as I'm not really sure what I'm supposed to do with them.

我觉得很清楚了:你生成一个[1..8]范围内的随机数,然后把它加到oldPos得到一个newPos:

newPos.setColumn(oldPos.getColumn() + random(8));

这些参数通过引用传递给您的函数,因此您可以直接修改它们。既然你不应该修改旧位置,你应该声明它 const: const Position& oldPos

您需要修复 random 函数,现在 returns [0..max-1]。不要乱用 double,只需使用 % 运算符。