7.1 程序的源代码
★Main()文件: // 文件路径名:dice_game\main.cpp
#include "utility.h" // 实用程序软件包
#include "dice_game.h" // 骰子游戏
int main(void) // 主函数main(void)
{
DiceGame objGame; // 骰子游戏对象
objGame.Game(); // 运行游戏
system("PAUSE"); // 调用库函数system()
return 0; // 返回值0, 返回操作系统
}
★dice_game.h文件: // 文件路径名: dice_game\dice_game.h
#ifndef __DICE_GAME_H__ // 如果没有定义__DICE_GAME_H__
#define __DICE_GAME_H__ // 那么定义__DICE_GAME_H__
typedef enum{WIN, LOSE, TIE} GameStatus; // WIN:赢,LOSE:输,TIE:平局
// 骰子游戏类DiceGame声明
class DiceGame
{
private:
// 数据成员:
int numOfWin; // 胜利数次
int numOfLose; // 失败数次
int numOfTie; // 平局数次
// 辅助函数
int RollDice(); // 模拟投掷一次骰子
void Help(); // 获得帮助
void Show(); // 显示统计结果
public:
// 方法声明:
DiceGame(); // 无参数的构造函数
virtual ~DiceGame(){} // 析构函数
void Game(); // 模拟游戏
};
// 骰子游戏类DiceGame的实现部分
DiceGame::DiceGame() // 初始化骰子游戏
{
numOfWin = 0; // 胜利数次
numOfLose = 0; // 失败数次
numOfTie = 0; // 平局数次
cout << "游戏开始" << endl;
}
int DiceGame::RollDice() // 模拟投掷一次骰子,返回值为所投掷的两颗骰子向上一面的点数之和
{
int numOfDice1; // 所投掷的第1颗骰子向上一面的点数
int numOfDice2; // 所投掷的第2颗骰子向上一面的点数
int sum; // 所投掷的两颗骰子向上一面的点数之和
numOfDice1 = 1 + Rand::GetRand(6); // 模拟所投掷骰子1的点数
numOfDice2 = 1 + Rand::GetRand(6); // 模拟所投掷骰子2的点数
sum = numOfDice1 + numOfDice2; // 计算所投掷两颗骰子向上一面的点数之和
cout << "选手掷骰子:" << numOfDice1 << "+" << numOfDice2 << "=" << sum << endl;
return sum; // 返回所掷骰子向上一面点数之和
}
void DiceGame::Help() // 获得帮助
{
cout << " 游戏者每次投掷两颗骰子,每个骰子是一个正方体,有" << endl;
cout << "6面上面分别标有1、2、3、4、5、6个圆点,当骰子停止时" << endl;
cout << ",将每个骰子朝上的点的数相加,在第一次投掷骰时, 如果" << endl;
cout << "所得到的和为7或11,那么游戏者为赢得胜利; 如果所得到" << endl;
cout << "的和为2、3或12,那么游戏者为输掉了;如果和为4、5、6" << endl;
cout << "、8、9或10,那么为游戏者的点数;如要想赢得胜利,必" << endl;
cout << "须继续投掷骰子,直到取得自已的点数为止, 但是如果投" << endl;
cout << "掷出的和为7或投掷6次仍未赚到该点数,则游戏者为输了." << endl << endl;
}
void DiceGame::Show() // 显示统计结果
{
cout << "选手游戏统计:" << endl;
cout << "获胜" << numOfWin << "次" << endl;
cout << "失败" << numOfLose << "次" << endl;
cout << "平局" << numOfTie << "次" << endl;
}
void DiceGame::Game() // 模拟游戏
{
int select = 1;
int sum, myPoint;
GameStatus status; // 游戏状态
Rand::SetRandSeed(); // 设置当前时间为随机数种子
Help(); // 获得帮助
while(select!=3)
{
cout << endl << endl << "请选择:" << endl;
cout << "1. 获得帮助" << endl;
cout << "2. 玩一手游戏" << endl;
cout << "3. 退出游戏" << endl;
cin >> select; // 输入选择
if(select!=1&&select!=2&&select!=3) //若输入不是 1,2,3 重新输入
{
cout<<"请用1,2,3回答"<
标准库头文件
#include
// 标准串和操作
#include // 标准流操作
#include // 极限
#include // 数据函数
#include // 文件输入输出
#include // 字符处理
#include // 日期和时间函数
#include // 标准库
#include // 标准输入输出
#include // 输入输出流格式设置
#include // 支持变长函数参数
#include // 支持断言
#else // 其它版本的Visual C++
// ANSI C++标准库头文件
#include // 标准串和操作
#include // 标准流操作
#include // 极限
#include // 数据函数
#include // 文件输入输出
#include // 字符处理
#include // 日期和时间函数
#include // 标准库
#include // 标准输入输出
#include // 输入输出流格式设置
#include // 支持变长函数参数
#include // 支持断言
using namespace std; // 标准库包含在命名空间std中
#endif // _MSC_VER == 1200
#else // 非Visual C++
// ANSI C++标准库头文件
#include // 标准串操作
#include // 标准流操作
#include // 极限
#include // 数据函数
#include // 文件输入输出
#include // 字符处理
#include // 日期和时间函数
#include // 标准库
#include // 标准输入输出
#include // 输入输出流格式设置
#include // 支持变长函数参数
#include // 支持断言
using namespace std; // 标准库包含在命名空间std中
#endif // _MSC_VER
// 实用函数
char GetChar(istream &inStream = cin); // 从输入流inStream中跳过空格及制表符获取一字符
bool UserSaysYes(); // 当用户肯定回答(yes)时, 返回true, 用户否定回答(no)时,返回false
// 函数模板
template
void Swap(ElemType &e1, ElemType &e2); // 交换e1, e2之值
template
void Display(ElemType elem[], int n); // 显示数组elem的各数据元素值
// 实用类
class Timer; // 计时器类Timer
class Error; // 通用异常类
class Rand; // 随机数类Rand
char GetChar(istream &in) // 从输入流in中跳过空格及制表一字符
{
char ch; // 临时变量
while ((ch = in.peek()) != EOF // 文件结束符(peek()函数从输入流中接受1
// 字符,流的当前位置不变)
&& ((ch = in.get()) == ' ' // 空格(get()函数从输入流中接受1字符,流
// 的当前位置向后移1个位置)
|| ch == '\t')); // 制表符
return ch; // 返回字符
}
bool UserSaysYes() // 当用户肯定回答(yes)时, 返回true, 用户否定回答(no)时,返回false
{
char ch; // 用户回答字符
bool initialResponse = true; // 初始回答
do
{ // 循环直到用户输入恰当的回答为止
if (initialResponse) cout << "(y, n)?"; // 初始回答
else cout << "用y或n回答:"; // 非初始回答
while ((ch = GetChar()) == '\n'); // 跳过空格,制表符及换行符获取一字符
initialResponse = false; // 非初始回答
} while (ch != 'y' && ch != 'Y' && ch != 'n' && ch != 'N');
while (GetChar() != '\n'); // 跳过当前行后面的字符
if (ch == 'y' || ch == 'Y') return true; // 肯定回答返回true
else return false; // 否定回答返回false
}
template
void Swap(ElemType &e1, ElemType &e2) // 交换e1, e2之值
{
ElemType temp; // 临时变量
temp = e1; e1 = e2; e2 = temp; // 循环赋值实现交换e1, e2
}
template
void Show(ElemType elem[], int n) // 显示数组elem的各数据元素值
{
for (int i = 0; i < n; i++)
{ // 显示数组elem
cout << elem[i] << " "; // 显示elem[i]
}
cout << endl; // 换行
}
// 计时器类Timer
class Timer
{
private:
// 数据成员
clock_t startTime;
public:
// 方法声明
Timer(){ startTime = clock(); } // 构造函数, 由当前时间作为开始时间构造对象
double ElapsedTime() const // 返回已过的时间
{
clock_t endTime = clock(); // 结束时间
return (double)(endTime - startTime) / (double)CLK_TCK;
// 计算已过时间
}
void Reset(){ startTime = clock(); } // 重置开始时间
};
// 通用异常类Error
#define MAX_ERROR_MESSAGE_LEN 100
class Error
{
private:
// 数据成员
char message[MAX_ERROR_MESSAGE_LEN]; // 异常信息
public:
// 方法声明
Error(char mes[] = "一般性异常!"){ strcpy(message, mes); }
// 构造函数
void Show() const{ cout << message << endl; } // 显示异常信息
}; // 随机数类Rand
class Rand
{
public:
// 方法声明
static void SetRandSeed(){ srand((unsigned)time(NULL)); }
// 设置当前时间为随机数种子
static int GetRand(int n){ return rand() % n; }
// 生成0 ~ n-1之间的随机数
static int GetRand(){ return rand(); } // 生成0 ~ n-1之间的随机数
};
#endif
文档已经阅读完毕,请返回上一页!