项目需求:1.创建扑克,去掉大小王
2.创建两名玩家,输入玩家ID不为整数时捕获异常。
3.为玩家发两张牌,取每名玩家手牌中点数最大的进行比较,花色相同时进行点数比较。
- 数据模型分析:创建牌和玩家实体类,分别设置牌的属性为花色和点数,玩家的属性为ID,姓名和手牌。
- 业务模型分析:分为扑克牌初始化,洗牌,发牌。
- 显示分析:显示出创建好的扑克牌,玩家显示,玩家手牌显示,获胜玩家显示
“`
package com.duan;
import java.util.Comparator;
/**
* 扑克牌基类
*
* @author dgq
* @date 2017年5月18日
*/
public class Card implements Comparable,Comparator {
/**
* 花色
*/
public String color;
/**
* 点数
*/
public String num;
public Card() {
}
public Card(String color, String num) {
this.color = color;
this.num = num;
}
/*
* 重写copare方法,用数字进行比较
*
* @param arg0
*
* @param arg1
*
* @return
*/
@Override
public int compare(Card arg0, Card arg1) {
// TODO Auto-generated method stub
/*花色不同就比较花色,花色相同就比较点数*/
if (arg0.color.compareTo(arg1.color) != 0) {
return arg0.color.compareTo(arg1.color);
} else
return arg0.num.compareTo(arg1.num);
}
@Override
public int compareTo(Card arg0) {
// TODO Auto-generated method stub
return this.num.compareTo(arg0.num);
}
}
“`package com.duan;
import java.util.Comparator;
/**
* 扑克牌基类
*
* @author dgq
* @date 2017年5月18日
*/
public class Card implements Comparable,Comparator {
/**
* 花色
*/
public String color;
/**
* 点数
*/
public String num;
public Card() {
}
public Card(String color, String num) {
this.color = color;
this.num = num;
}
/*
* 重写copare方法,用数字进行比较
*
* @param arg0
*
* @param arg1
*
* @return
*/
@Override
public int compare(Card arg0, Card arg1) {
// TODO Auto-generated method stub
/*花色不同就比较花色,花色相同就比较点数*/
if (arg0.color.compareTo(arg1.color) != 0) {
return arg0.color.compareTo(arg1.color);
} else
return arg0.num.compareTo(arg1.num);
}
@Override
public int compareTo(Card arg0) {
// TODO Auto-generated method stub
return this.num.compareTo(arg0.num);
}
}
package com.duan;
import java.util.ArrayList;
import java.util.List;
/**
* 玩家类
*
* @author dgq
* @date 2017年5月18日
*/
public class Player {
/**
* 玩家id
*/
public int id;
/**
* 玩家姓名
*/
public String name;
/**
* 玩家手牌
*/
public List handCardList;
public Player(int id, String name) {
this.id = id;
this.name = name;
handCardList = new ArrayList<Card>();
}
}
package com.duan;
import java.util.ArrayList;
import java.util.Collections;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
* @author dgq 发牌系统
* @date 2017年5月18日
*/
public class DealSystem {
/**
* cardList
*/
private List cardList;
/**
* playerList
*/
private List playerList;
/**
* nums
*/
private String[] nums = { “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”,
“10”, “J”, “Q”, “K” };
/**
* 红桃,黑桃,方块,梅花
*/
private String[] colors = { “红桃”, “黑桃”, “方块”, “梅花” };
/**
* console
*/
private Scanner console;
/**
* 初始化牌
*
* @return void
*/
public void init() {
System.out.println("开始创建扑克牌");
cardList = new ArrayList<Card>();
for (int i = 0; i < colors.length; i++) {
for (int j = 0; j < nums.length; j++) {
Card card = new Card(colors[i], nums[j]);
cardList.add(card);
}
}
System.out.println("创建扑克牌成功:");
for (Card card : cardList) {
System.out.println("花色:" + card.color + "," + "点数:" + card.num);
}
}
/**
* 洗牌
*
* @return void
*/
public void shuffleCards() {
playerList = new ArrayList<Player>();
// 等待输入玩家ID
console = new Scanner(System.in);
int n = 1;
do {
System.out.println("请输入第" + n + "位玩家的ID和姓名:");
while (true) {
try {
System.out.println("请输入玩家ID");
int ID = console.nextInt();
if (playerList.contains(new Player(ID, null))) {
throw new Exception();
}
System.out.println("请输入玩家姓名");
String name = console.next();
/* 创建玩家 */
Player player = new Player(ID, name);
playerList.add(player);
break;
} catch (InputMismatchException e) {
// TODO: handle exception
console = new Scanner(System.in);
System.out.println("请输入整数型的ID");
}catch (Exception e) {
// TODO: handle exception
System.out.println("该ID已存在,请重新输入");
}
}
n++;
} while (n < 3);
System.out.println("创建玩家成功");
for (Player player : playerList) {
System.out.println("欢迎玩家:" + player.name);
}
System.out.println("开始洗牌:");
Random random = new Random();
for (int m = 0; m < 2; m++) {
for (int i = 0; i < playerList.size(); i++) {
System.out.println("玩家" + playerList.get(i).name + "拿牌");
int j = random.nextInt(52);
playerList.get(i).handCardList.add(cardList.get(j));
}
}
System.out.println("洗牌完成");
for (Player player : playerList) {
System.out.println("玩家:" + player.name + "的手牌为:");
for (Card card : player.handCardList) {
System.out.println(card.color + ":" + card.num);
}
}
}
/**
* 比牌
*
* @return void
*/
public void compareCard() {
List<Card> list1 = new ArrayList<Card>();
for (int i = 0; i < playerList.size(); i++) {
List<Card> list = playerList.get(i).handCardList;
/* 按照点数进行排序 */
Collections.sort(list);
list1.add(list.get(list.size() - 1));
}
/* 对新构建的牌列表进行排序 */
Collections.sort(list1, new Card());
for (Card card : list1) {
System.out.println("新构建的牌为:" + "花色:" + card.color + "," + "点数:"
+ card.num);
}
System.out.println("获胜的牌是" + "花色:" + list1.get(list1.size() - 1).color
+ "点数:" + list1.get(list1.size() - 1).num);
/* 查看玩家列表是否包含最大的牌 */
for (int i = 0; i < playerList.size(); i++) {
if (playerList.get(i).handCardList
.contains(list1.get(list1.size() - 1))) {
System.out.println("玩家:" + playerList.get(i).name + "获胜");
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DealSystem ds = new DealSystem();
ds.init();
ds.shuffleCards();
ds.compareCard();
}
}