C++实现简单的分牌游戏

#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
int Generic_rand(bool already[])
{
    int i=rand()%53;
 if(!already[i])
 {
      already[i]=true;//标记该位置的牌已经抽取过
 }
 else
 {
  while(already[i])//从该位置往后寻找第一个未抽得牌
  {
   i++;
   if(i>=52)
    i=0;
  }
  already[i]=true;
 }
 return i;
}
void main()
{
    bool already[52]={false};
 time_t t;
 srand((unsigned)time(&t));
 int r,k,time;
 char *huase[4]={"*","$","@","&"};
 char *dianshu[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
 for(int i=0;i<=51;i++)
 {
  time=Generic_rand(already);
     r=time%4;
  k=time%13;
  printf("%s%s\n",huase[r],dianshu[k]);
 }

}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 21 点游戏C++ 代码,仅供参考: ```c++ #include <iostream> #include <string> #include <vector> #include <ctime> #include <cstdlib> using namespace std; //卡牌结构体 struct Card { string suit; //花色 string face; //面值 int value; //点数 }; //游戏状态枚举 enum GameState { PLAYER_WON, PLAYER_LOST, PLAYER_TIED, ONGOING }; //获取一副新牌 vector<Card> getNewDeck() { vector<Card> deck; string suits[] = {"HEARTS", "DIAMONDS", "CLUBS", "SPADES"}; string faces[] = {"ACE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "JACK", "QUEEN", "KING"}; for (int i = 0; i < 4; i++) { for (int j = 0; j < 13; j++) { Card card; card.suit = suits[i]; card.face = faces[j]; if (j <= 8) { card.value = j + 1; } else { card.value = 10; } deck.push_back(card); } } return deck; } //洗牌 void shuffleDeck(vector<Card>& deck) { srand(time(0)); for (int i = 0; i < deck.size(); i++) { int j = rand() % deck.size(); Card temp = deck[i]; deck[i] = deck[j]; deck[j] = temp; } } //发牌 void dealCards(vector<Card>& deck, vector<Card>& playerCards, vector<Card>& dealerCards) { playerCards.push_back(deck.back()); deck.pop_back(); dealerCards.push_back(deck.back()); deck.pop_back(); playerCards.push_back(deck.back()); deck.pop_back(); dealerCards.push_back(deck.back()); deck.pop_back(); } //计算牌组点数 int calculatePoints(vector<Card>& cards) { int points = 0; int numOfAces = 0; for (int i = 0; i < cards.size(); i++) { if (cards[i].face == "ACE") { numOfAces++; } points += cards[i].value; } while (numOfAces > 0 && points > 21) { points -= 10; numOfAces--; } return points; } //打印牌组 void printCards(vector<Card>& cards, bool showAllCards) { for (int i = 0; i < cards.size(); i++) { if (i > 0) { cout << ", "; } if (showAllCards) { cout << cards[i].face << " of " << cards[i].suit << " (" << cards[i].value << ")"; } else { if (i == 0) { cout << cards[i].face << " of " << cards[i].suit; } else { cout << "[HIDDEN]"; } } } cout << endl; } //玩家回合 void playerTurn(vector<Card>& deck, vector<Card>& playerCards, vector<Card>& dealerCards) { bool isDone = false; while (!isDone) { cout << "Your cards: "; printCards(playerCards, true); cout << "Dealer's cards: "; printCards(dealerCards, false); int points = calculatePoints(playerCards); if (points > 21) { cout << "You are busted! You lose." << endl; isDone = true; return; } cout << "Do you want to hit (h) or stand (s)? "; char choice; cin >> choice; switch (choice) { case 'h': playerCards.push_back(deck.back()); deck.pop_back(); break; case 's': isDone = true; break; default: cout << "Invalid choice. Please try again." << endl; break; } } } //庄家回合 void dealerTurn(vector<Card>& deck, vector<Card>& dealerCards) { while (calculatePoints(dealerCards) < 17) { dealerCards.push_back(deck.back()); deck.pop_back(); } cout << "Dealer's cards: "; printCards(dealerCards, true); } //比较结果 GameState compareHands(vector<Card>& playerCards, vector<Card>& dealerCards) { int playerPoints = calculatePoints(playerCards); int dealerPoints = calculatePoints(dealerCards); if (playerPoints > 21) { return PLAYER_LOST; } if (dealerPoints > 21) { return PLAYER_WON; } if (playerPoints > dealerPoints) { return PLAYER_WON; } else if (playerPoints < dealerPoints) { return PLAYER_LOST; } else { return PLAYER_TIED; } } int main() { vector<Card> deck = getNewDeck(); shuffleDeck(deck); vector<Card> playerCards; vector<Card> dealerCards; dealCards(deck, playerCards, dealerCards); cout << "Welcome to the 21 point game!" << endl; playerTurn(deck, playerCards, dealerCards); if (calculatePoints(playerCards) <= 21) { dealerTurn(deck, dealerCards); } GameState result = compareHands(playerCards, dealerCards); if (result == PLAYER_WON) { cout << "Congratulations! You won." << endl; } else if (result == PLAYER_LOST) { cout << "Sorry, you lost." << endl; } else { cout << "It's a tie!" << endl; } return 0; } ``` 这只是一个简单的示例,不包含任何错误处理。一些规则,如“分牌”和“保险”,也没有实现。你可以根据自己的需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值