當前位置:編程學習大全網 - 編程語言 - 用C++編寫石頭剪刀布遊戲,編程實現計算機與人進行遊戲

用C++編寫石頭剪刀布遊戲,編程實現計算機與人進行遊戲

好了,寫得有點冗余,呵呵,人懶了點,函數的實現都寫在了頭文件中

// RSC.h

#ifndef _RSC_H_

#define _RSC_H_

#include <iostream>

#include <string>

#include <ctime>

using std::cout;

using std::cin;

using std::endl;

//////////////////////////////////////////////////////////////////////////

#ifndef NULL

#define NULL 0

#endif // NULL

const int MAX_SIZE = 80;

//////////////////////////////////////////////////////////////////////////

// 選項

typedef enum { ROCK, SCISSOR, CLOTH, DISPLAY, HELP, QUIT } SelectType;

// 結果

typedef enum { WIN, LOSE, TIE } ResultType;

//////////////////////////////////////////////////////////////////////////

class CRSCGame

{

public:

CRSCGame(void);

~CRSCGame(void);

// 遊戲主框架,為遊戲主體開始處

void Game(void);

// 顯示提示信息(這裏相當地簡陋) 可以寫為內聯

void Helps(void);

protected:

// 獲得輸入,處理玩家的選擇

void GetChoice(void);

// 對電腦和玩家選擇的選項的處理,並產生結果

void MsgProc(void);

// 輸出遊戲信息,選擇的選項,遊戲結果如何

void Informations(SelectType comsLastChoice);

// 轉換函數,將選擇的選項轉換為相應的字符串

std::string ChoiceToStr(SelectType selectType);

private:

SelectType m_select; // 選擇

ResultType m_result; // 結果

int m_sum[3]; // 統計遊戲結果(輸贏次數)

};

//////////////////////////////////////////////////////////////////////////

CRSCGame::CRSCGame()

: m_select(HELP), m_result(TIE)

{

for (int i=0; i<3; ++i)

{// sum[0]為遊戲已進行的總局數,sum[1]為玩家贏的次數,sum[2]為平局次數

m_sum[i] = 0;

}

}

CRSCGame::~CRSCGame()

{

}

// public

void CRSCGame::Game()

{

while (true)

{

try

{

GetChoice();

}

catch (const char *szInfo)

{

std::cout << szInfo << std::endl;

continue;

}

if (QUIT == m_select)

{

break;

}

MsgProc();

}

return ;

}

void CRSCGame::Helps()

{

std::cout << "設定如下:\n" << "輸入\t\t對應的選擇\n"

<< " r\t\t ROCK\n" << " s\t\t SCISSOR\n" << " c\t\t CLOTH\n"

<< "\n d\t\t DISPLAY\n" << " h\t\t HELP\n" << " q\t\t QUIT\n";

return ;

}

// protected

void CRSCGame::MsgProc()

{

// 電腦隨機選取

SelectType comsSelect = SelectType(rand()%3);

switch (m_select)

{

case HELP:

Helps();

return ;

break;

case DISPLAY:

{

std::cout << "已進行局數:" << m_sum[0] << std::endl;

std::cout << "玩家獲勝:" << m_sum[1] << " "

<< "平局數:" << m_sum[2] << std::endl;

}

return ;

break;

default:

break;

}

++m_sum[0];

if (((ROCK==m_select)&&(SCISSOR==comsSelect))

|| ((SCISSOR==m_select)&&(CLOTH==comsSelect))

|| ((CLOTH==m_select)&&(ROCK==comsSelect)))

{

m_result = WIN; // 該局獲勝

++m_sum[1];

}

else if (m_select == comsSelect)

{

m_result = TIE; // 平手

++m_sum[2];

}

else

{

m_result = LOSE; // 玩家輸了

}

Informations(comsSelect);

return ;

}

void CRSCGame::GetChoice()

{

char szSelectBuf[MAX_SIZE];

std::cout << "請輸入(r/s/c/d/h/q):";

std::cin.getline(szSelectBuf, MAX_SIZE);

switch (szSelectBuf[0])

{

case 'd':

m_select = DISPLAY;

break;

case 'h':

m_select = HELP;

break;

case 'r':

m_select = ROCK;

break;

case 's':

m_select = SCISSOR;

break;

case 'c':

m_select = CLOTH;

break;

case 'q':

m_select = QUIT;

break;

default:

throw "Unknown Input!Try again please...";

break;

}

return ;

}

void CRSCGame::Informations(SelectType comsLastChoice)

{

std::cout << "此次電腦的選擇:" << ChoiceToStr(comsLastChoice) << std::endl;

std::cout << "此次妳的選擇:\t" << ChoiceToStr(m_select) << std::endl;

switch (m_result)

{

case WIN:

{

std::cout << "妳贏了!" << std::endl;

}

break;

case LOSE:

{

std::cout << "唉,妳輸嘞!" << std::endl;

}

break;

case TIE:

{

std::cout << "咦,是個平局!" << std::endl;

}

break;

default:

break;

}

return ;

}

std::string CRSCGame::ChoiceToStr(SelectType selectType)

{

switch (selectType)

{

case ROCK:

return "ROCK";

break;

case SCISSOR:

return "SCISSOR";

break;

case CLOTH:

return "CLOTH";

break;

default:

break;

}

return "";

}

#endif // _RSC_H_

// Main_RSC.cpp

#include "RSC.h"

//////////////////////////////////////////////////////////////////////////

int main(int argc, char **argv)

{

CRSCGame theGame;

srand(unsigned(time(NULL)));

theGame.Helps();

theGame.Game();

return 0;

} // end main

  • 上一篇:豆漿麥的關於麥子:
  • 下一篇:板帶廠電氣車間傳動班維修電工業務工作總結
  • copyright 2024編程學習大全網