关于javajava面试基础问题的扑克牌问题

点击这里,将文章分享到自己的动态
JAVA入门第三季-简易扑克牌程序-个人编写-源代码(含截图)
创建Card类,定义单张扑克的属性(点数,花色),行为(比较大小),以及比较大小的规则;
创建Poker类,定义一副扑克牌,采用List集合框架;
创建Player类,定义玩家属性(id,名字,手牌);
创建Game类,程序入口,步骤如下:
创建一副牌的对象 ;
输入id,昵称 ;
抽牌(两人不会抽到同一张牌),洗牌(采用Card类中的排序方法);
比较两人的最大牌(还是采用Card类中的排序方法)
* Card类,定义扑克牌,以及扑克牌的比大小规则
* Created by haivo on .
public class Card {
public S //花色
public S //点数
public Card(String color,String point){
this.color =
this.point =
* 重写toString用于打印单张扑克的点数及花色
public String toString() {
return color+
* 扑克牌比较规则,采用Comparator实现,这个规则会在多个地方被用到
public static Comparator&Card& comparator = new Comparator&Card&() {
public int compare(Card o1, Card o2) {
Poker comparePokerTemp = new Poker();
if(o1==null
int bigger = comparePokerTemp.point.indexOf(o1.point) - comparePokerTemp.point.indexOf(o2.point);
if(bigger==0){
bigger = comparePokerTemp.color.indexOf(o1.color) - comparePokerTemp.color.indexOf(o2.color);
public boolean equals(Object obj) {
if(obj instanceof Card){
if(color.equals(((Card) obj).color) && point.equals(((Card) obj).point)){
* 扑克类:采用List泛型分别定义花色和点数
* Created by haivo on .
public class Poker {
public List&String& color = new ArrayList&&(); //花色共4种
public List&String& point = new ArrayList&&(); //点数3.4.5····2共13种
public List&Card& pokerList = new ArrayList&&(); //扑克中的扑克牌共52张,没有王牌
public Poker() {
color.add("");
color.add("");
color.add("");
color.add("");
point.add("3");
point.add("4");
point.add("5");
point.add("6");
point.add("7");
point.add("8");
point.add("9");
point.add("10");
point.add("J");
point.add("Q");
point.add("K");
point.add("A");
point.add("2");
for (int color = 0; color & 4; color++) {
for (int point = 0; point & 13; point++) {
Card mCard = new Card(this.color.get(color),this.point.get(point));
pokerList.add(mCard);
public void printPokerCard(){
for (int i = 0; i & this.pokerList.size(); i++) {
System.out.print(this.pokerList.get(i).toString()+" ");
System.out.println("");
* Created by haivo on .
public class Player {
public List&Card& playerC //玩家手牌
public Player(int id,String name) {
this.name =
this.playerCard = new ArrayList&&();
public String toString() {
return this.id + ":"+this.
* Game类:两人抽牌选择手中的较大牌比大小
* Created by haivo on .
public class Game {
Poker mPoker = new Poker();
Poker dealedPoker = new Poker();
Scanner scanner = new Scanner(System.in);
int surplusCards = 51;
//剩余牌数
int dealCardC //将要抽取的手牌数量
Player player1, player2;
public static void main(String[] args) {
Game g = new Game();
System.out.println("创建了一副扑克牌: ");
g.mPoker.printPokerCard();
g.creatPlayer();
System.out.println("请输入玩家要抽取多少张牌:(不超过25张)");
g.dealCardCount = g.scanner.nextInt();
g.pullAndShuffleCard(); //抽牌和洗牌
g.compareMaxCard(); //两玩家的最大牌做比较,决出胜负
* 创建玩家
public void creatPlayer() {
System.out.print("请输入第一名玩家ID: ");
int inputId = scanner.nextInt();
System.out.print("请输入第一名玩家昵称: ");
String inputName = scanner.next();
player1 = new Player(inputId, inputName);
System.out.print("请输入第二名玩家ID: ");
inputId = scanner.nextInt();
System.out.print("请输入第二名玩家昵称: ");
inputName = scanner.next();
player2 = new Player(inputId, inputName);
* 抽取手牌和洗牌,采用comparator规则排序
public void pullAndShuffleCard(){
player1.playerCard.addAll(dealCard(dealCardCount));
System.out.println("玩家一抽取手牌是:");
for (Card c: player1.playerCard) {
System.out.print(c.toString()+" ");
Collections.sort(player1.playerCard,Card.comparator);
System.out.println("\n玩家一洗牌后的手牌是:");
for (Card c: player1.playerCard) {
System.out.print(c.toString()+" ");
player2.playerCard.addAll(dealCard(dealCardCount));
System.out.println("\n玩家二抽取的手牌是:");
for (Card c: player2.playerCard) {
System.out.print(c.toString()+" ");
Collections.sort(player2.playerCard,Card.comparator);
System.out.println("\n玩家二洗牌后的手牌是:");
for (Card c: player2.playerCard) {
System.out.print(c.toString()+" ");
* 玩家连续抽取dealCoun张牌,返回多张卡牌(用List盛装)
* @param dealCount
public List&Card& dealCard(int dealCount){
Random random = new Random();
List&Card& playCard = new ArrayList&&();
Card card = dealedPoker.pokerList.get(random.nextInt(surplusCards--));
playCard.add(card);
dealCount--;
dealedPoker.pokerList.remove(card);
}while(dealCount&0);
return playC
* 两玩家的最大牌做比较,决出胜负,采用comparator规则排序
public void compareMaxCard(){
List&Card& biggerPlayerCard = new ArrayList&&(2);
biggerPlayerCard.add(player1.playerCard.get(player1.playerCard.size()-1));
biggerPlayerCard.add(player2.playerCard.get(player2.playerCard.size()-1));
Collections.sort(biggerPlayerCard,Card.comparator);
if(player1.playerCard.contains(biggerPlayerCard.get(1))){
System.out.println("\n
所以:"+player1.toString()+" 获胜。");
System.out.println("\n
所以:"+player2.toString()+" 获胜。");
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
若觉得本文不错,就分享一下吧!
评论加载中...
看过此文的用户,还看了以下文章
正在加载中
作者相关文章点击这里,将文章分享到自己的动态
简易扑克牌游戏-Java基础练习(面向对象+集合)
List 接口的实现类 ArrayList
SortedSet (Set 接口子类,实现了排序)接口的实现类 TreeSet
SortedMap (Map 接口的子类,实现了 key 排序)接口的实现类 TreeMap
Comparable 接口及其 comparaTo() 方法的实现
重写 equals() 和 hashCode()
静态代码块
Const.java
public class Const {
static Map&String, Integer& pokerC
static Map&String, Integer& pokerC
pokerContent = new HashMap&&();
pokerColor = new HashMap&&();
pokerContent.put("2", 2);
pokerContent.put("3", 3);
pokerContent.put("4", 4);
pokerContent.put("5", 5);
pokerContent.put("6", 6);
pokerContent.put("7", 7);
pokerContent.put("8", 8);
pokerContent.put("9", 9);
pokerContent.put("10", 10);
pokerContent.put("J", 11);
pokerContent.put("Q", 12);
pokerContent.put("K", 13);
pokerContent.put("A", 14);
pokerColor.put("黑桃", 4);
pokerColor.put("红桃", 3);
pokerColor.put("方片", 2);
pokerColor.put("梅花", 1);
public static int getPokerContentInteger(String content){
return pokerContent.get(content);
public static int getPokerColorInteger(String color){
return pokerColor.get(color);
Poker.java
public class Poker implements Comparable {
public Poker() {
public String getColor() {
public void setColor(String color) {
this.color =
public String getContent() {
public void setContent(String content) {
this.content =
public String toString() {
return getColor() + getContent();
public int compareTo(Object o) {
Poker poker = (Poker)
int thisPokerContentInteger = Const.getPokerContentInteger(this.getContent());
int pokerContentInteger = Const.getPokerContentInteger(poker.getContent());
if (thisPokerContentInteger & pokerContentInteger) {
} else if (thisPokerContentInteger == pokerContentInteger) {
int thisPokerColorInteger = Const.getPokerColorInteger(this.getColor());
int pokerColorInteger = Const.getPokerColorInteger(poker.getColor());
if (thisPokerColorInteger & pokerColorInteger) {
} else if (thisPokerColorInteger == pokerColorInteger) {
return -1;
return -1;
public boolean equals(Object o) {
if (this == o)
if (o == null
getClass() != o.getClass())
Poker poker = (Poker)
if (!this.content.equals(poker.content))
return this.color.equals(poker.color);
public int hashCode() {
int result = color.hashCode();
result = 31 * result + content.hashCode();
Player.java
public class Player implements Comparable {
private int ID;
private SortedSet&Poker& sortedP
public SortedSet&Poker& getSortedPoker() {
return sortedP
public void addSortedPoker(Poker sortedPoker) {
this.sortedPoker.add(sortedPoker);
public Player() {
sortedPoker = new TreeSet&&();
public int getID() {
return ID;
public void setID(int ID) {
this.ID = ID;
public String getName() {
public void setName(String name) {
this.name =
public String toString() {
return "玩家 {" +
"ID=" + ID +
", name='" + name + '\'' +
public boolean equals(Object o) {
if (this == o)
if (o == null
getClass() != o.getClass())
Player player = (Player)
return ID == player.ID;
public int hashCode() {
return ID;
public int compareTo(Object o) {
Player player = (Player)
if (this.getID() & player.getID()) {
} else if (this.getID() == player.getID()) {
} else if (this.getID() & player.getID()) {
return -1;
PlayGame.java
* 1.创建扑克牌,用到随机数,四个花色(黑桃,红桃,方片,梅花),数字(2-0),字母(J,Q,K,A),不含大小王,总计52张牌.
* 2.遍历生成的扑克牌,显示生成的扑克牌,显示花色和内容
* 3.洗牌,把生成的扑克牌顺序打乱
* 4.生成2个玩家,包括 ID,姓名
* 5.发牌,一人一张牌,从打乱顺序的牌的开头发牌,一人2张牌,就是前4张牌
* 6.开始游戏,显示2个玩家手中最大的手牌(先比较数字,数字相同时比较花色(黑桃&红桃&方片&梅花))
* 7.显示胜利者的名字
* 8.显示2个玩家名字及手牌
public class PokerGame {
List&Poker& pokerL
//洗牌以后的扑克牌
List&Poker& shufflerP
//创建2个玩家,ID不能相同
SortedSet&Player& playerS
//玩家手牌数量
private int playerHandPokerNumber = 2;
public void play() {
//创建52张扑克牌
createPoker();
pokerShuffle();
//遍历洗牌以后的扑克牌
iteratorAfterShuffle();
//创建2个玩家
createPlayer();
//遍历玩家
iteratorPlayer();
dealPoker();
//开始游戏
comparePlayerHandPoker();
//遍历玩家手牌
iteratorHandPoker();
* 创建扑克牌
private void createPoker() {
System.out.println("-----------创建扑克牌-----------");
List&String& pokerContent = new ArrayList&&(Const.pokerContent.keySet());
List&String& pokerColor=new ArrayList&&(Const.pokerColor.keySet());
pokerList = new ArrayList&&();
Poker temP
for (int i = 0; i & pokerColor.size(); i++) {
for (int j = 0; j & pokerContent.size(); j++) {
temPoker = new Poker();
temPoker.setColor(pokerColor.get(i));
temPoker.setContent(pokerContent.get(j));
pokerList.add(temPoker);
System.out.println("-----------扑克牌创建成功-----------");
iteratorPoker();
* 遍历扑克牌
public void iteratorPoker() {
for (int i = 0; i & pokerList.size(); i++) {
if (i == 0) {
System.out.print("为:[" + pokerList.get(i) + ", ");
if (i == pokerList.size() - 1) {
System.out.println(pokerList.get(i) + "]");
System.out.print(pokerList.get(i) + ", ");
public void pokerShuffle() {
System.out.println("-----------开始洗牌...-----------");
shufflerPoker = new ArrayList&&();
Random random = new Random();
while (shufflerPoker.size() & pokerList.size()) {
Poker poker = pokerList.get(random.nextInt(pokerList.size()));
if (shufflerPoker.contains(poker)) {
shufflerPoker.add(poker);
System.out.println("-----------洗牌结束!-----------");
* 洗牌结束后遍历牌
public void iteratorAfterShuffle() {
Iterator&Poker& iterator = shufflerPoker.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
* 创建 2 个玩家,要求 ID 必须为整数, ID不能重复。
private void createPlayer() {
playerSet = new TreeSet&&();
Scanner scanner = new Scanner(System.in);
System.out.println("-----------创建玩家...-----------");
Player temP
for (int i = 1; i &= 2; i++) {
//检查 ID 是否重复
boolean isDuplication =
while (!isDuplication) {
temPlayer = new Player();
System.out.println("请输入第 " + i + " 位玩家的ID和姓名:");
boolean isID =
while (!isID) {
System.out.println("输入ID:");
id = Integer.parseInt(scanner.next());
} catch (Exception e) {
System.out.println("请输入整数类型的ID!");
temPlayer.setID(id);
boolean isName =
while (!isName) {
System.out.println("输入姓名:");
name = scanner.next();
} catch (Exception e) {
System.out.println("请输入正确的玩家姓名!");
temPlayer.setName(name);
if (playerSet.contains(temPlayer)) {
isDuplication =
System.out.println("玩家ID已经被占用,请重新输入");
playerSet.add(temPlayer);
isDuplication =
* 遍历玩家,显示玩家姓名
private void iteratorPlayer() {
for (Player p : playerSet) {
System.out.println("---欢迎玩家:" + p.getName());
private void dealPoker() {
System.out.println("-----------开始发牌...-----------");
for (int i = 0; i & playerHandPokerNumber * playerSet.size(); i++) {
if (i % 2 == 0) {
player = playerSet.first();
player.addSortedPoker(shufflerPoker.get(i));
player = playerSet.last();
player.addSortedPoker(shufflerPoker.get(i));
System.out.println("----玩家:" + player.getName() + "-拿牌");
System.out.println("-----------发牌结束!-----------");
* 显示玩家的手牌
private void iteratorHandPoker() {
System.out.println("玩家各自的手牌为:");
for (Player p : playerSet) {
SortedSet&Poker& sortedPoker = p.getSortedPoker();
System.out.print(p.getName() + ":[");
for (Poker poker : sortedPoker) {
if (poker.equals(sortedPoker.last())) {
System.out.print(poker + "]" + "\n");
System.out.print(poker + ", ");
* 比较玩家的手牌
private void comparePlayerHandPoker() {
System.out.println("-----------开始游戏...-----------");
SortedMap&Poker, Player& playerHandMaxPoker = new TreeMap&&();
for (Player p : playerSet) {
Poker poker = p.getSortedPoker().last();
playerHandMaxPoker.put(poker, p);
System.out.println("玩家:" + p.getName() + "最大的手牌为:" + poker);
Poker maxPoker = playerHandMaxPoker.lastKey();
Player player = playerHandMaxPoker.get(maxPoker);
System.out.println("--------------玩家:" + player.getName() + "获胜!----------------");
public static void main(String[] args) {
PokerGame pokerGame = new PokerGame();
pokerGame.play();
-----------创建扑克牌-----------
-----------扑克牌创建成功-----------
为:[黑桃A, 黑桃J, 黑桃K, 黑桃Q, 黑桃2, 黑桃3, 黑桃4, 黑桃5, 黑桃6, 黑桃7, 黑桃8, 黑桃9, 黑桃10, 梅花A, 梅花J, 梅花K, 梅花Q, 梅花2, 梅花3, 梅花4, 梅花5, 梅花6, 梅花7, 梅花8, 梅花9, 梅花10, 方片A, 方片J, 方片K, 方片Q, 方片2, 方片3, 方片4, 方片5, 方片6, 方片7, 方片8, 方片9, 方片10, 红桃A, 红桃J, 红桃K, 红桃Q, 红桃2, 红桃3, 红桃4, 红桃5, 红桃6, 红桃7, 红桃8, 红桃9, 红桃10]
-----------开始洗牌...-----------
-----------洗牌结束!-----------
-----------创建玩家...-----------
请输入第 1 位玩家的ID和姓名:
请输入整数类型的ID!
输入姓名:
请输入第 2 位玩家的ID和姓名:
输入姓名:
---欢迎玩家:Tom
---欢迎玩家:Jack
-----------开始发牌...-----------
----玩家:Tom-拿牌
----玩家:Jack-拿牌
----玩家:Tom-拿牌
----玩家:Jack-拿牌
-----------发牌结束!-----------
-----------开始游戏...-----------
玩家:Tom最大的手牌为:梅花K
玩家:Jack最大的手牌为:梅花Q
--------------玩家:Tom获胜!----------------
玩家各自的手牌为:
Tom:[红桃6, 梅花K]
Jack:[黑桃6, 梅花Q]
若觉得本文不错,就分享一下吧!
评论加载中...
看过此文的用户,还看了以下文章
正在加载中
移动开发工程师
作者相关文章我显示的扑克牌怎么不像人家的?
[问题点数:50分,结帖人yhec]
我显示的扑克牌怎么不像人家的?
[问题点数:50分,结帖人yhec]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!java 扑克牌游戏开发_百度知道
java 扑克牌游戏开发
系统包括以下部分:1)发牌、求解(输入算式)、验证以及输出结果等内容。2)系统实现中应使用开发工具,对游戏中使用的各类对象如文字、图片、动画、声音等进行处理;3)系统要有一定的过程记录功能,如用户与成绩等。
我有更好的答案
好难!!话说才给15分会有人去做么?= =
= =...没分了呀。怎么办
去看看韩顺平的java教程,他的教程里有教做坦克游戏的,对图片、声音的处理都有,如果你看懂了,应该就能做出个像样的扑克游戏了~~做游戏的原理都是一样的
这个项目可以用来做毕业设计了。如果你是需要练习java的话,建议自己写
我们的课程设计- -,老师说这些都是简单的。。
这玩意儿你们老师不一定都写得出来(.如果是培训班的老师倒是有可能),图片,动画,声音..这些对象的操作都极为复杂
很久以前做过一个& 但是&功能不全
可以把代码发给我看下嘛。我的邮箱:。十分感谢。
为您推荐:
其他类似问题
扑克牌游戏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 java 扑克牌游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信