1. 程式人生 > >21點小遊戲C++程式碼

21點小遊戲C++程式碼

#include<iostream>
#include<string>
#include<time.h>
using namespace std;

#define NUM 1000
int j=2;//定義為全域性變數
int randNum[NUM];//因為rand()函式有一定的缺陷,所以在程式中定義了randNum陣列來存放隨機數
                 //即使使用了種子函式srand(),由於程式執行時間比較短,也不太好設定種子。因此

使用陣列來存放隨機數

class Poker
{
private:
 int poker[53];     //撲克
 int pokerValue[53]; //撲克代表的數值
 string pokerName[53]; //撲克名
 
 int money;   //玩家錢數  
 int bet;     //玩家的賭注

 int pokerF[5];   //玩家手中的牌 F:Farmer   L:Landlord
 int pokerL[5];   //莊家手中的牌 F:Farmer   L:Landlord
 int pokerNumF;   //玩家手中的牌數
 int pokerNumL;   //莊家手中的牌數
public:
 Poker();           //建構函式,對牌初始化
 void initPoker();  //洗牌,在每輪遊戲開始前進行
 string getPokerF();  //用字串的形式返回玩家的牌
 string getPokerL();  //用字串的形式返回莊家的牌
 int getSumF();       //返回玩家牌的點數,用以判斷是否超過21點
 int getSumL();       //返回莊家牌的點數
 void farmerAsk();           //玩家要牌
 void landlordAsk();         //莊家要牌
 void inputBet();            //玩家輸入賭注
 void newGame();            //開始新遊戲
 void landlordProcess();        //在玩家不要牌時進行處理

};

Poker::Poker()
{

 poker[0]=0;
 for(int i=1;i<=13;i++)    //|
 {                         //|
  poker[i]=i;           //|用建構函式對牌初始化
  poker[i+13]=i;        //|
  poker[i+26]=i;        //|
  poker[i+39]=i;        //|
 }//for結束

 pokerValue[0]=0;
 for(i=1;i<=52;i++)
 {
  if(poker[i]<=10)  pokerValue[i]=poker[i];
  else              pokerValue[i]=10;
 }//for結束


 pokerName[0]="";
 for(i=0;i<4;i++)
 {
  pokerName[1+13*i]="A";
  pokerName[2+13*i]="2";
  pokerName[3+13*i]="3";
  pokerName[4+13*i]="4";
  pokerName[5+13*i]="5";
  pokerName[6+13*i]="6";
  pokerName[7+13*i]="7";
  pokerName[8+13*i]="8";
  pokerName[9+13*i]="9";
  pokerName[10+13*i]="10";
  pokerName[11+13*i]="J";
  pokerName[12+13*i]="Q";
  pokerName[13+13*i]="K";
 }//for結束
 
 money=200;  //玩家開始玩遊戲時錢數是200
 bet=0;
 
 for(i=0;i<5;i++)
 {
  pokerF[i]=0;    //|對pokerOfFarmer初始化
  pokerL[i]=0;    //|對pokerOfLandlord初始化
 }


 pokerNumF=0;//玩家手中的牌數初始化為0
 pokerNumL=0;//莊家手中的牌數初始化為0
 
 srand((int)time(0));
 for(i=0;i<NUM;i++)
 {
  randNum[i]=rand()*51/32767+1;//產生隨機數陣列
 }

}//建構函式Poker()結束
void Poker::initPoker()
{
    cout<<"新一局遊戲開始,開始洗牌>>>>>"<<endl;

 pokerF[0]=randNum[j++];  //產生1-52的隨機數
 pokerF[1]=randNum[j++];  //產生1-52的隨機數
 pokerL[0]=randNum[j++];  //產生1-52的隨機數
 pokerL[1]=randNum[j++];  //產生1-52的隨機數
 
 pokerNumF=2;
 pokerNumL=2;
 
 cout<<"洗牌完成,你的牌為:"<<getPokerF()<<endl;
}//void Poker::initPoker()結束

string Poker::getPokerF()//用字串的形式返回玩家的牌
{
 int i;
 string result="";
 
 for(i=0;i<pokerNumF;i++)
     result=result+pokerName[pokerF[i]]+" ";
 
 return result;
}//string Poker::getPokerF()結束

string Poker::getPokerL()//用字串的形式返回莊家的牌
{
    int i;
 string result="";
 
 for(i=0;i<pokerNumL;i++)
     result=result+pokerName[pokerL[i]]+" ";
  
 return result;
}//string Poker::getPokerL()結束

int Poker::getSumF()   //返回玩家的總點數
{
 int result=0;
 
 for(int i=0;i<pokerNumF;i++)
     result=result+pokerValue[pokerF[i]];

 return result;
}

int Poker::getSumL()//返回莊家的總點數
{

 int result=0;
 
 for(int i=0;i<pokerNumL;i++)
  result=result+pokerValue[pokerL[i]];
 
 return result;
}

void Poker::farmerAsk()
{
    if(pokerNumF>=5)
 {
     cout<<"你的牌數已夠5張,不能再要牌了"<<endl;
  landlordProcess();
 }
 else
 {
        pokerF[pokerNumF++]=randNum[j++];   //產生1-52的隨機數
     cout<<"你的牌為:"<<getPokerF()<<endl;
     if(getSumF()>21)
     {
      cout<<"你撐死了,你輸了"<<bet<<"元"<<endl;
      money=money-bet;
      if(money<=0)
      {
       cout<<"你已經輸光了,哈哈"<<endl;
       cout<<"遊戲結束"<<endl;
       exit(0);
      }
      inputBet();
      initPoker();
     }
     else if(getSumF()==21)
     {
      landlordProcess();
     }
 }
}

void Poker::landlordAsk()
{
    if(pokerNumL>=5)
 {
     if(getSumF()>getSumL())
  {
      cout<<"莊家的牌為"<<getPokerL()<<endl;
      cout<<"你贏了,你贏了"<<bet<<"元"<<endl;
   money=money+bet;
   inputBet();
   initPoker();
  }
  else if(getSumF()==getSumL())
  {
      cout<<"莊家的牌為"<<getPokerL()<<endl;
      cout<<"平手"<<endl;
   inputBet();
   initPoker();
  }
  else if(getSumF()<getSumL())
  {
      cout<<"莊家的牌為"<<getPokerL()<<endl;
      cout<<"你輸了,你輸了"<<bet<<"元"<<endl;
   money=money-bet;
   if(money<=0)
      {
       cout<<"你已經輸光了,哈哈"<<endl;
       cout<<"遊戲結束"<<endl;
       exit(0);
      }
   inputBet();
   initPoker();
  }
 }
 else
 {
        pokerL[pokerNumL++]=randNum[j++];   //產生1-52的隨機數
  if(getSumL()>21)
  {
      cout<<"莊家的牌為"<<getPokerL()<<endl;
      cout<<"莊家撐死了,你贏了"<<bet<<"元"<<endl;
   money=money+bet;
   inputBet();
   initPoker();
  }
  else    landlordProcess();
 }
}
void Poker::inputBet()
{
 cout<<"你現在有"<<money<<"元,請輸入賭注:";
 do
 {
  cin>>bet;
  if(bet>money)
   cout<<"笨蛋,你沒那麼多錢,少來,重新輸入吧:";
 }while(bet>money);

}

void Poker::newGame()
{
 inputBet();
 initPoker();
 cout<<"你得到的牌為:"<<getPokerF()<<endl;

void Poker::landlordProcess()
{
   if(getSumL()>=17)
   {
    if(getSumL()>getSumF())          
    { 
        cout<<"莊家的牌為"<<getPokerL()<<endl;
     cout<<"莊家獲勝,你輸了"<<bet<<"元"<<endl;
     money=money-bet;
     if(money<=0)
     {
         cout<<"你已經輸光了,哈哈"<<endl;
      cout<<"遊戲結束"<<endl;
      exit(0);
   }
   inputBet();
   initPoker();
  }
     else if(getSumF()==getSumL())
       {
         cout<<"莊家的牌為"<<getPokerL()<<endl;
   cout<<"本次遊戲平手"<<endl;
   inputBet();
   initPoker();
     }
        else
        {
      cout<<"莊家的牌為"<<getPokerL()<<endl;
   cout<<"你贏了,你贏了"<<bet<<"元"<<endl;
   money=money+bet;
   inputBet();
   initPoker();
  }
    }
    else
    {
     landlordAsk();
 }
}
 
 
int main()
{
    int choose=1;
 Poker poker;
 cout<<"****************** 歡迎玩二十一點遊戲 ******************"<<endl<<endl;
 poker.inputBet();
    poker.initPoker();                   //洗牌
 
 while(choose==1||choose==2||choose==3||choose==4)
 {
  cout<<"1.要牌 2.不要牌 3.重新開始 4.退出  >>請輸入數字選擇操作:";
     cin>>choose;
     if(choose==1)            poker.farmerAsk();
     else if(choose==2)      poker.landlordProcess();
     else if(choose==3)      poker.newGame();
     else if(choose==4)      exit(0);
 }

 return 0;
}//main函式結束

相關推薦

21遊戲C++程式碼

#include<iostream> #include<string> #include<time.h> using namespace std; #define NUM 1000 int j=2;//定義為全域性變數 int randN

java實現簡單的21遊戲(第一版)

距離上一次部落格更新已經有了快半個月的時間,由於實習期間的公司業務,所以一直無暇顧及部落格的更新。今天終於忙裡偷閒,為廣大博友帶來一個半月前寫的小遊戲。希望大家多多支援 如有不足請多多留言! 21點遊戲(BlackJack) 遊戲規則:玩家和電腦初始各自獲得2張撲克牌,累加

推箱子遊戲 C語言 共寫了四十關,遊戲有多種模式,適合新手學習交流 有全部完整程式碼可直接編譯執行

}void middleMap(int Map[20][20],int *n,int *m,char *ch) {//中等關卡    static int cs=0;    int guan;    //fscanf(fp1, "%d", &guanshu2);    //fclose(fp1);//

24遊戲app宣傳文案

希望 傳統 邏輯性 面向 反饋 豌豆莢 年齡 背景 記憶力 24點小遊戲app宣傳文案 遊戲背景 24點小遊戲是傳統的撲克牌遊戲,是通過撲克牌來完成的競爭性智力遊戲,除了希望能夠消磨我們的空閑時間,加強同學們的臨機和速算能力,還能夠促進我們每個人的大腦和邏輯性,從而提高我們

用Python編寫飛機遊戲演示程式碼

跟著視訊打的,沒有做完整 plane_main檔案 import pygame from plane_sprites import * class PlaneGame(object): def __init__(self): #遊戲視窗

三子棋------遊戲c語言實現(超清晰邏輯)

今天用c語言來實現一個簡單有趣的小遊戲————三子棋! 三子棋的規則應該都不陌生吧 -_- ....... 我一步,你(電腦)一步,無論是誰,每下完一步,就判斷是否有三顆棋子在一條直線上,若在,則誰WIN!! (這句話有待會寫程式碼的邏輯思路喲!!) 好啦,現在開始著手如何實現整個程式碼&n

unity3d完成VR手柄第一人稱射擊遊戲(純程式碼)

using UnityEngine; using UnityEngine.AI; /// <summary> /// 敵人向玩家移動 並自動尋路 路途中播放自帶動畫 完成 攻擊兩次 敵人死亡 /// 以下程式碼負責動畫播放 /// </sum

Android 遊戲2048 程式碼簡單實現

package com.my2048; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import andro

24遊戲演算法

要求:1-9任意四個數字,利用加減乘除括號五種運算使最終結果等於24;如果能達到要求,列印所有方法(同樣的加減乘除,括號不同位置算兩種不同的方法);若不能達到要求,列印“不能計算達到24”。 思考過程:四個數字,三步運算,二個括號,而這兩個括號的位置有五種不同

2048遊戲c++實現

用c++實現了一下2048小遊戲,沒有介面,用控制檯顯示。 #include <stdlib.h> #include <time.h> #include <string.h> #include <stdio.h&g

java 撲克牌 24遊戲

要求:使用者初始生命值為一給定值(比如3),初始分數為0。隨機生成4個代表撲克牌牌面的數字或字母,由使用者輸入包含這4個數字或字母的運算表示式(可 1. 程式風格良好(使用自定義註釋模板)          2.使用計時器要求使用者在規定時間內輸入表示式,如果規定時間內運

一個猜數字的遊戲C# 控制元件的動態載入和應用 多執行緒

用C#開發的一個猜數字的小遊戲 namespace 猜數字遊戲__執行緒 { public partial class Form1 : Form { public Form1() {

python+pyqt5實現24遊戲

clas 抽取 結束 shu caption pytho cfa load http 本文實例為大家分享了python實現24點遊戲的具體代碼,供大家參考,具體內容如下 描述:一副牌中A、J、Q、K可以當成是1、11、12、13。任意抽取4張牌,用加、減、乘、除(可加括號

C語言遊戲程式碼分享——黑白棋。喜歡的朋友贊關注並轉發!

C/C++企業實戰級課程資源(素材+原始碼+視訊)、編譯大禮包免費分享,需要的加學習群892643663。 #include "graphics.h" /*圖形系統標頭檔案*/ #define LEFT 0x4b00 /*游標左鍵值*/ #define RIGHT 0x4d00 /*

簡單21紙牌遊戲紙牌顯示的修改

days EDA .html 開關 cli layer vat nbsp 父類 上次寫的隨筆,簡單21點紙牌小遊戲,當窗體大小改變時,紙牌畫面會出現不顯示的問題,因為每一張牌都是用GDI+的方法,從圖片中剪裁下來的,沒有用到vs提供的控件,如PictureBox控件,這就需

C程式碼實現掃雷遊戲

分析 同三子棋小遊戲一樣,掃雷小遊戲也分為如下思路: 標頭檔案 #ifndef __GAME_H__ #define __GAME_H__ #include <stdlib.h> #include <time.h> #include <s

C++ 掃雷遊戲(380行程式碼

難點:        點選一次清理出一大片區域的功能,我採用的是先把點選的那一塊的座標存到一個佇列裡,然後取出裡面的一個元素,再把這個元素周圍的8塊放進佇列裡,重複的不放,就可以對規定的區域做大面積清理了,另外為了右滑介面也加了不少程式碼比如一些顏色屬性時鐘移動效果還有游標之

C++練習例項———控制檯程式碼實現坦克大戰遊戲

    坦克大戰是一款經典的遊戲,今天我來介紹一個在vs中僅用控制檯程式碼實現的坦克大戰小遊戲,在很多學校裡作為一個面對物件程式設計的大作業,對於學習C++的多型性很有幫助。程式的架構思路由老師提供,遊戲中用到了EasyX圖形庫,這個庫非常小巧輕便,下載地址:https://

21遊戲C++模擬

21點又叫BlankJack是一種比較大眾化的遊戲,一直以來都在玩別人寫的遊戲,感覺可以自己寫一個遊戲,然後讓別人去玩,就這樣寫了21點,寫的不是很好,希望大家指正! 設計思路及實現: 1.撲克有54張,21點只用到了52張A-k,因此需要定義一個結構體去模擬撲克撲克,兩個

編程練習,自己做的21遊戲

con continue *** 洗牌 其它 success popu 做的 i++ #include <stdio.h> #include <time.h> #include <stdlib.h> int N; //牌序 in