C++程序设计实践里面石头剪刀布版王者农药实例

C++里面程序设计实践里面石头剪刀布版的王者农药实例:

算法分析:

我们需要构造一个英雄类,里面包含英雄的名字,使用次数以及血量(由于第一次使用,所以暂时没有血量)`

class Hero {
private:
	string name;
	int times;
	int blood;
public:
	Hero();
	Hero(string n, int t, int b) {
		name = n; times = t; blood = b;
	}
	void CreateHero();
	void PlayGames();
	bool isWin(int a, int b);
	bool isEnd(int a);
	int Score(int a,int b,int c);
	void Game();
	void Start();
	void Rules();
};

调用构造函数:

Hero::Hero() {}
Hero hero[N] = { Hero("赵云",10,120),Hero("宫本武藏",10,120),Hero("凯",10,120),Hero("白起",10,120),Hero("韩信",10,120),
                 Hero("诸葛亮",10,120),Hero("刘邦",10,120),Hero("妲己",10,120),Hero("安琪拉",10,120),Hero("貂蝉",10,120),
	             Hero("露娜",10,120),Hero("不知火舞",10,120),Hero("蔡文姬",10,120),Hero("鲁班七号",10,120),Hero("后羿",10,105),
                 Hero("扁鹊",10,115),Hero("马可波罗",10,150),Hero("李白",10,150),Hero("关羽",10,160),Hero("曹操",10,100)};
void Hero::CreateHero() {
	cout << "序号" << " " << "名字" << " " << "次数" << " " << "血量" << endl;
	for (int i = 0; i < N; i++) {
		if (hero[i].times == 0) hero[i].times += 10;
		cout <<" "<< i+1 << ":"<<hero[i].name << "," << hero[i].times <<  "," <<hero[i].blood << endl;
	}

关键部分需要

以上是进行初始化以及英雄的创建
现在开始玩游戏以及正片。
首先定义招法:石头剪刀布,参照所学知识以及翻阅相应资料得:

const int N = 20;//这里由于有20个英雄所以就这么定义无法修改。以免混淆
enum Choice{Rocks,Scissors,Papers};
enum Result{You,Me,Tie};

游戏主算法:

void Hero::PlayGames() {
	Hero *h;
	h = hero;
	//int x, y, z;
	Choice machine, index; 
	Result winner = You;
	int count1 = 0, count2 = 0,count3 = 0;
	int count = 0;
	int b[5];
	int x = 0;
	int c;
	cout << "Please input the number of players to start 3 or 5" << endl;
	cin >> c;
	cout << "please make your choice except for machine that has chosen form hero" << endl;
	for (int j = 0; j < c; j++)
		cin >> b[j];
	for (int j = 0; j < c; j++)
	cout << h[b[j]-1].name << ","<<h[b[j]-1].times << ","<<h[b[j]-1].blood << endl;
	int i;//上述部分是建立游戏的开始
	switch (c) {
	case 3:
		cout << "Please input n for the first player." << endl;
		cin >> i;
		system("cls");
		switch (i) {
		case 1:
			cout << h[b[0] - 1].name << "," << h[b[0] - 1].times << "," << h[b[0] - 1].blood << endl;
			break;
		case 2:
			cout << h[b[1] - 1].name << "," << h[b[1] - 1].times << "," << h[b[1] - 1].blood << endl;
			break;
		case 3:
			cout << h[b[2] - 1].name << "," << h[b[2] - 1].times << "," << h[b[2] - 1].blood << endl;
			break;
		}
		break;
case 5:
		cout << "Please input n for the first player." << endl;
		cin >> i;
		system("cls");
		switch (i) {
		case 1:
			cout << h[b[0] - 1].name << "," << h[b[0] - 1].times << "," << h[b[0] - 1].blood << endl;
			break;
		case 2:
			cout << h[b[1] - 1].name << "," << h[b[1] - 1].times << "," << h[b[1] - 1].blood << endl;
			break;
		case 3:
			cout << h[b[2] - 1].name << "," << h[b[2] - 1].times << "," << h[b[2] - 1].blood << endl;
			break;
		case 4:
			cout << h[b[3] - 1].name << "," << h[b[3] - 1].times << "," << h[b[3] - 1].blood << endl;
			break;
		case 5:
			cout << h[b[4] - 1].name << "," << h[b[4] - 1].times << "," << h[b[4] - 1].blood << endl;
			break;
		}
		break;
	}//选择三人模式还是五人模式
system("pause");
	cout << "Start now" << endl;//以下是正片
	while (true) {
		string str;
		char ch;
		char winner='M';
		cout << h[b[i - 1]-1].name << "," << h[b[i - 1]-1].times << "," << h[b[i - 1]-1].blood << endl;
		cout << "Press R/P/S to VS.(R for Rocks,P for Paper and S for Scissors)" << endl;
		cin >> ch;//人工操作
		switch (ch) {
		case 'R':
		case 'r':
			index = Rocks;
			break;
		case 'P':
		case 'p':
			index = Papers;
			break;
		case 'S':
		case 's':
			index = Scissors;
			break;
		default:
			continue;
		}
		int n = rand() % 3;
		switch (n)//机器输入
		{
		case 0:machine = Scissors; str = "Scissors";
			break;
		case 1:machine = Papers; str = "Papers";
			break;
		case 2:
			machine = Rocks; str = "Rocks";
			break;
		}
		cout << str << endl;
		if (index == Scissors && machine == Rocks || index == Rocks && machine == Papers || index == Papers && machine == Scissors)//判断胜负的算法
			winner = You;
		else if (index == Scissors && machine == Papers || index == Papers && machine == Rocks || index == Rocks && machine == Scissors)
			winner = Me;
		else if (index == machine)
			winner = Tie;
		switch (winner) {
		case Me:cout << "You Win!" << endl << endl; count1++; break;
		case You:cout << "You Lose!" << endl << endl; count2++; break;
		case Tie:cout << "It is a tie!" << endl << endl; count3++; break;
		}
		h[b[i-1]-1].times--;
		if (h[b[i-1]-1].times == 0 ) {
			for (int j = 0; j < c; j++) {
				if (h[b[j]-1].times == 0)
					cout << (j + 1) << "," << h[b[j]-1].name << "OUT!" << endl;
			}
			cout << "You have just used all your chances for your current hero! make your choice.\a" << endl;
			cin >> i;
			count++;
			if (i != 1 && i != 2 && i != 3 && h[b[i-1]-1].times==0) continue;//以防重复选取
		}
		if (count==c) break;
		x++;
		if( x % 7 == 0 )//由于会有太多,所以清个屏
		system("cls");
	}
	int total = Score(count1, count2, count3);
	cout << "You have just won " << total << " points" << endl;//判断得分
	if (isWin(count1, count2))//判断胜负
		cout << "You Win!" << endl;
	else
		cout << "You Lose!" << endl;
}

其他函数辅助

1.开始函数(进行开始界面)

void Hero::Start() {
	cout << "Press numbers to choose menu." << endl;
	cout << "1.Start game" << endl;
	cout << "2.Record" << endl;
	cout << "3.Rules" << endl;
	Hero hero;
	int a;
	cin >> a;
	switch (a) {
	case 1:
		system("cls");
		hero.Game();
		break;
	case 2:
		break;
	case 3:
		system("cls");
		hero.Rules();
		break;
	}
}

就是怎么来让已经使用的英雄招法次数恢复默认有点问题,我只能使用加回去方法,恳请诸位大佬进行指点江山。

2.进行相应函数创建

void Hero::Rules() {
	cout << "It is like RPS games." << endl;
	cout << "R is for Rocks." << endl;
	cout << "P is for Paper." << endl;
	cout << "S is for Scissors" << endl;
	cout << "According to the rules for RPS to judge win or lose to calculate marks." << endl;
}
bool Hero::isWin(int a, int b) {//判断你输了还是你赢了
	return a > b;
}
bool Hero::isEnd(int a) {//当最后一名玩家招法用完时候游戏结束,即次数够了就结束了
	return a == 0;
}
void Hero::Game() {//游戏创建
	this->CreateHero();
	this->PlayGames();
}
int Hero::Score(int a, int b,int c) {//分数计算方法
	    int sum=0;
		sum = a * 5 - b * 3 + c * 2;
		return sum;
}

主函数

主函数由于不要太长就这样了

int main()
{
	
	char ch='x';
	char b;
	while (true) {
		cout << "\t\t\t\tRPS for 王者农药 1.0.9 version" << endl;
		cout << "\t\t\t\t-------Author YYH" << endl;
		cout << "\t\t\t\tPress random button for start" << endl;
		_getch();//按任意键进行开始
		while (ch == 'x') {
			Hero hero;//建立一个hero对象
			system("cls");
			hero.Start();//游戏进行
			cout << "Continue?(Y for yes N for no)" << endl;//游戏结束
			cin >> b;
			if (b == 'n' || b == 'N')
				break;
        }
		cout << "Press E for exit game." << endl;
		char a;
		cin >> a;
		if (a == 'E' || a == 'e')
			exit(0);//程序退出
		else continue;
	}
	return 0;
}

这是我第一次上传博客,基于程序设计实践进行的操作,是我学习C++一个月以来进行的,里面仍有不完善的地方,恳请诸位大佬指点江山,非常感谢各位大佬进行指点,如果有意见,恳请留言或发送邮箱至2455219437@qq.com

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
里面一、课程设计(论文)题目 :石头-剪刀-布游戏    二、课程设计(论文)工作自 2014 年 6 月23日起至 2014 年 6 月 27日止 三、课程设计(论文) 地点: 8-501 四、课程设计(论文)内容要求: 1. 本课程设计的目的 (1)进一步巩固和加深对“C++程序设计”课程基本知识的理解和掌握,了解C++语言在项目开发中的应用。 (2)学习程序设计开发的一般方法,了解和掌握项目开发过程及方式,培养正确的设计思想和分析问题、解决问题的能力,特别是项目设计能力。 (3)通过对标准化、规范化文档的掌握并查阅有关技术资料等,培养项目设计开发 能力,同时提倡团队合作精神。 2. 课程设计的任务及要求 1) 基本要求: (1) 对系统功能进行需求分析; (2) 使用Visual C++编译器进行程序编译; (3) 提出系统的设计方案; (4) 编写源程序代码并进行调试。 2) 创新要求 在基本要求达到后,可进行创新设计。 3) 课程设计报告撰写及装订要求 课程设计报告的撰写要求表述简明,图表准确。 报告按如下内容和顺序用A4纸进行打印并装订成册。 (1)封面 采用统一的课程设计封面,并按要求填写好封面要求的个人信息和选题。 (2)设计任务书 (3)评阅书 (4)目录 (5)正文 (6)主要参考文献 4) 课程设计评分标准: 每人按指定题目进行设计,严禁抄袭,要求每人自己动手编写程序,采取同一组同时检查程序及运行结果,检查时同组成员每人陈述自己的分工,同一选题不同组如发现代码完全一样,则双方都作不及格处理。 (1)达到课程设计的目的与要求,程序的可读性较好,并调试正确,60分; (2)能正确回答设计的中老师所提问题,可增加10分; (3)课程设计报告书写规范整齐,可增加10分; (4)心得体会认真总结,可增加10分; (5)程序有创新性,可增加10分; 成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。 5) 课程设计进度安排 (1)准备阶段(3学时):选择设计题目、了解设计目的要求、查阅相关资料。 (2)程序模块设计分析阶段(4学时):程序总体设计、详细设计。 (3) 代码编写调试阶段(10学时):程序模块代码编写、调试、测试。 (4) 撰写论文阶段(3学时):总结课程设计任务和设计内容,撰写课程设计论文。 6)课程设计题目具体要求: 在游戏中,孩子们用手表示石头、剪刀或布中的一个,由拳头表示石头,伸出两根手指表示剪刀,伸手表示布,孩子们面对面地从1数到3时做出他们的选择,如果所作选择是一样的,则表示平局,否则就按如下规则决定胜负。 (1)石头砸坏剪刀。 (2)剪刀剪碎布 (3)布覆盖石头 编程实现计算机与人进行游戏。并输出游戏结果。如果屏幕输出笑脸,则表示人胜利;如果屏幕输出哭脸,则表示人失败;输出无奈,则表示平局。并且统计结果。 包含着关于石头剪刀布的设计方案以及改进等等问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值