扑克牌生成与洗牌程序_第1页
扑克牌生成与洗牌程序_第2页
扑克牌生成与洗牌程序_第3页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、扑克牌生成与洗牌程序使用JAVA编写以下程序:1、请左义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit: 分别描述一张牌的牌面值(如:A、K、Q、J、10、9、3、2等)和花色(如:“黑桃”、“红桃”、“梅花”、"方块”);泄义Card类中的public访问权限的构造方法,为类中的变量 赋值:左义protected访问权限的方法getFace(),得到扑克牌的牌面值;立义protected访问 权限的方法getSuitO,得到扑克牌的花色:泄义方法toStringO,返回表示扑克牌的花色和牌 而值字符串(如“红桃A”、“梅花10”等)。2、

2、若应用程序的main方法中,龙义字符串数组f和s:分别表示扑克牌的牌面值和花色: 圧义52个元素的Card类型数组deck,用来存放4个花色的52张牌。如下所示。String f =;String s = "黑桃”,"红桃","梅花","方块"Card deck = new Card(52;(1)使用Card类的构造方法给deck数组的52张牌赋值,要求数组中先存放黑桃花色的A、 2、3、K:然后是红桃花色的A、2、3、K;梅花花色的A、2、3、K; 方块花色的A、2、3、K。请写出实现上述功能的程序段。(2)请编写模拟洗牌

3、的完整程序,即把数组deck中的扑克牌随机打乱存放顺序。原题如下:引用内容private String face; /A. K. Q. J. 10,. 2private String suit; / Spade, Heart. Club, Diamondpublic Card(String suit. String face) this.face = face; this.suit = suit: protected String getFace() return face; protected String getSuitO return suit; public String toStri

4、ngO return suit + "" + face;)解题,完成程序解:程序代码package poker;public class Card private String face; /A, K. Q, J, 10,. 2private String suit; / Spade, Heart, Club, Diamondpublic Card(String suit. String face) this.face = face; this.suit = suit: protected String getFace() return face; protected St

5、ring getSuit() return suit; public String toStringO return suit + ” ” + face; public static void shuffle(Card deck, int startindex, int size, int splitindex) /shuffle 洗牌 MstartIndex:H + startindex);if (splitindex * 2 > size) /if rand is 30 Card.swap(deck. startindex, splitindex, size splitindex);

6、 52、0. 30、22shuffle(deck, size splitlndcx. splitlndcx, size splitlndcx); 52、22、30、22 else if (splitindex * 2 < size) /if rnd is 10Card.swap(deck, startindex, size - splitindex, splitindex); 52、0 42、10shuffle(deck, startindex, size - splitindex, splitindex); /752x 0、42、10 else Card.swap(deck, star

7、tindex, splitindex, splitindex);)public static void swap(Card deck, int srclndex, int dstlndcx, int size) 交换/SRC是在本位豊显示:source的缩写,源的意思HREF是点击后连接的目标:HyperlinkReference,超链接引用String face =,M,;String suit =,n,;for (int i = 0; i < size; i+) face = decksrclndex + ij.face;suit = decksrclndcx + ij.suit;d

8、ecksrclndcx + ij.face = deckjdstlndex + ij.face;deckfsrclndex + ij.suit = deckfdstlndex + ij.suit;deckfdstlndex + ij.face = face;deckdstlndex + ij.suit = suit;/* * ©param args */public static void main(String args) /第一问解答Card deck = new Card52J;String f =H3H, M4H, M5 M6H, UT H8 H9H, TO”,叩JQ; K;

9、String s = HSpadeH, uHearf ”Club”,”Diamond”;for (int i = 0; i < sength; i+)for (int j = 0; j < f.length;j+) decki * 13 + j = newCard(si, fj);/依次存入数组之中,每 13 张一回合 第二问解答int rnd = 0;int numOfShuffle = 10;for (int i = 0; i < numOfShuffle; i+) rnd = (int) Math.abs(Math.random() * 52);/Math.random

10、。返回大于或等于0.0但小于1.0的伪随机double值。Card.shuffle(deck, 0, deck.length, rnd); / Testfor (int i=0; i<deck.length: i+) PS:函数shuffle是模拟洗牌的过程,这里的算法比较粗燥,随机产生一个52以内数字n, 把牌分为两份,和n-52,然后把两份牌交换一下顺序,这里做了十次切牌。shuffle是 一个递归函数,startindex表示切牌的开始序号,splitindex表示切牌的序号,即上面的n getXXX是用来得到牌的花色和数字,第二问用不到本文来自 CSDN 博客,转载请标明岀处:

11、hUD:/blogcsdnnc"wcishaofci/archivc/2009/07/28/4386710asDXpublic class DeckOfCards extends Applet private Card deck;private int currentCard;private Button dealButton, shuffleButton;private TextField displayCard;public void init()String faces = ,rAce Deuce1; Three1; HFourH, Tive1; ”Six”,HSevenH,E

12、ight1; KNineM, ”Ten”,“Jack”,”Queen”, "King” ;String suits| =Hearts”,“Diamonds”,”Clubs”,"Spades1' ;deck = new Card 52 ;currentCard = -l;for( int i = 0; i < deck.length; i+ )deck i = new Card( faces i % 13 , suitsf i/ 13 );dcalButton = new Button(”Deal card1');shufflcButton = new

13、Button( "shuffle cards");displayCard = new TextField( 20 );displayCard.setEditable( false);add( dealButton);add( shufflcButton);add( displayCard);)public boolean action( Event event. Object object)if( event.target = dealButton )Card dealt = dealCard();if( dealt != null)displayCard.setText(

14、 dealt.toStringO);showStatus( HCard #:M + currentCard );else displayCard.setText( “NO MORE CARDS TO DEAL!”); showStatus( ''Shuffle cards to continue!n);)else if( event.target = shufflcButton ) displayCard.setText( ”SHUFFLE CARDS.”); showStatus();shuffle();displayCard.setText( HDECK IS SHUFFL

15、ED!");return true:public void shuffle()currentCard = -1;for( int i = 0; i < deck .length; i+ )int j = (int)( Math.random() * 52 );Card temp = dcck i ;deck i = deck j ;deck j = temp;dealButton.enabIe();public Card dcalCard()if( +currentCard < deck length )return deck currentCard ;else deal

16、Button.disableO;return null;)class Cardprivate String face;private String suit;public Card( String f, String s ) face = f;suit = s;public String toString()return face + M ofN + suit;)两种洗牌一发牌程序收藏用指针实现,这种比较低效include <stdio.h>include <time.h>void shuffle(int 13);void deal(int 13, char *, ch

17、ar );int main(void)char *suit4 =hearts", "diamonds”,"clubs”,"spades”;char face13 = "one1; ntwo HthreeM, Hfour “five”,HsixN, Mseven ,eight,;,nineM, Hten, eleven1; “twelve”, Hthrteen,'srand(time(NULL);int deck413=0;shuffle(deck);dcal(deck, face, suit);return 0; void shuffl

18、e(int deck13)int card, row, column;for (card = 1; card <= 52: card+) row = rand() % 4;column = rand() % 13;while (deckrowcolumn != 0) row = rand() % 4;column = rand() % 13;deckrow column = card;void deal(int deck13, char *face, char *suit(J)int card, row, column;for (card = 1; card <= 52: card

19、+)for (row = 0; row <= 3: row+)for (column = 0; column <= 12; column+)if (deckrowcolumn = card) printf("%s of %snM, facecolumn, suitfrow);第二种是直接用结构体实现,比较高效#include <stdio.h>include <time.h>struct card char *suit;char *face;);typcdcf stnict card Card:void fillDeck(Card *, char

20、*, char *); void shuffle(Card *);void dcaI(Card *);int main(void)Card card52;char *suit4 =hearts", "diamonds”,"clubs", "spades”;char *face13 = "one1; ”two'; HthreeM, Mfour Hfive "six11, Hsevenn, Meightu;,nine, Mten eleven1; “twelve”, Hthrteen,'srand(time(NU

21、LL);fillDeck(card, face, suit);shuffle(card);deal(card);return 0;)严void shuffle(int deck13)int card, row, column;for (card = 1; card <= 52; card+) row = rand() % 4;column = rand() % 13;while (deckrowcolumn != 0) row = rand() % 4;column = rand() % 13;deckjrow column = card;void deal(int dcck13, ch

22、ar *face, char *suit)int card, row, column;for (card = 1; card <= 52; card+)for (row = 0; row <= 3; row+)for (column = 0; column <= 12; column+)if (deck|rowcolumn = card)printf(M%s of %snM, facecolumn, suitrow);*/ void fillDeck(Card *dcck. char *facet char *suit) int i;for (i = 0; i < 52

23、; i+) decki.face = facei % 13;decki.suit = suitfi / 13;void shuffle(Card *deck)int ij;Card temp:for (i = 0; i < 52; i+) j = rand() % 52;temp = decki;decki = deck|j;dcckfj = temp;void deal(Card *deck)int i;for (i = 0; i < 52; i+) printf("%s of %sn", decki.face, deck(ij.suit);用c卄写的扑克牌洗

24、牌、发牌和检测牌质量的程序代 码(2010-12-12 23:00:09)转载标签:C、扑克牌辻用C+写的扑克牌洗牌、发牌和检测牌质量的程序代码编译器我用的是VS2008 oC:Wi ndowssystem32cmd.exe3956K4K3106很好!里面有3对牌方黑方梅:ft4286979ft2IS黯評潮块在里面喔执行结果如图:源文件:有三个文件,一个是主函数文件扑克牌游戏.cpp,个是类函数成员的实现文件dapai. cpp,还有一个是系统生成的stdafx. app<>/ stdafx.h :标准系统包含文件的包含文件,这个是系统生成K stdafx. h /或是经常使用但不

25、常更改的/特定于项目的包含文件/从Windows头中排除极少使用的资料pragma once ttdefine WIN32_LEAN_ANDJIEAN #include <stdio. h>nclude <tcharh>/ TODO:在此处引用程序需要的其他头文件/扑克牌游戏.cpp :定义控制台应用程序的入口点。主函数文件#include "stdafx h#i nclude"iosti?e&nr#include z,dapai h"using namespace std;void compare( int ( *pl) 13 ,

26、 int (*p2) 4 )检测哪手牌比较好 int max=*p2:int rowl = 0;for ( int i = 0; i < 4; i+ )for ( int j =0; j < 4; j卄)if ( *(*(p2 + i)+j) >max )max = *(*(p2 + i)+j);rowl = i;if ( max >=5 )cout«,z第"rowl+1手牌比较好! zz«endl;int _tmain(int argc, _TCHAR* argvL)dapai A;docout«"你要发儿手牌? &q

27、uot;endl;cin>>A m;cout«"你要发多少张牌?,«endl;cin»A n;if ( A. m*A. n > 52 )cout«z/输入非法,一副扑克牌只有52张,请重新输入!n; if ( A. m > 4)cout«z/输入非法,只允许发4手牌以内! zz«endl; while (A. m*A. n > 52 A. m > 4 );A. xipai ();A. fapai (A. m, A. n);compare (A. a, A. b);/dapai cpp 文件

28、 include "StdAfx. h" #include ,?dapaih" ttinclude "cstdlib" #include "ctime" nclude "iomanip" #include "iostreanT using namespace std;/构造函数开始 dapai:dapai(void)for ( int i = 0; i < 4; i+ )for( int j = 0; j < 13; j+ ) aij=0;for (int i 二 0; i 4; i

29、+ )for(int j = 0; bij二 0;color 0 color 1 _color 2 Jcolor 3 j < 4;j+ )桃花块桃 黑梅方红facet 0 _*;2”3” L ”0厂6 ;7“89"l(rfacet 1 facet 2 J facet 3 facet 4 facet 5 facet 6 face 7 face 8 facet 9 facet 10 二,zrfacet 11 = ©facet 12 二 *for ( int row = 0; row < 4; row +)for ( int column = 0; column &l

30、t; 13; column +)pukeF row column _ 二0;srand( time( 0 ) ) ;/获得出前的时间作为随机数的种子 /构造函数结束 洗牌void dapai : : xipai ()int row;int column;for ( int pai = 1; pai <= 52; pai +)dorow = rand () % 4; column = rand() % 13; while ( pukeL row _ column !二0 ); pukeL row J column J = pai:/洗牌结束 开始发牌5手牌,每手牌n张 void dapai

31、 : : fapai ( int m, int n)int pai = 1:int k = n;for( int j = 0; j < m; j+ )cout«,z第手牌为:,z«endl; for ( ; pai <= n; pai + )for ( int row = 0; row < 4; row + )for ( int column = 0; column < 13; column + )if ( pukeL row _ column J = pai )cout«setw( 8 ) «right«color r

32、ow « /z«face column «endl:alj.column. +;bjrow +;是否有连续的五张牌岀现标记 成对牌出现的对数三张同号牌出现的个数/四张同号牌一起出现的标记n = n+k;0000countOcount2count3count4=0;/连对标记i 二 0; i < 13; i + )count222for (int辻(二二 2 )/一对牌count2+;/cout«,/有一对,«facei«,/在里面,/«endl;辻(= 3)/三张一样的牌count3+;/cout«,z有三张

33、同号牌facei«"在里面,z«endl;if (= 4 )/四张一样的牌count4+;/cout«,/有四张同号牌facei«在里面"endl;检测是否有顺子牌(五张连续的牌)for (int i = 0; i < 12; i+ )if (= 0 )countO =0;elsecount0+;if ( countO = 5)break; 顺子牌检测结束for ( int i = 0; i < 12; i+ )if ( a j i < 2 )count222 = 0;elsecount222+;辻(count222

34、 =3 )break;判断对牌并输出if ( count2 != 0 )cout «,ztt 很好!里面有/z«count2«/z对牌z,«endl;/对牌输出结束辻(count3 !二0 )cout «z/tt里面有三张同号牌"<endl;辻(count4 != 0 )cout «,ztt里面有四张同号牌/z<<endl:if ( countO = 5 )cout«z/tt非常棒!注意看,里面有顺子牌(五张连续的牌)®z,«endl;辻(count222 = 3 )cout&

35、#171;,ztt不错,里面有连对喔!,z«endl;判断输出是否有五张同花的牌for (int i 二 0; i 4; i + )if ( bji二二 5 )cout«,ztt 手气不错!有 5 张"color i <<"在里面喔"endl;/同花判断结束发牌结束dapai:dapai(void)/ stdafx.cpp :只包括标准包含文件的源文件,这个是系统生成的/扑克牌游戏pch将作为预编译头/ stdafx. obj将包含预编译类型信息#include "stdafx h/ TODO:在 STDAFX. H 中/引用任何所需的附加头文件,而不是在此文件中引用#incl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论