整体思路

创建Card类,定义单张扑克的属性(点数,花色),行为(比较大小),以及比较大小的规则;

创建Poker类,定义一副扑克牌,采用List集合框架;

创建Player类,定义玩家属性(id,名字,手牌);

创建Game类,程序入口,步骤如下:

创建一副牌的对象 ;

输入id,昵称 ;

抽牌(两人不会抽到同一张牌),洗牌(采用Card类中的排序方法);

比较两人的最大牌(还是采用Card类中的排序方法)

/**

* Card类,定义扑克牌,以及扑克牌的比大小规则

* Created by haivo on 2016/4/18.

*/

public class Card {

public String color; //花色

public String point; //点数

public Card(String color,String point){

this.color = color;

this.point = point;

}

/**

* 重写toString用于打印单张扑克的点数及花色

*/

@Override

public String toString() {

return color+point;

}

/**

* 扑克牌比较规则,采用Comparator实现,这个规则会在多个地方被用到

*/

public static Comparator comparator = new Comparator() {

@Override

public int compare(Card o1, Card o2) {

Poker comparePokerTemp = new Poker();

if(o1==null o2==null)

return 0;

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);

}

return bigger;

}

};

}

@Override

public boolean equals(Object obj) {

if(obj instanceof Card){

if(color.equals(((Card) obj).color) && point.equals(((Card) obj).point)){

return true;

}

}

return false;

}

/**

* 扑克类:采用List泛型分别定义花色和点数

* Created by haivo on 2016/4/18.

*/

public class Poker {

public List color = new ArrayList<>(); //花色共4种

public List point = new ArrayList<>(); //点数3.4.5····2共13种

public List 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 2016/4/18.

*/

public class Player {

public int id;

public String name;

public List playerCard; //玩家手牌

public Player(int id,String name) {

this.id = id;

this.name = name;

this.playerCard = new ArrayList<>();

}

@Override

public String toString() {

return this.id + ":"+this.name;

}

}

/**

* Game类:两人抽牌选择手中的较大牌比大小

* Created by haivo on 2016/4/18.

*/

public class Game {

Poker mPoker = new Poker();

Poker dealedPoker = new Poker();

Scanner scanner = new Scanner(System.in);

int surplusCards = 51; //剩余牌数

int dealCardCount; //将要抽取的手牌数量

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

* @return

*/

public List dealCard(int dealCount){

Random random = new Random();

List playCard = new ArrayList<>();

do {

Card card = dealedPoker.pokerList.get(random.nextInt(surplusCards--));

playCard.add(card);

dealCount--;

dealedPoker.pokerList.remove(card);

}while(dealCount>0);

return playCard;

}

/**

* 两玩家的最大牌做比较,决出胜负,采用comparator规则排序

*/

public void compareMaxCard(){

List 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()+" 获胜。");

}else{

System.out.println("\n 所以:"+player2.toString()+" 获胜。");

}

}

}

用java制作扑克牌_JAVA入门第三季-简易扑克牌程序-个人编写-源代码(含截图)...相关推荐

  1. java 记牌_JAVA入门第三季——简易扑克牌

    package PlayingCards; /** * * * 定义扑克牌类 * @author Administration * */ public class Card { private int ...

  2. java打印扑克牌_JAVA入门第三季-简易扑克牌程序-个人编写-源代码(含截图)

    整体思路 创建Card类,定义单张扑克的属性(点数,花色),行为(比较大小),以及比较大小的规则: 创建Poker类,定义一副扑克牌,采用List集合框架: 创建Player类,定义玩家属性(id,名 ...

  3. 时钟电路程序设计c语言,STC89C52单片机简易时钟程序电路设计(附源代码和电路图)...

    51(STC89C52)单片机简易时钟程序电路设计(附源代码和电路图) 上一篇做了一个温湿度采集电路,觉得这东西玩起来还是挺有意思,然后就想做一个时钟,于是就有了下文 1.成品图 51hei图片_20 ...

  4. 基于java的校园二手平台系统毕业设计(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    以下是一个基于Java的校园二手平台系统的毕业设计建议: 1. 系统概述: 校园二手平台系统是一个用于学生之间进行二手物品交易的应用程序.通过该系统,学生可以方便地发布和浏览二手物品的信息,并进行交流 ...

  5. 阿克斯java表_java 入门第三季的6-5 作业, 希望大家指点

    java 入门第三季的6-5 作业, 希望大家指点 public static void main(String[] args) { // TODO Auto-generated method stu ...

  6. java慕课网第三季_Java入门第三季

    package com.yangkai.pai; import java.util.*; public class PlayTest { //创建扑克牌的载体,扑克牌是有序的,不重复载体,所以用Lis ...

  7. java搭载服务_Java入门及环境搭载

    Java入门及环境搭载 1.Java特性和优势 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java三大版本 ①JavaSE:标准版(桌面程序,控制台开发) ②Ja ...

  8. 基于java的连连看游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)

    项目说明报告 基于Java的连连看游戏设计与实现 连连看是一种消除类益智游戏,核心要求是在规定的时间内,消除游戏界面中选中的两张相同的图案,直至完全消除所有图案.这款游戏操作简单(只需单击鼠标左键操作 ...

  9. java了解异常_ID检测_Java入门第三季7-1简易扑克牌游戏(自定义玩家个数,玩家个数和ID异常检测)...

    玩家类: package playingCardsGame; import java.util.ArrayList; import java.util.List; /* * 玩家类 */ public ...

  10. java怎么实现打牌_JAVA入门第三季实战:简易扑克牌

    本程序使用了ArrayList .HashMap,简单应用了Java第三季的集合框架 首先创建一个卡牌类 /** * 扑克类 */ public class Poker { public Poker( ...

最新文章

  1. 在不同浏览器上进行网页测试,结果是...... | 每日趣闻
  2. 如何解决秒杀的性能问题和超卖的讨论 及防止按钮多次点击
  3. 让我们共同怀揣文学与艺术的梦想
  4. SlidingMenu的使用,结合Fragment(eclipse环境)
  5. dojo 九 effects dojo/_base/fx 和 dojo/fx
  6. 需求调研的方法及过程_培训需求调研方法
  7. 选一种比较熟悉的软件,点评它的优缺点,并描述此类软件的发展历史
  8. 调试器工作原理--CPU软件断点/硬件断点/单步执行标识
  9. java 基本数据类型及自动类型转换
  10. 红帽停止对 CentOS 投资
  11. 题目 2194: 蓝桥杯2018年第九届真题-递增三元组
  12. AR人工智能模型训练计算机,ar人工智能模型训练一般采用什么计算机
  13. vue.3.0 dom赋值_Vue3.0的几大新特性
  14. 变色龙引导启动看不到Mac分区盘符的解决办法
  15. 基于Babylon.js编写宇宙飞船模拟程序1——程序基础结构、物理引擎使用、三维罗盘
  16. 极客公园创新大会 IF 2018,用科技主义和独立思维击退喧嚣
  17. KGB知识图谱通过数据可视化提升金融行业分析能力
  18. C++20新特性—概述
  19. Android实现即时聊天
  20. 【20保研】复旦大学2019年大数据学院全国优秀大学生夏令营活动方案

热门文章

  1. 解决warnings potentially fixable with the `--fix`
  2. Detected outdated SDK Tools version 0.0.0 when the min version is XXX
  3. DANDELION 病毒
  4. vue动态添加图片/背景图
  5. Kali 编译 Android 源码
  6. 扬州工业机器人外壳设计排名_扬州模型达人设计机器人获奖
  7. java实现excel转pdf_java实现excel转pdf(poi+itext)
  8. sin30的c语言表达式,c语言sin30度怎么打
  9. 工业设备数字孪生白皮书
  10. 无法重命名,文件不可信,后台被自动关闭,“Notebook Untitled.ipynb is not trusted jupyter”