多态性 - 使用行为 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
,只需使用 %
运算符。
我正在创建一个程序来模拟不同跑步者之间的比赛,使用行为 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
,只需使用 %
运算符。