C++面向对象课程设计-1

C++面向对象课程设计一一 之1

教学游戏:
#include <iostream>
#include <string>
#include <ctime>

using namespace std;

void rand_seed()
{
	int seed = static_cast<int>(time(0));
	srand(seed);
}

int rand_int(int a, int b)
{
	return a + rand() % (b - a + 1);
}

class Player
{
public:
	Player();
	Player(string player_name, int initial_level);
	void increment_score();
	int get_score() const;
	int get_level() const;
	string get_name() const;

private:
	string name;
	int score;
	int level;
};

Player::Player()
{
	name = "";
	score = 0;
	level = 1;
}

Player::Player(string player_name, int initial_level)
{
	name = player_name;
	score = 0;
	level = initial_level;
}

void Player::increment_score()
{
	score++;
	if (score % 5 == 0 && level < 4)
		level++;
}

int Player::get_level() const
{
	return level;
}

int Player::get_score() const
{
	return score;
}

string Player::get_name() const
{
	return name;
}


class Game
{
public:
	Game();
	void play();
	void read_player_information();
	void play_round();
	int get_guess(int v1, int v2, int answer, string operation);

private:
	Player player;
};

Game::Game()
{
	player = Player();
}

void Game::play()
{
	read_player_information();
	string response;
	do
	{
		play_round();
		cout << "你想继续挑战吗? 如果继续挑战请输入y,否则输入n退出游戏\n";
		cin >> response;
	} while (response == "y");
}

void Game::read_player_information()
{
	cout << "请输入你的名字:";
	string name;
	cin >> name;
	int initial_level = 0;
	do
	{
		cout << "请选择所需挑战的难度(1-4):";
		cin >> initial_level;
	} while (initial_level < 1 || initial_level > 4);
	player = Player(name, initial_level);
}

void Game::play_round()
{
	int i1 = 0;
	int i2 = 0;
	int answer = 0;

	if (player.get_level() == 1)
		do
		{
			i1 = rand_int(1, 9);
			i2 = rand_int(1, 9);
			answer = i1 + i2;
		} while (answer > 9);
	else if (player.get_level() == 2)
	{
		i1 = rand_int(1, 9);
		i2 = rand_int(1, 9);
		answer = i1 + i2;
	}
	else if (player.get_level() == 3)
		do
		{
			i1 = rand_int(1, 9);
			i2 = rand_int(1, 9);
			answer = i1 - i2;
		} while (answer < 0);
	else if (player.get_level() == 4)
	{
		i1 = rand_int(10, 99);
		i2 = rand_int(10, 99);
		answer = i1 + i2;
	}
		int guess;
		if (player.get_level()!=3)
			guess = get_guess(i1, i2, answer, " + ");
		else
			guess = get_guess(i1, i2, answer, " - ");

		if (answer == guess)
		{
			player.increment_score();
			cout << "恭喜!" << player.get_name() << "你答对了!" << "\n";
		}
		else
		{
			cout << "抱歉!  " << player.get_name() << "你回答错误!"
				<< answer << ".\n";
		}
		cout << "你的分数为:" << player.get_score() << "\n";
}

int Game::get_guess(int v1, int v2, int answer, string operation)
{
	int guess;
	int tries = 2;
	do
	{
		cout << "请输入: " << v1 << operation << v2 << " 的答案:  " <<player.get_name()<< "你的挑战等级为:" << player.get_level() << endl;
		cin >> guess;
		if (answer == guess)
			return guess;
		else
			cout << "抱歉,你答错了,请在尝试一次:\n";
		tries--;
	} while (tries > 0);
	return guess;
}

int main()
{
	Game mathquiz;
	rand_seed();
	mathquiz.play();
	return 0;
}

运行测试如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值