已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
扑克牌生成与洗牌程序 使用JAVA编写以下程序: 1、请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit;分别描述一张牌的牌面值(如:A、K、Q、J、10、9、3、2等)和花色(如:“黑桃”、“红桃”、“梅花”、“方块”);定义Card类中的public访问权限的构造方法,为类中的变量赋值;定义protected访问权限的方法getFace(),得到扑克牌的牌面值;定义protected访问权限的方法getSuit(),得到扑克牌的花色;定义方法toString(),返回表示扑克牌的花色和牌面值字符串(如“红桃A”、“梅花10”等)。 2、若应用程序的main方法中,定义字符串数组f和s;分别表示扑克牌的牌面值和花色;定义52个元素的Card类型数组deck,用来存放4个花色的52张牌。如下所示。 String f =A,2,3,4,5,6,7,8,9,10,J,Q,K; String s = 黑桃,红桃,梅花,方块; Card deck = new Card52; (1)使用Card类的构造方法给deck数组的52张牌赋值,要求数组中先存放黑桃花色的A、2、3、K;然后是红桃花色的A、2、3、K;梅花花色的A、2、3、K;方块花色的A、2、3、K。请写出实现上述功能的程序段。 (2)请编写模拟洗牌的完整程序,即把数组deck中的扑克牌随机打乱存放顺序。 原题如下: 引用内容 private String face; / A, K, Q, J, 10, . 2 private String suit; / Spade, Heart, Club, Diamond public Card(String suit, String face) this.face = face; this.suit = suit; protected String getFace() return face; protected String getSuit() return suit; public String toString() return suit + + face; 解题,完成程序解: 程序代码package poker; public class Card private String face; / A, K, Q, J, 10, . 2 private String suit; / Spade, Heart, Club, Diamond public Card(String suit, String face) this.face = face; this.suit = suit; protected String getFace() return face; protected String getSuit() return suit; public String toString() return suit + + face; public static void shuffle(Card deck, int startIndex, int size, int splitIndex) /shuffle洗牌 System.out.println(startIndex: + startIndex); if (splitIndex * 2 size) /if rand is 30 Card.swap(deck, startIndex, splitIndex, size - splitIndex); /52、0、30、22 shuffle(deck, size - splitIndex, splitIndex, size - splitIndex); /52、22、30、22 else if (splitIndex * 2 size) /if rnd is 10 Card.swap(deck, startIndex, size - splitIndex, splitIndex); /52、0、42、10 shuffle(deck, startIndex, size - splitIndex, splitIndex); /52、0、42、10 else Card.swap(deck, startIndex, splitIndex, splitIndex); public static void swap(Card deck, int srcIndex, int dstIndex, int size) /交换 /SRC是在本位置显示:source的缩写,源的意思 HREF是点击后连接的目标:HyperlinkReference,超链接引用 String face = ; String suit = ; for (int i = 0; i size; i+) face = decksrcIndex + i.face; suit = decksrcIndex + i.suit; decksrcIndex + i.face = deckdstIndex + i.face; decksrcIndex + i.suit = deckdstIndex + i.suit; deckdstIndex + i.face = face; deckdstIndex + i.suit = suit; /* * param args */ public static void main(String args) /第一问解答 Card deck = new Card52; String f = A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K; String s = Spade, Heart, Club, Diamond; for (int i = 0; i s.length; i+) for (int j = 0; j f.length; j+) decki * 13 + j = new Card(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()返回大于或等于 0.0 但小于 1.0 的伪随机 double 值。 Card.shuffle(deck, 0, deck.length, rnd); / Test /* for (int i=0; ideck.length; i+) System.out.println(decki); */PS:函数shuffle是模拟洗牌的过程,这里的算法比较粗燥,随机产生一个52以内数字n,把牌分为两份,1.n-1,和n-52,然后把两份牌交换一下顺序,这里做了十次切牌。 shuffle是一个递归函数,startIndex 表示切牌的开始序号,splitIndex表示切牌的序号,即上面的n getXXX是用来得到牌的花色和数字,第二问用不到本文来自CSDN博客,转载请标明出处:/weishaofei/archive/2009/07/28/4386710.aspxpublic class DeckOfCards extends Applet private Card deck; private int currentCard; private Button dealButton, shuffleButton; private TextField displayCard; public void init() String faces = Ace, Deuce, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King ; String suits = Hearts, Diamonds, Clubs, Spades ; deck = new Card 52 ; currentCard = -1; for( int i = 0; i deck.length; i+ ) deck i = new Card( faces i % 13 , suits i / 13 ); dealButton = new Button( Deal card ); shuffleButton = new Button( shuffle cards ); displayCard = new TextField( 20 ); displayCard.setEditable( false ); add( dealButton ); add( shuffleButton ); add( displayCard ); public boolean action( Event event, Object object ) if( event.target = dealButton ) Card dealt = dealCard(); if( dealt != null ) displayCard.setText( dealt.toString() ); showStatus( Card #: + currentCard ); else displayCard.setText( NO MORE CARDS TO DEAL! ); showStatus( Shuffle cards to continue! ); else if( event.target = shuffleButton ) displayCard.setText( SHUFFLE CARDS. ); showStatus( ); shuffle(); displayCard.setText( DECK IS SHUFFLED! ); return true; public void shuffle() currentCard = -1; for( int i = 0; i deck.length; i+ ) int j = ( int )( Math.random() * 52 ); Card temp = deck i ; deck i = deck j ; deck j = temp; dealButton.enable(); public Card dealCard() if( +currentCard deck.length ) return deck currentCard ; else dealButton.disable(); return null; class Card private String face; private String suit; public Card( String f, String s ) face = f; suit = s; public String toString() return face + of + suit ; 两种洗牌发牌程序 收藏 用指针实现,这种比较低效#include #include void shuffle(int 13);void deal(int 13, char *, char *);int main(void) char *suit4 = hearts, diamonds, clubs, spades; char *face13 = one, two, three, four, five, six, seven, eight,nine, ten, eleven, twelve, thrteen; srand(time(NULL); int deck413 = 0; shuffle(deck); deal(deck, face, suit); 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; deckrowcolumn = card; void deal(int deck13, char *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 (deckrowcolumn = card) printf(%s of %sn, facecolumn, suitrow); 第二种是直接用结构体实现,比较高效#include #include struct card char *suit; char *face;typedef struct card Card;void fillDeck(Card *, char *, char *);void shuffle(Card *);void deal(Card *);int main(void) Card card52; char *suit4 = hearts, diamonds, clubs, spades; char *face13 = one, two, three, four, five, six, seven, eight,nine, ten, eleven, twelve, thrteen; srand(time(NULL); 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; deckrowcolumn = card; void deal(int deck13, char *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 (deckrowcolumn = card) printf(%s of %sn, facecolumn, suitrow); */void fillDeck(Card *deck, char *face, char *suit) int i; for (i = 0; i 52; i+) decki.face = facei % 13; decki.suit = suiti / 13; void shuffle(Card *deck) int i, j; Card temp; for (i = 0; i 52; i+) j = rand() % 52; temp = decki; decki = deckj; deckj = temp; void deal(Card *deck) int i; for (i = 0; i 52; i+) printf(%s of %sn, decki.face, decki.suit); 用C+写的扑克牌洗牌、发牌和检测牌质量的程序代码(2010-12-12 23:00:09) 转载标签: c、扑克牌it用C+写的扑克牌洗牌、发牌和检测牌质量的程序代码编译器我用的是VS2008 。执行结果如图:源文件:有三个文件,一个是主函数文件 扑克牌游戏.cpp,一个是类函数成员的实现文件dapai.cpp,还有一个是系统生成的stdafx.app。头文件:有两个,一个是dapai.h,另一个是系统生成的stdafx.h。可以实现的简单功能:可以从一副扑克牌(不带王牌)发出n手牌(n4),每手牌发m张牌(n*m 52)。每次执行都是随机发牌,发的牌没有重复出现,可以检测每一手牌的质量,比如有多少对牌出现、是否有同花出现、是否有连对出现、是否有顺子出现。我只是凭着我的思路写下的。里面没有复杂的算法,只是一些简单的语句,也有比较详细的注释。虽然写得不专业,但是我还会继续努力学习下去的。下面是源码:/dapai.h文件#pragma onceclass dapaipublic:int m;/要发几手牌int n;/要发牌的张数int count0;/是否有连续的五张牌出现标记int count2;/成对牌出现的对数int count3;/三张同号牌出现的个数int count4;/四张同号牌一起出现的标记int count222;void xipai();/洗牌void fapai(int,int);/发牌int a413;/ 发牌时统计同号牌出现的次数int b44;/ 发牌时统计每中花色出现的次数dapai(void);dapai(void);private:int puke413;const char *color 4 ;/ 花色char *face 13 ;/ 牌面;/ stdafx.h : 标准系统包含文件的包含文件,这个是系统生成的stdafx.h/ 或是经常使用但不常更改的/ 特定于项目的包含文件/#pragma once#define WIN32_LEAN_AND_MEAN/ 从 Windows 头中排除极少使用的资料#include #include / TODO: 在此处引用程序需要的其他头文件/ 扑克牌游戏.cpp : 定义控制台应用程序的入口点。/主函数文件#include stdafx.h#includeiostream#include dapai.husing namespace std;void compare( int ( *p1) 13 , int (*p2) 4 )/检测哪手牌比较好int max=*p2;int row1 = 0;for ( int i = 0; i 4; i+ )for ( int j =0; j max )max = *(*(p2 + i)+j);row1 = i;if ( max =5 )cout第 row1+1 手牌比较好!endl;int _tmain(int argc, _TCHAR* argv)dapai A;docout你要发几手牌?A.m;cout你要发多少张牌?A.n;if ( A.m*A.n 52 )cout 4)cout输入非法,只允许发4手牌以内! 52 | A.m 4 );A.xipai();A.fapai(A.m,A.n);compare(A.a, A.b);/dapai.cpp文件#include StdAfx.h#include dapai.h#include cstdlib#include ctime#include iomanip#include iostreamusing 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+ )for(int j = 0; j 4; j+ )bij=0;color 0 = 黑桃;color 1 = 梅花;color 2 = 方块;color 3 = 红桃;face 0 =A;face 1 = 2;face 2 = 3;face 3 = 4;face 4 = 5;face 5 =6;face 6 = 7;face 7 = 8;face 8 = 9;face 9 =10;face 10 = J;face 11 = Q;face 12 = K;for ( int row = 0; row 4; row +)for ( int column = 0; column 13; column +)puke 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 ( puke row column !=0 );puke row column = pai;/洗牌结束/开始发牌,m手牌,每手牌n张void dapai:fapai( int m, int n)int pai = 1;int k = n;for( int j = 0; j m; j+ )cout第j+1手牌为:endl;for ( ; pai = n; pai + )for ( int row = 0; row 4; row + )for ( int column = 0; column 13; column + )if ( puke row column = pai )coutsetw( 8 )rightcolor row face column endl;ajcolumn +;bjrow +;n = n+k;count0 = 0;/是否有连续的五张牌出现标记count2 = 0;/成对牌出现的对数count3 = 0;/三张同号牌出现的个数count4 = 0;/四张同号牌一起出现的标记count222 = 0;/连对标记for (int i = 0; i 13; i + )if ( aji = 2 )/一对牌count2+;/cout有一对facei在里面endl;if ( aji = 3)/三张一样的牌count3+;/cout有三张同号牌facei在里面endl;if ( aji = 4 )/四张一样的牌count4+;/cout有四张同号牌facei在里面endl;/检测是否有顺子牌(五张连续的牌)for (int i = 0; i 12; i+ )if ( aji = 0 )count0 =0;elsecount0+;if ( count0 = 5)break;/顺子牌检测结束for ( int i = 0; i 12; i+ )if ( a j i 2 )count222 = 0;elsecount222+;if ( count222 =3 )break;/判断对牌并输出if ( count2 != 0 )cout tt很好!里面有count2对牌endl;/对牌输出结束if ( count3 !=0 )cout tt里面有三张同号牌endl;if ( count4 != 0 )cout tt里面有四张同号牌endl;if ( count0 = 5 )couttt非常棒!注意看,里面有顺子牌(五张连续的牌)喔endl;if ( count222 = 3 )couttt 不错,里面有连对喔!endl;/判断输出是否有五张同花的牌for (int i = 0; i 4; i + )if ( bji = 5 )couttt手气不错!有5张color i 在里面喔endl;/同花判断结束/发牌结束dapai:dapai(void)/ stdafx.cpp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026西安医学高等专科学校附属医院招聘(35人)考试参考题库及答案解析
- 2026年合肥轨道交通报关员岗位招聘笔试备考试题及答案解析
- 2026国元农业保险股份有限公司贵州分公司第二批社会招聘1人考试模拟试题及答案解析
- 2026年郑州市上街区公务员人员招聘笔试试题与答案详解
- 2026田东县公安局公开招聘警务辅助人员22人笔试备考试题及答案解析
- 成都市温江区永盛中心幼儿园 2026年10月公开招聘编外教师(1人)考试参考题库及答案解析
- 2026年开封市南关区公务员人员招聘笔试备考题库与答案详解
- 2026年河北省邢台市公务员人员招聘考试备考题库与答案详解
- 2026年银川市西夏区公务员人员招聘考试备考题库与答案详解
- 2026年小麦种植行业市场运行态势报告及未来五至十年第二曲线与持续增长
- 福建省泉州市惠安县第一教研联盟2025-2026学年七年级上册期中联考数学科试卷(含答案)
- 水稻绿色生产技术
- 辽宁省葫芦岛市连山区2025-2026学年上学期期末考试七年级数学试卷(含部分答案)
- 民航消防安全知识培训课件
- 2025年秋人教版小学数学五年级上册期中模拟测试卷附答案(三套)
- 中石化油料计量课件
- 风电场运维成本控制-全面剖析
- 生猪屠宰兽医卫生检验人员理论考试题及答案
- DL∕T 1878-2018 燃煤电厂储煤场盘点导则
- MOOC 运输组织学-北京交通大学 中国大学慕课答案
- (高清版)TDT 1055-2019 第三次全国国土调查技术规程
评论
0/150
提交评论