如何按顺序输出岩石剪刀剪刀



创建一个名为Computer的基类,并创建从该基类继承的两个子类。一个子类需要按固定顺序输出岩石、纸张、剪刀:纸张、剪刀、岩石。另一个子类计算机随机输出石头、纸、剪刀

我已经知道如何让电脑随机输出石头、纸、剪刀,但如何让电脑按固定顺序输出纸、剪刀、石头?我的想法是使用全局变量。我设置了一个全局变量,在计算机的每个输出后加一个,并使用if语句来实现固定的输出顺序。

但这不是一个好方法,因为如果计算机要输出石头、石头、剪刀,并且有重复的动作,那么使用if似乎不是一个不错的选择。有更好的方法吗?

这是我的代码:

计算机.h

#ifndef COMPUTER
#define COMPUTER
class Computer{
public:
Computer();
char makeMove();
};
#endif

computer.cpp

#include "Computer.h"
Computer::Computer() {
}
char Computer::makeMove() {
return 'R';
}

固定订单打印

#ifndef CRESCENDO
#define CRESCENDO
int count = 1;
class Crescendo : public Computer {
public:
Crescendo();
char C_moves();
}
#endif

功能文件

#include "Crescendo.h"
Crescendo::Crescendo() {
}
char Crescendo::C_moves() {
if (count == 1) {
return 'P';
}
else if(count == 2) {
return 'S';
}
else if (count == 3){
return 'R';
}
count++;
}

谢谢大家。

正如其他人所指出的,如果可能的话,全局变量是需要避免的。

您可能需要子类的多个实例,并且很可能希望它们进行不同的移动序列。

为了便于说明,我把它们都放在一个文件中。请注意Crescendo的两个实例是如何独立运行的。

预期输出:

Computer...
R
R
R
Now Crescendo...
P
S
R
P
S
R
P
P
S

#include <iostream>
class Computer{
public:
Computer();
virtual char makeMove(); //virtual means subclasses will override this. 
};
Computer::Computer(){ }
char Computer::makeMove(){
return 'R';
}
class Crescendo : public Computer {
public:
Crescendo();
virtual char makeMove();//Not sure why you chose c_moves().
private:
int count;
};
Crescendo::Crescendo() : count{0} {//This initialises the count of moves.

}
static const char moves[]{'P','S','R'};//Store the move sequence as an array.
char Crescendo::makeMove() {

char move{moves[count]};

++count;
if(count>2){//Remember to loop round!
count=0;
}

return move;
}

int main() {
Computer computer;

std::cout << "Computer...n";
std::cout << computer.makeMove()<<'n';
std::cout << computer.makeMove()<<'n';
std::cout << computer.makeMove()<<'n';

Crescendo crescendo;
std::cout << "Now Crescendo...n";
std::cout << crescendo.makeMove()<<'n';

std::cout << crescendo.makeMove()<<'n';
std::cout << crescendo.makeMove()<<'n';
std::cout << crescendo.makeMove()<<'n';
std::cout << crescendo.makeMove()<<'n';
std::cout << crescendo.makeMove()<<'n';
Crescendo crescendoB;

std::cout << crescendoB.makeMove()<<'n';
std::cout << crescendo.makeMove()<<'n';
std::cout << crescendoB.makeMove()<<'n';

return 0;
}

最新更新