package com.ppcc.control;
/**
* 单张扑克牌
* @author ppcc
*
*/
public class Card implements Comparable<Card>{
/**
* 扑克牌的值
*/
private String cardVal;
/**
* 扑克牌的花色
*/
private String cardColor;
/**
* 构造函数
* @param cardVal 扑克牌的值
* @param cardColor 扑克牌的花色
*/
public Card(String cardVal, String cardColor) {
super();
this.cardVal = cardVal;
this.cardColor = cardColor;
}
/**
* 获取扑克牌的值
* @return 扑克牌的值
*/
public String getCardVal() {
return cardVal;
}
/**
* 获取扑克牌的花色
* @return 扑克牌的花色
*/
public String getCardColor() {
return cardColor;
}
/**
* 显示卡片内容
*/
public void showCard(){
System.out.print(this.cardColor+this.cardVal+" ");
}
@Override
public int compareTo(Card o) {
//扑克牌的大小依次增加
String cardNum = "2,3,4,5,6,7,8,9,10,J,Q,K,A";
//扑克牌的花色依次增大
String cardColor = "梅花,方块,黑桃,红桃";
int flag=cardNum.indexOf(this.getCardVal())-cardNum.indexOf(o.getCardVal());
if(flag==0)
flag=cardColor.indexOf(this.getCardColor())-cardColor.indexOf(o.getCardColor());
return flag;
}
}
package com.ppcc.control;
import java.util.ArrayList;
import java.util.Collections;
/**
* 创建一副扑克牌
* @author ppcc
*
*/
public class Pocker {
/**
* 一副扑克牌
*/
private ArrayList<Card> pocker;
/**
* 扑克牌的值
*/
private static final String[] valBase={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
/**
* 扑克牌的花色
*/
private static final String[] colorBase={"红桃","黑桃","梅花","方块"};
/**
* 构造函数
*/
public Pocker() {
pocker=new ArrayList<Card>();
this.createPocker();
}
/**
* 创建扑克牌
*/
private void createPocker(){
for(String color : colorBase)
for(String val : valBase)
pocker.add(new Card(val,color));
}
/**
* 显示所有扑克牌
*/
public void showPocker(){
for(Card currCard : pocker)
currCard.showCard();
}
/**
* 洗牌
*/
public void rePocker(){
Collections.shuffle(pocker);
}
/**
* 臭牌
* @param players 玩家
* @param num 玩家需抽取的牌数目
*/
public void sendOutPocker(ArrayList<Player> players,int num){
for(int j=0; j<num; j++){
for(int i=0; i<players.size(); i++){
System.out.println("---玩家:"+players.get(i).getName()+"-拿牌");
//玩家抽牌
players.get(i).setHandCard(pocker.get(0));
//将抽取后排从pocker里删除
pocker.remove(0);
}
}
}
}
package com.ppcc.control;
import java.util.ArrayList;
/**
* 玩家类
* @author ppcc
*
*/
public class Player {
/**
* 玩家ID
*/
private int ID;
/**
* 玩家姓名
*/
private String name;
/**
* 玩家手牌
*/
private ArrayList<Card> handCard;
/**
* 构造函数
* @param iD 玩家ID
* @param name 玩家姓名
* @param handCard 玩家手牌
*/
public Player(int iD, String name) {
this.ID = iD;
this.name = name;
handCard=new ArrayList<Card>();
}
/**
* 获取玩家ID
* @return 玩家ID
*/
public int getID() {
return ID;
}
/**
* 获取玩家姓名
* @return 玩家姓名
*/
public String getName() {
return name;
}
/**
* 修改玩家手牌
* @param handCard 玩家手牌
*/
public void setHandCard(Card card) {
this.handCard.add(card);
}
/**
* 获取玩家手中大的牌
* @return 大的牌
*/
public Card maxCard(){
//初始化最大牌
Card maxCard=handCard.get(0);
for(int i=1; i<handCard.size(); i++){
//两两比较得到最大牌
if(handCard.get(i).compareTo(maxCard)>0)
maxCard=handCard.get(i);
}
return maxCard;
}
/**
* 打印玩家手中的牌
*/
public void showHandCard(){
System.out.print(this.name+":");
//for循环来遍历打印手中的牌
for(Card card :handCard)
card.showCard();
System.out.println("");
}
}
package com.ppcc.control;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* 比点数游戏
* @author ppcc
*
*/
public class Game {
/**
* 玩家数组链表
*/
private ArrayList<Player> players;
/**
* 扑克牌
*/
private Pocker pocker;
/**
* 玩家数目
*/
private int playNum;
/**
* 玩家抽取牌数目
*/
private int getCardNum;
/**
* 输入
*/
private Scanner sc=new Scanner(System.in);
/**
* 构造函数
*/
public Game(){
players=new ArrayList<Player>();
this.prePocker();
}
/**
* 准备扑克牌
*/
public void prePocker(){
System.out.println("-----------------创建扑克牌-----------------");
//创建扑克牌
pocker=new Pocker();
System.out.println("----------------创建扑克牌成功!----------------");
//将创建好扑克牌打印出来
pocker.showPocker();
System.out.println("-----------------开始洗牌-----------------");
//进行洗牌
pocker.rePocker();
System.out.println("-----------------洗牌结束!-----------------");
}
/**
* 创建玩家
*/
public void createPlayers(){
System.out.println("-----------------创建玩家-----------------");
//输入玩家数目
do{
playNum=inputCommand("输入玩家数目:");
if(playNum<2 || playNum>10)
System.out.println("玩家数目为2~10!\n");
}while(playNum<2 || playNum>10);
//输入玩家抽取的牌数
do{
getCardNum=inputCommand("输入玩家抽取牌数:");
if(getCardNum<1 || getCardNum>5)
System.out.println("玩家抽取为1~5!\n");
}while(getCardNum<1 || getCardNum>5);
//for循环创建玩家
for(int i=0; i<playNum; i++){
System.out.println("\n请输入第"+(i+1)+"玩家的ID和姓名!");
int id=idJup();
System.out.print("玩家姓名:");
String name=sc.next();
//创建玩家并添加到玩家数组链表中
players.add(new Player(id,name));
}
//打印所有玩家姓名
for(Player player : players)
System.out.println("----欢迎玩家:"+player.getName());
System.out.println("----------------创建玩家结束!----------------");
}
/**
* 发牌
*/
public void sendPocker(){
System.out.println("------------------开始发牌------------------");
//发牌
pocker.sendOutPocker(players, getCardNum);
System.out.println("------------------发牌结束------------------");
}
/**
* 开始游戏
*/
public void game(){
System.out.println("------------------开始游戏------------------");
//初始化赢的玩家
Player win=players.get(0);
for(Player player : players){
System.out.print("玩家:"+player.getName()+"最大的手牌为:");
//获取玩家手中的最大牌
player.maxCard().showCard();
System.out.println("");
//比较玩家之间的最大牌
if(win.maxCard().compareTo(player.maxCard())<0)
win=player;
}
//打印赢的玩家
System.out.println("玩家:"+win.getName()+"获胜!");
System.out.println("------------------游戏结束------------------");
}
/**
* 显示所有玩家手中的牌
*/
public void playerPocker(){
for(Player player : players){
player.showHandCard();
}
}
/**
* 输入整数
* @param str 提示语句
* @return 返回输入值
*/
public int inputCommand(String str){
try{
System.out.print(str);
int input=sc.nextInt();
return input;
}catch(InputMismatchException e){
System.out.println("输入有误!请输入数字命令!\n");
sc=new Scanner(System.in);
return inputCommand(str);
}
}
/**
* 判断是否存在id
* @return
*/
public int idJup(){
int id=inputCommand("玩家ID:");
for(Player player : players){
if(player.getID()==id){
System.out.println("ID不唯一,重新输入!\n");
return idJup();
}
}
return id;
}
}
package com.ppcc.control;
/**
* 测试类
* @author ppcc
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Game game=new Game();
game.createPlayers();
game.sendPocker();
game.game();
game.playerPocker();
}
}