当前位置: 首页 > article >正文

21点,简单的纸牌游戏——C++编写

游戏流程

  1. 游戏开始:玩家(你)和庄家(我,AI)各自发两张牌,玩家的牌面向上,庄家只有一张牌面向上。
  2. 玩家决策:玩家可以选择“要牌”(Hit)或“停牌”(Stand)。
    • 要牌:玩家要求额外的牌,尝试接近21点但不超过。
    • 停牌:玩家停止要牌,结束自己的回合。
  3. 庄家回合:玩家停牌后,庄家公开第二张牌,并根据规则决定是否要牌。庄家通常会在16点或以下要牌,在17点或以上停牌。
  4. 判定胜负
    • 如果玩家超过21点,庄家赢。
    • 如果庄家超过21点,玩家赢。
    • 如果双方都未超过21点,点数更高的一方获胜。
    • 如果双方点数相同,结果为平局。

简化的牌面值

  • 数字牌:面值即点数(2-10)。
  • 人物牌(J、Q、K):每张为10点。
  • A:可算作1点或11点,取决于哪个值对玩家更有利。

开始游戏

我将“发牌”,你首先告诉我你的选择:要牌或停牌。为了简化,我们将假设每次发牌都是随机从52张牌中抽取,不考虑已经发出的牌。

你的起始牌:8和5(总共13点) 庄家的公开牌:K

请问你选择要牌(Hit)还是停牌(Stand)?

____________________________我和chatgpt的一次玩耍—————————————————

我:要牌

ai:你选择要牌。让我们“随机”给你发一张牌。

新发的牌:7

现在你的牌面总点数为20点(8 + 5 + 7)。

当前状态

  • 你的牌:8, 5, 7(总共20点)
  • 庄家的公开牌:K

由于你现在总点数为20点,这是一个相当接近21点的很好的分数。现在你可以再次选择要牌(Hit)或停牌(Stand)。请告诉我你的决定。

你:停牌

ai:你选择停牌。现在轮到庄家(我,AI)的回合。

庄家的起始牌是K和一张隐藏牌。为了简化,我们假设庄家的隐藏牌是4,总点数为14点(K为10点,4为4点)。

庄家的行动

根据规则,庄家在16点或以下会要牌,在17点或以上会停牌。所以,庄家选择要牌。

庄家要牌:得到一张9。

现在庄家的总点数为23点(K + 4 + 9),超过了21点。

结果

  • 你的牌:8, 5, 7(总共20点)
  • 庄家的牌:K, 4, 9(总共23点,超过21点)

庄家爆牌,你赢了!

这只是一个简化的游戏流程示例,实际游戏中会有更多的策略和决策。如果你想要玩更复杂的纸牌游戏,或者有任何其他游戏相关的问题,随时告诉我!

————————————————真正的结束——————————————————————

  好的,其实前面呢我已经就说了这个规则。然后呢现在就编写程序。

  • 使用rand()函数生成随机数来模拟抽牌过程。
  • 玩家可以选择要牌(hit)或停牌(stand)。
  • 庄家(dealer)在点数小于17时会自动要牌。
  • 游戏在玩家停牌或爆牌(点数超过21)后结束。

 

#include <iostream>
#include <ctime>
#include <cstdlib>using namespace std;int getCard();
void playDealer(int& dealerTotal);
char getPlayerChoice();
void playGame();int main() {system("chcp 65001");srand(static_cast<unsigned int>(time(0))); char playAgain;do {playGame();cout << "想再玩一次吗? (Y/N): ";cin >> playAgain;} while (playAgain == 'Y' || playAgain == 'y');return 0;
}void playGame() {int playerTotal = 0, dealerTotal = 0;char choice;playerTotal += getCard();playerTotal += getCard();dealerTotal += getCard();cout << "你的总分是: " << playerTotal << endl;cout << "庄家的一张公开牌是: " << dealerTotal << endl;do {choice = getPlayerChoice();if (choice == 'h') {playerTotal += getCard();cout << "你现在的总分是: " << playerTotal << endl;}} while (choice != 's' && playerTotal <= 21);if (playerTotal > 21) {cout << "爆牌了!你输了。" << endl;} else {playDealer(dealerTotal);cout << "庄家的总分是: " << dealerTotal << endl;if (dealerTotal > 21 || dealerTotal < playerTotal) {cout << "你赢了!" << endl;} else {cout << "你输了。" << endl;}}
}int getCard() {return rand() % 10 + 1; 
}char getPlayerChoice() {char choice;cout << "要牌(h)还是停牌(s)?: ";cin >> choice;return choice;
}void playDealer(int& dealerTotal) {while (dealerTotal < 17) { dealerTotal += getCard();}
}

 

 

http://www.lryc.cn/news/2418556.html

相关文章:

  • Microsoft Visio 2010密钥
  • qq密码自动测试软件,QQ2004测试版密码获取演示
  • linux 溢出漏洞,Linux-glibc溢出漏洞(CVE-2015-0235)
  • 线性移位寄存器序列(m序列)之MATLAB实现
  • 网络流入门级学习报告(中)
  • EasyAR 插件使用简介
  • WorldWind学习系列:2、基本流程
  • 20 个 优秀源码下载网站
  • 一个不错的选色网站 color picker
  • 远程控制---实验九:IPC远程植入木马
  • 软件需求规格说明书样例
  • 多媒体技术选择题
  • 加密解密基础、PKI及SSL、创建私有CA
  • 垃圾短信多,你的手机可能被监控了!
  • 干货:上网行为网络管理系统推荐(2024年最强行为管理软件)
  • L2TP client主动发起详解(含抓包)
  • 应用软件保护方法
  • Python灰帽——Scapy模块 / 数据包的构造、发送、接收、捕获
  • 阿江ASP探针 V 1.92
  • 高危的程序猿,又被抓来顶缸了?光大证券“乌龙指”事件有感
  • 电脑动态屏保_7款电脑上一定要有的神仙软件,能让你的windows更好用
  • model - construction
  • php中 session start,php中session_start()的具体解释
  • Flappy Bird成名记:28天令人咋舌却真实的故事
  • 用Java实现文本编辑器
  • highdefinitionaudio驱动感叹号_High Definition Audio
  • HBuilder的下载与使用(详细步骤)
  • linux les命令,Linux用户和组命令
  • [转]CMS Content Management System(内容管理系统) 提供商
  • 【jsp+servelet】JSTL c:out使用 escapeXml 属性保持 HTML 格式编排