『壹』 c語言編程用撲克牌洗牌和發牌
程序就不寫了,寫下大致流程
//定義一個數組,或者列表,鏈表什麼的隨你
//共52個元素 記作card[52]
//card代表撲克牌的類,有花色(color 枚舉,0,1,2,3),點數(枚舉 A~K)等屬性
card tmp;
for(int i=0;i<52;i++)
{
//計算一個0到52之間的隨機數x
tmp=card[i];
card[i]=card[x];
card[x]=tmp;//其實就是交換兩張牌
}
//循環下來肯定每張牌都被交換過,有它自己的新位置,也有可能湊巧還在原來的位置
//最後按下標順序分四堆
『貳』 C語言編程題-洗牌
我解決了這個問題,程序如下:
注意:n不能大於500,否則你就得改數組A和B的大小;
#include <stdio.h>
int A[1000],B[500];
void main()
{
int m,n,i;
int flag(int);
void exchange(int);
printf("input n:");
scanf("%d",&n);
for(i=0,m=n*2;i<m;i++) A[i]=i;
i=0;
do {exchange(n); i++;}
while(flag(m));
printf("Times: %d",i);
}
void exchange(int n)
{
int i;
for(i=0;i<n;i++)
B[i]=A[i+n];
for(i=n-1;i>=0;i--)
A[i*2+1]=A[i];
for(i=0;i<n;i++)
A[i*2]=B[i];
}
『叄』 C語言編程——發牌洗牌模擬,求幫助
實現了2副牌的發牌,和每個人的牌和底牌
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
struct CARD //牌
{
char suit[10]; /*花色*/
char face[10]; /*牌面*/
};
enum { posA, posB, posC, posD};//定義好每個人的位置
struct Postion
{
struct CARD getcard[25];//每人獲得的牌
};
struct Postion postion[4];//分配四個位置
struct CARD leftCard[8]; //底牌
struct CARD card[54]; //54張牌
char *suit[]={"Spades","Hearts","Clubs","Diamonds"};
char *face[] = {"A","2","3","4","5","6","7","8","9",
"10","jack","Queen","King"};
/* 函數功能:將52張牌的順序打亂,
函數參數:結構體數組wCard,表示52張牌
函數返回值:無
*/
void Shuffle(struct CARD *wCard)
{
int i,j;
struct CARD temp;
for (i=0; i<54; i++)
{
j=rand()%54;
temp=wCard[i];
wCard[i]=wCard[j];
wCard[j]=temp;
}
}
/*函數功能:發牌結果
函數參數:結構體數組wCard,表示有54張牌
函數返回值:無
*/
void Deal(struct CARD *wCard)
{
int i,aidx=0,bidx=0,cidx=0,didx=0;
Shuffle(card);//將牌打亂
/*************發第一副牌,只發50張,分別分給A,B,C,D四個位置 4張留底**************/
// 第一次發完50張後,A,B多一張,所以下面第二次讓C,D排在前面,兩次發完剛好各40張 */
for (i=0; i<50; i++)//發牌數
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==1)
postion[posB].getcard[bidx++]=wCard[i];
else if(i%4==2)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==3)
postion[posD].getcard[didx++]=wCard[i];
}
/**********剩下的四張作為底牌*********/
leftCard[0]=wCard[i++];
leftCard[1]=wCard[i++];
leftCard[2]=wCard[i++];
leftCard[3]=wCard[i++];
Shuffle(card);//再次將牌打亂
/*************發第二副牌,也只發50張,分別分給A,B,C,D四個位置,4張留底,一共8張底**************/
for (i=0; i<50; i++)//發牌數
{
// printf("%10s %5s\n", wCard[i].suit, wCard[i].face);
if(i%4==0)
postion[posC].getcard[cidx++]=wCard[i];
else if(i%4==1)
postion[posD].getcard[didx++]=wCard[i];
else if(i%4==2)
postion[posA].getcard[aidx++]=wCard[i];
else if(i%4==3)
postion[posB].getcard[bidx++]=wCard[i];
}
/**********剩下的四張作為底牌,這樣就一共為8張底牌*********/
leftCard[4]=wCard[i++];
leftCard[5]=wCard[i++];
leftCard[6]=wCard[i++];
leftCard[7]=wCard[i++];
}
/* 函數功能:將52張牌按黑桃、紅桃、草花、方塊花色順序,面值按A~K順序排列
函數參數:結構體數組wCard,表示不同花色和面值的52張牌
指針數組wFace,指向面值字元串
指針數組wSuit,指向花色字元串
函數返回值:無
*/
void FillCard(struct CARD wCard[],char *wSuit[], char *wFace[])
{
int i;
for (i=0; i<52; i++)
{
strcpy(wCard[i].suit, wSuit[i/13]);
strcpy(wCard[i].face, wFace[i%13]);
}
// wCard[53].face="Big"; //大小王
strcpy(wCard[52].suit, "Small");
strcpy(wCard[52].face, "ghost");
strcpy(wCard[53].suit, "Big");
strcpy(wCard[53].face, "ghost");
}
void print(char ch)//輸出牌
{
int i;
switch(ch)
{
case 'A': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posA].getcard[i].suit, postion[posA].getcard[i].face);
}
break;
case 'B': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posB].getcard[i].suit, postion[posB].getcard[i].face);
}
break;
case 'C': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posC].getcard[i].suit, postion[posC].getcard[i].face);
}
break;
case 'D': for(i=0; i<25; i++)
{
printf("%10s %5s\n", postion[posD].getcard[i].suit, postion[posD].getcard[i].face);
}
break;
}
}
void outputLeftCard()//輸出底牌
{
int i;
for(i=0; i<8; i++)
printf("%10s %5s\n", leftCard[i].suit, leftCard[i].face);
}
int main()
{
char pos;
srand(time(NULL));
FillCard(card,suit,face);
//Shuffle(card);
Deal(card);
printf("Please choose your position(A、B、C、D):");
scanf("%c", &pos);
print(pos);//輸出你所在位置的牌
/**********下面輸出的是,除了你之外其他人的牌**********/
if(pos !='A')
{
printf("A:\n");
print('A');
}
if(pos !='B')
{
printf("B:\n");
print('B');
}
if(pos !='C')
{
printf("C:\n");
print('C');
}
if(pos !='D')
{
printf("D:\n");
print('D');
}
printf("底牌為:\n");
outputLeftCard();//輸出底牌
return 0;
}
『肆』 用VB編程寫一個程序 自動發牌系統
相信你也找過一些這類的代碼,可能你用過的方法中就有可以用的,變通一下方法就好了!提供方法給你,僅供參考!
VB還可以用MAPI進行,核心控制項:MAPI會話控制項和MAPI消息控制項。MAPI會話控制項用於建立和控制一個Microsoft Mail會話,MAPI消息控制項用於創建和收發郵件消息。此外,程序必須運行在採用遵從MAPI的消息系統(如:Microsoft Exchange、Microsoft Mail、Outlook等)的環境中。
編程需要將MAPI控制項加入VB工具箱。全名是:"Microsoft MAPI Controls"。加入後,工具箱中將添上MAPI會話控制項和MAPI消息控制項的圖標。
下面將以簡單的VB程序為例,介紹發送郵件程序編制方法。
郵件發送程序的基本處理過程是:根據用戶輸入信息組成郵件,然後使用MAPI消息控制項的Send方法將郵件發出。編程步驟如下:
1、新建一個VB項目。
2、將預設窗體Form1的Caption屬性設置為"發送郵件"。
3、將MAPI控制項加入VB工具框。
4、在Form1中加入一個MAPI會話控制項MAPISession1和一個MAPI消息控制項MAPIMessages1。
5、在Form1中加入三個文本框控制項,將它們的Name屬性分別設置為txtSendTo、txtSubject、txtMessage,並將txtMessage的Multiline屬性設置為True。這三個文本框控制項將分別用於填寫郵件的收件人、主題和內容。
『伍』 c語言編程 撲克發牌
頭文件:
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
初始化 洗牌 發牌 程序沒有聲明
int b,c,i,q=0,a[52];
int chu();
int xipai();
int fapai(int);
int型函數沒有返回值。添加return(0)。
發牌次序不合實際。
做了一點改動。fapai的參數減少了一個,只剩下p作為總牌數。
q定義為全局變數,作為計數當前發牌人序號。
發牌程序更改,i每次增加4,實現跳序發牌。末尾增加q++。
fapai(int p)
{
for(i=q;i<p;i=i+4)
{
b=(a[i]-1)/13;
c=a[i]-b*13;
switch(b)
{
case 0 :printf("%c%d ",3,c);break;
case 1 :printf("%c%d ",4,c);break;
case 2 :printf("%c%d ",5,c);break;
case 3 :printf("%c%d ",6,c);break;
default:printf("error\n");
return(0);
}
}
q++;
}//發牌程序
主函數調用fapai函數時,p值賦52即撲克總數。
void main()
{
chu(); //調用賦初值程序
xipai(); //調用洗牌程序
printf("第一位的牌是:\n");
fapai(52); //調用發牌程序,給第一位發牌
printf("\n第二位的牌是:\n");
fapai(52); //調用發牌程序,給第二位發牌
printf("\n第三位的牌是:\n");
fapai(52); //調用發牌程序,給第三位發牌
printf("\n第四位的牌是:\n");
fapai(52); //調用發牌程序,給第四位發牌
printf("\n");
}
個人意見,歡迎交流。
『陸』 初學c語言,求一個自動發牌的程序。
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
intcard[52];
voidDisplay(inti)//將0~51之間的數映射成牌號和花色
{
switch(i%4)
{
case0:printf("紅桃");break;
case1:printf("黑桃");break;
case2:printf("梅花");break;
case3:printf("方塊");break;
}
if(i/4+1<11)
printf("%d ",i/4+1);
elseif(i/4+1==11)
printf("%c ",'J');
elseif(i/4+1==12)
printf("%c ",'Q');
elseif(i/4+1==13)
printf("%c ",'K');
}
voidInitCard()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)//隨機生成52個數
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}
for(i=0;i<52;i++)//初始化輸出
{
if(i%5==0&&i!=0)printf(" ");
Display(card[i]);
}
}
voiddeal()
{
inti,j,temp;
srand((int)time(0));
for(i=0;i<52;i++)
{
temp=rand()%52;
for(j=0;j<i;j++)
{
if(card[j]==temp)break;
}
if(j==i)card[i]=temp;
elsei--;
}
for(i=0;i<52;i++)//發牌輸出
{
if(i%5==0&&i!=0)printf(" ");
if(i%13==0&&i!=0)printf(" ");
if(i%13==0)
printf("第%d個玩家的牌: ",i/13+1);
Display(card[i]);
}
}
intmain(void)
{
intkey=0;
printf("================主菜單============== ");//菜單
printf("=============1、初始化撲克========= ");
printf("=============2、洗牌、發牌========= ");
printf("=============3、退出============== ");
while(key!=3)//選擇菜單
{
printf("請輸入菜單功能編號:");
scanf("%d",&key);
switch(key)
{
case1:InitCard();break;//初始化
case2:deal();//發牌
default:break;
}
printf(" ");
}
return0;
}
代碼如上,測試結果:
基本思想就是,只要隨機生成的數,發給誰都一樣;所以初始化和發牌時候先隨機生成52個不同的數0~51,初始化時,直接輸出就可以了。發牌時按13一組一次分給一個人就可以了。
『柒』 求高手幫忙寫一個c語言發牌程序
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define PLAYER 4//玩家人數
#define NUM 13//玩家拿牌數
#define SIZE 52//所有牌數
//聲明函數
void PokerRand(int *pokerRand);
void Palyer(int *pokerRand);
void Process(int *countA, int *countB, int *countC, int *countD);
void Output(int *poker, int *countA, int *countB, int *countC, int *countD);
struct PokerGame
{
int A[NUM];//記錄玩家手中的黑桃牌
int B[NUM];//記錄玩家手中的紅桃牌
int C[NUM];//記錄玩家手中的梅花牌
int D[NUM];//記錄玩家手中的方片牌
int manNum[NUM];//記錄玩家手裡所有的牌
}man[PLAYER];
//隨機產生52張牌
void PokerRand(int *pokerRand)
{
int i, j;
srand((unsigned)time(NULL));
for (i=0; i<SIZE; i++)
{
MARK: pokerRand[i] = rand()%52;
for (j=0; j<i; j++)
{
if (pokerRand[i] == pokerRand[j])
{
goto MARK;
}
}
}
}
//給4個玩家發牌
void Palyer(int *pokerRand)
{
int i, j;
int count = 0;
for (j=0; j<NUM; j++)
{
for (i=0; i<PLAYER; i++)//輪流發牌
{
man[i].manNum[j] = pokerRand[count++];
}
}
}
//統計玩家手中的牌
void Process(int *countA, int *countB, int *countC, int *countD)
{
int i, j;
for (i=0; i<PLAYER; i++)
{
countA[i] = 0;
countB[i] = 0;
countC[i] = 0;
countD[i] = 0;
for (j=0; j<NUM; j++)//統計四個玩家手中的牌
{
if ((man[i].manNum[j] >= 0) && (man[i].manNum[j] < 13))//黑桃
{
man[i].A[ countA[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 26)//紅桃
{
man[i].B[ countB[i]++ ] = man[i].manNum[j];
}
else if (man[i].manNum[j] < 39)//梅花
{
man[i].C[ countC[i]++ ] = man[i].manNum[j];
}
else//方片
{
man[i].D[ countD[i]++ ] = man[i].manNum[j];
}
}
}
}
//輸出
void Output(int *poker, int *countA, int *countB, int *countC, int *countD)
{
int i, j;
printf("撲克牌自動發牌 %c(黑) %c(紅) %c(梅) %c(方):\n", 6, 3, 5, 4);
for (i=0; i<PLAYER; i++)
{
printf("\n第%d人 :\n", i+1);//開始輸出第i個玩家
printf("%c:\t", 6);//輸出第i個玩家的黑桃牌
for (j=0; j<countA[i]; j++)
{
if (poker[ man[i].A[j] ] == 10)//假如等於10,以%d格式輸出
{
printf("%4d", poker[ man[i].A[j] ]);
}
else//否則以%c格式輸出
{
printf("%4c", poker[ man[i].A[j] ]);
}
}
printf("\n");
printf("%c:\t", 3);//輸出第i個玩家的紅桃牌
for (j=0; j<countB[i]; j++)
{
if (poker[ man[i].B[j] ] == 10)
{
printf("%4d", poker[ man[i].B[j] ]);
}
else
{
printf("%4c", poker[ man[i].B[j] ]);
}
}
printf("\n");
printf("%c:\t", 5);//輸出第i個玩家的梅花牌
for (j=0; j<countC[i]; j++)
{
if (poker[ man[i].C[j] ] == 10)
{
printf("%4d", poker[ man[i].C[j] ]);
}
else
{
printf("%4c", poker[ man[i].C[j] ]);
}
}
printf("\n");
printf("%c:\t", 4);//輸出第i個玩家的方片牌
for (j=0; j<countD[i]; j++)
{
if (poker[ man[i].D[j] ] == 10)
{
printf("%4d", poker[ man[i].D[j] ]);
}
else
{
printf("%4c", poker[ man[i].D[j] ]);
}
}
printf("\n");
}
}
void main(void)
{
int countA[PLAYER] = { 0 };//記錄4個玩家持黑桃牌數
int countB[PLAYER] = { 0 };//記錄4個玩家持紅桃牌數
int countC[PLAYER] = { 0 };//記錄4個玩家持梅花牌數
int countD[PLAYER] = { 0 };//記錄4個玩家持方片牌數
int pokerRand[SIZE] = { 0 };//存放隨機產生52張牌
int poker[SIZE] = {65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,
65, 50, 51, 52, 53, 54, 55, 56, 57, 10, 74, 81, 75,};
PokerRand(pokerRand);//洗牌
Palyer(pokerRand);//發牌
Process(countA, countB, countC, countD);//整牌
Output(poker, countA, countB, countC, countD);//亮牌
printf("\n\n\n");
system("pause");
}
『捌』 C語言鬥地主發牌程序,急求,謝謝
我愛吃的水果有很多,而我最愛吃的是葡萄。;;細雨如絲,茂密的葡萄藤貪婪地吮吸著春天的甘露。它們伸展著嫩綠的枝條,一片片掌形的葉子在雨霧中歡笑著。;;;;清明節過後,葡萄藤長出了一粒粒小籽,這就是葡萄花的花苞。過了幾天,葡萄花開了,花小小的,白中帶有一點黃,像一團團雪花。風把香氣吹得四處飄散,引來了一群群辛勤的蜜蜂和翩翩起舞的蝴蝶。我走到葡萄藤下,聞到一陣清香,使人感到心曠神怡。;;;;春末夏初時,葡萄花紛紛凋謝,開花的地方又長出一粒粒小籽,這就是葡萄了。葡萄先是嫩綠色的,上面就像蒙上了一層「白霜」,粉撲撲的。然後漸漸變成紫色,一個個綠中透紫的珍珠,掛在葡萄藤上,閃著誘人的亮光。最後葡萄已經成熟了,一串串亮晶晶、紫紅色的葡萄,掛滿了葡萄藤,讓人真想嘗一嘗。;;;摘下一顆葡萄,剝去它的表皮,便看見一顆誘人的晶球。把它放進嘴裡,舌尖觸到葡萄那晶瑩透明的果肉,使人感到細膩。沒有熟透的葡萄甜中帶酸,熟透了就甜滋滋的,叫人越吃越想吃。;;;葡萄不但營養豐富,含有多種維生素,是水果中的佳品,而且還有一定的醫葯價值。;;;我真喜愛葡萄啊。