还是借鉴了别人的...

来源:7-1 简易扑克牌游戏

sun_haha

2015-08-06 20:26

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

}
写回答 关注

1回答

  • 4654
    2016-01-09 15:23:16

    可以可以

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题