c++编程 新手求帮助 要求用类

weixin_49042810 2020-07-03 09:44:14
石头,剪刀,布:设计一个游戏,让用户与计算机玩“石头,剪 刀,布”游戏,要求: (1)程序能够统计玩的次数以及每一次的结果,说明是谁赢了,还 是平了; (2) 计算机出牌的最简单的方法是随机算法,请尝试考虑能不能设 置一种分析用户出牌规律的算法,让计算机能够赢用户的几率 大于50%。
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-07
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
jena_wy 2020-07-31
  • 打赏
  • 举报
回复
https://blog.csdn.net/wyyy2088511/article/details/107717570 剪刀石头布代码
abcd7038 2020-07-29
  • 打赏
  • 举报
回复
引用 楼主 weixin_49042810 的回复:
石头,剪刀,布:设计一个游戏,让用户与计算机玩“石头,剪 刀,布”游戏,要求: (1)程序能够统计玩的次数以及每一次的结果,说明是谁赢了,还 是平了; (2) 计算机出牌的最简单的方法是随机算法,请尝试考虑能不能设 置一种分析用户出牌规律的算法,让计算机能够赢用户的几率 大于50%。
楼主的问题有点人工智能的味道
levonsoft 2020-07-27
  • 打赏
  • 举报
回复
按概率来说,用户每次出石头剪刀布的概率是一样的。都是1/3
但根据人的特点;
人一般倾向于出自己之前比较少出的;所以加上一个统计;电脑战胜人的概率还是蛮高的。

当然如果遇见个傻子,始终出一个相同的类型,上面算法就没用了。

可以多个算法结合。。
Minikinfish 2020-07-24
  • 打赏
  • 举报
回复
简单的判断玩家出牌概率,如果仔细的分析玩家的行为、规律,就麻烦了。 #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; }
Simple-Soft 2020-07-03
  • 打赏
  • 举报
回复
比赛次数多了以后,可以分析用户的喜好,喜欢出什么之类的

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧