發撲克牌

裡面的「檢查重複」寫的很爛,我寫的完全是隨機給第 i 張牌某個值,也因此當有很多張牌時跑起來就會炸掉!然後我剛剛改成這裡寫的換牌方法,這果然快非常多。

/***********************************
本程式只是發牌給 n 人, 每人 m 張牌並且按照花色跟大小排序
***********************************/
#include <cstdlib>
#include <iostream>
#include <math .h>
#include <stdio .h>
#include <time .h>
using namespace std;

int main()
{
  int number, person;
  int poker[52], check=1 ;

do{
  cout< <"請輸入玩牌人數"<<endl;
  cin>>person;
  cout< <"請輸入每人拿牌張數"<<endl;
  cin>>number; 

  if(person*number>52) {cout< <"總共要發"<<person*number<<"張牌, 你出老千!"<<endl;}
}while(person*number>52); 

  srand(time(0));      

/*
  //檢查重複
  for(int i=0; i < 5; i++){
    do{ poker[i] = rand()%52;
      if(i>0){
        for(int j=0; j<i ; j++){if(poker[j]==poker[i]) {check=0;}
        }}}while(check==0);}
*/
  for(int i=0; i < 52; i++){poker[i]=i;}

  //洗牌
  for(int i=1; i < 52; i++){
    int j = rand()%52;
    int tmp = poker[i];
    poker[i] = poker[j];
    poker[j] = tmp;
  } //將取出的亂數當成索引, 做換值的動作

  //大小排序
  int temp, k=0;
do{
  cout<<"第"<<k/number+1<<"位玩家拿到的牌"<<endl;
  for(int i=k; i<k+number; i++){

    for(int j=i+1; j<k+number; j++){
       if (poker[i]%13<poker[j]%13 || (poker[i]%13==poker[j]%13 && poker[i]/13>poker[j]/13))
       { // 前面是把點數排序 : p[0] ≧ p[1] ≧ ... ≧ p[4]; 後面是把花色排序 : S > H > D > C
          temp = poker[i];
          poker[i] = poker[j];
          poker[j] = temp;
        }}

  switch(poker[i]/13){
     case 0 : cout< <"黑桃"; break;
     case 1 : cout<<"紅心"; break;
     case 2 : cout<<"方塊"; break;
     case 3 : cout<<"梅花"; break;}

    switch(poker[i]%13){
     case 0 : cout<<"2"; break;
     case 1 : cout<<"3"; break;
     case 2 : cout<<"4"; break;
     case 3 : cout<<"5"; break;
     case 4 : cout<<"6"; break;
     case 5 : cout<<"7"; break;
     case 6 : cout<<"8"; break;
     case 7 : cout<<"9"; break;
     case 8 : cout<<"T"; break;
     case 9 : cout<<"J"; break;
     case 10 : cout<<"Q"; break;
     case 11 : cout<<"K"; break;
     case 12 : cout<<"A"; break;}// A 最大 , 2 最小的 case

    cout<<",";
    if(i==k+number-1){cout<<endl;}
}k = k+number;
}while(k<number*person);
cout<<endl;

    system("PAUSE");
    return 0;
}

留言