1.类飞行棋游戏 :
要求:尝试应用enum枚举类型定义游戏的状态,包括WIN,LOSE和CONTINUE三种状态,同时应用用continue和break语句设计类似飞行棋游戏:自己定义一个规则,比如:设定目标位置是20,起始位置是0,若投掷的骰子点数+当前位置>目标位置,就进行下一次循环;否则,当前位置就改为当前位置+点数;若点数+当前位置==目标位置,就退出循环,游戏结束;游戏状态是CONTINUE,则继续游戏。点数随机获取。当游戏状态是WIN时,输出“你赢了”,游戏状态是LOSE时,输出“你输了”。
实现代码1:
#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;
enum GameState {
WIN,
LOSE,
CONTINUE
};
int main()
{
GameState State = CONTINUE;
const int targetPosition = 20; // 目标位置
int currentPosition = 0; // 当前位置
int i = 1; //游戏当前进行次数(最多循环四次)
srand(time(0)); // 设置随机数
cout << "开始游戏,游戏最多进行4轮" << endl;
cout << "当前轮数:" << i << endl;
Sleep(2000);
cout << endl;
cout << "当前位置:0" << endl;
cout << endl;
Sleep(2000);
while (i < 5)
{
int diceRoll = rand() % 6 + 1; // 掷骰子,生成1到6之间的随机数
cout << "骰子点数:" << diceRoll << endl;
if (diceRoll + currentPosition > targetPosition)
{
// 若点数+当前位置超过目标位置,则进行下一次循环
currentPosition = currentPosition + diceRoll - 20;
i++;
cout << "当前位置:" << currentPosition << "(超出20,未达到目标点,自动-20)\n (游戏继续)" << endl;
cout << "当前轮数:" << i << endl;
cout << endl;
State = LOSE;
continue;
}
else
{
currentPosition += diceRoll; // 当前位置改为当前位置+点数
cout << "当前位置:" << currentPosition << endl;
cout << endl;
State = CONTINUE;
Sleep(1500);
if (currentPosition == targetPosition)
{
// 若点数+当前位置等于目标位置,游戏结束,退出循环
cout << "当前位置:20" << endl;
State = WIN;
break;
}
}
}
cout << "游戏结束!" << endl;
cout << "最终位置:" << currentPosition << endl;
cout << endl;
if (WIN == State)
cout << "您在第" << i << "轮达到目标位置,你赢了!" << endl;
else if (LOSE == State)
cout << "次数用尽仍未达到目标,你输了!" << endl;
return 0;
}
基本思路为首先在while循环开始前srand(time(0)) 设置随机种子,接着开始循环,用rand()%+1模拟掷骰子,设置开始位置为0,目标位置为20。不断掷骰子,一旦位置超过了20,立即-20继续循环,同时将游戏轮数+1。当游戏在4轮内达到目标位置20则获胜,反之失败。
实现代码2:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main(){
enum State{Win,Lose,Continue};
State aState=Win;
int aim=20;//设定
int start=0;
for (;;srand(time(0))){//使种子不同
int num=rand()%6+1;//随机数
if(num+start>aim){
aState=Lose;
start=0;//新一局初始化起点
cout<<"你输了"<<endl;
continue;//大循环
}
else{
start+=num;
if(num+start==aim){
aState=Win;
cout<<"你赢了"<<endl;
break;
}
if(start+num<aim){
aState=Continue;
}
}
};
return 0;
}
实现代码3:
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main()
{
enum State{Continue,Win,Lose
};
State Pstate=Continue;
cout<<"欢迎来到飞行棋游戏!"<<endl<<"您的初始位置为0,目标位置为20。您一共只有六次机会,请开始投掷骰子。"<<endl;
int present=0;
srand(static_cast<unsigned int>(time(0)));
for(int i=1;i<=6;i++)
{
int origin=rand()%6+1;
present+=origin;
cout<<"您的当前位置是"<<present<<endl;
if(present>20)
{
Pstate=Continue;
cout<<"您已超出目标位置,请您重新投掷骰子。"<<endl;
present=present-origin;
continue;
}
if(present==20)
{
Pstate=Win;
cout<<"游戏结束,您赢了!"<<endl;
break;
}
}
if(present<20)
{
Pstate=Lose;
cout<<"游戏结束,您输了!"<<endl;
}
return 0;
}
我们一位组员用到了#include<bits/stdc++.h>头文件
#include<bits/stdc++.h>
是一个非标准的头文件,它常用于竞赛编程或快速原型开发时,方便地包含了标准库中的大部分常用头文件。
<bits/stdc++.h>
头文件实际上包含了以下常用的标准头文件:(下面有些看看就行)
<iostream>
:输入输出流库,用于标准输入输出。<iomanip>
:输入输出格式库,用于流操作符的设置。<fstream>
:文件输入输出库,用于文件读写操作。<cstdio>
:C风格输入输出库,提供了与C语言类似的输入输出函数。<cstdlib>
:C标准库,提供了一些通用的函数和类型定义。<cmath>
:数学库,提供了各种数学函数。<algorithm>
:算法库,提供了一些常用的算法函数。<vector>
:向量容器库,提供了向量操作相关的函数和类。<list>
:链表容器库,提供了链表操作相关的函数和类。<deque>
:双端队列容器库,提供了双端队列操作相关的函数和类。<queue>
:队列容器库,提供了队列操作相关的函数和类。<stack>
:栈容器库,提供了栈操作相关的函数和类。<set>
:集合容器库ÿ