石頭,剪刀,布:設計一個游戲,讓用戶與計算機玩“石頭,剪 刀,布”游戲,要求: (1)程式能夠統計玩的次數以及每一次的結果,說明是誰贏了,還 是平了; (2) 計算機出牌的最簡單的方法是隨機演算法,請嘗試考慮能不能設 置一種分析用戶出牌規律的演算法,讓計算機能夠贏用戶的幾率 大于50%。
uj5u.com熱心網友回復:
比賽次數多了以后,可以分析用戶的喜好,喜歡出什么之類的uj5u.com熱心網友回復:
簡單的判斷玩家出牌概率,如果仔細的分析玩家的行為、規律,就麻煩了。#include <stdlib.h>
#include <windows.h>
// 石頭剪刀布
enum
{
ACTION_MIN,
ACTION_ROCK,
ACTION_SCISSORS,
ACTION_PAPER,
ACTION_MAX,
};
static char* s_lpActionName[ACTION_MAX] =
{
"", "石頭", "剪刀", "布",
};
void RockScissorsPaper(void)
{
int nRockCount = 0;
int nScissorCount = 0;
int nPaperCount = 0;
int nTotalGame = 0;
int nDrawGame = 0;
int nPlayerWin = 0;
int nComputerWin = 0;
srand(GetTickCount() / 2);
int nPlayerAction = 0;
int nComputerAction = 0;
while (true)
{
if (nTotalGame <= 6)
{
nComputerAction = rand() % 3 + 1;
}
else
{
int nRandom = rand() % nTotalGame;
if (nRandom < nRockCount)
nComputerAction = ACTION_PAPER;
else if (nRandom < nRockCount + nScissorCount)
nComputerAction = ACTION_ROCK;
else
nComputerAction = ACTION_SCISSORS;
}
printf("【1--石頭, 2--剪刀, 3--布】請出輸入:");
if (scanf_s("%d", &nPlayerAction) != 1)
break;
if (nPlayerAction <= ACTION_MIN || ACTION_MAX <= nPlayerAction)
break;
if (nPlayerAction == ACTION_ROCK)
++nRockCount;
else if (nPlayerAction == ACTION_SCISSORS)
++nScissorCount;
else
++nPaperCount;
++nTotalGame;
char const* lpResult = NULL;
if (nPlayerAction == nComputerAction)
{
++nDrawGame;
lpResult = "平局";
}
else if (nPlayerAction % 3 + 1 == nComputerAction)
{
++nPlayerWin;
lpResult = "玩家勝利";
}
else
{
++nComputerWin;
lpResult = "電腦勝利";
}
printf("%s VS %s:%s\r\n", s_lpActionName[nPlayerAction], s_lpActionName[nComputerAction], lpResult);
}
printf("游戲結束!\r\n");
printf("統計:\r\n");
printf("游戲次數:%d次,玩家勝利:%d次,電腦勝利:%d次,平局:%d次\r\n", nTotalGame, nPlayerWin, nComputerWin, nDrawGame);
float fRock = 0;
float fScissor = 0;
float fPaper = 0;
if (nTotalGame != 0)
{
fRock = nRockCount * 100.0f / nTotalGame;
fScissor = nScissorCount * 100.0f / nTotalGame;
fPaper = nPaperCount * 100.0f / nTotalGame;
}
printf("玩家出石頭概率:%.2f%%,玩家出剪刀概率:%.2f%%,玩家出布概率:%.2f%%\r\n", fRock, fScissor, fPaper);
printf("電腦出布概率:%.2f%%,電腦出石頭概率:%.2f%%,玩家出剪刀概率:%.2f%%\r\n", fRock, fScissor, fPaper);
}
int main()
{
RockScissorsPaper();
system("pause");
return 0;
}
uj5u.com熱心網友回復:
按概率來說,用戶每次出石頭剪刀布的概率是一樣的。都是1/3但根據人的特點;
人一般傾向于出自己之前比較少出的;所以加上一個統計;電腦戰勝人的概率還是蠻高的。
當然如果遇見個傻子,始終出一個相同的型別,上面演算法就沒用了。
可以多個演算法結合。。
uj5u.com熱心網友回復:
樓主的問題有點人工智能的味道
uj5u.com熱心網友回復:
https://blog.csdn.net/wyyy2088511/article/details/107717570 剪刀石頭布代碼轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/22519.html
標籤:C++ 語言
