问答详情
源自:7-1 简易扑克牌游戏

发现实现炸金花的功能好难,只写了个简单的比较大小,请斧正。

package com.pokergame;

public class Poker implements Comparable<Poker> {
	private String number;//扑克的点数
	private String color;//花色
	private int value;
	public Poker(int value){
		this.value=value;
		setNumCol();
	}
	
	/**
	 * 102-110代表方片2-10,111-114代表方片J-A
	 * 202-210代表梅花2-10,211-214代表梅花J-A
	 * 302-310代表红桃2-10,311-314代表红桃J-A
	 * 402-410代表黑桃2-10,411-414代表黑桃J-A
	 */
	public void setNumCol(){
		switch(value/100){
		case 1:color="方片";
			break;
		case 2:color="梅花";
			break;
		case 3:color="红桃";
			break;
		case 4:color="黑桃";
		}
		switch(value%100){
		case 2:number="2";
			break;
		case 3:number="3";
			break;
		case 4:number="4";
			break;
		case 5:number="5";
			break;
		case 6:number="6";
			break;
		case 7:number="7";
			break;
		case 8:number="8";
			break;
		case 9:number="9";			
			break;		
		case 10:number="10";
			break;
		case 11:number="J";
			break;
		case 12:number="Q";
			break;
		case 13:number="K";
			break;
		case 14:number="A";
		}
	}
	@Override
	public int compareTo(Poker o) {//单张牌比较的方法
		// TODO Auto-generated method stub
		if(value==o.getValue()){
			return 0;
		}
		if(value%100>o.getValue()%100){
			return 1;
		}else if(value%100<o.getValue()%100){
			return -1;
		}else{
			if(value/100>o.getValue()/100){
				return 1;
			}else{
				return -1;
			}
		}

	}

	
	
	/**
	 * get、set
	 */
	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	
}
package com.pokergame;

import java.util.*;

public class Player {
	private int id;
	private String name;
	List<Poker> pokerCatch;

	public Player(int id,String name){
		this.id=id;
		this.name=name;
		pokerCatch=new ArrayList<Poker>();
	}
	
	/**
	 * 判断手牌类型的方法
	 */
	public void pokerType(List<Poker> pokerCatch){
		Collections.sort(pokerCatch);
		//暂时还没想好。。。
	}
	
	
	/**
	 * get和set
	 * @return
	 */
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Poker> getPokerCatch() {
		return pokerCatch;
	}
	public void setPokerCatch(List<Poker> pokerCatch) {
		this.pokerCatch = pokerCatch;
	}
	
	
}
package com.pokergame;


import java.util.*;

public class PokerGame {
	private List<Poker> pokers;
	private List<Player> players;
	Scanner input=new Scanner(System.in);
	public PokerGame(){//创建牌组
		pokers=new ArrayList<Poker>();
		int[] p={102,103,104,105,106,107,108,109,110,111,112,113,114,
				202,203,204,205,206,207,208,209,210,211,212,213,214,
				302,303,304,305,306,307,308,309,310,311,312,313,314,
				402,403,404,405,406,407,408,409,410,411,412,413,414};
		for(int i=0;i<52;i++){
			Poker poke=new Poker(p[i]);
			pokers.add(poke);
		}
		System.out.println("-------------------牌组创建完毕-------------------");
	}
	/**
	 * 开始游戏
	 */
	public void run(){
		flag:while(true){
			createPlayer();//创建玩家
			System.out.println("-------------------洗牌中-------------------");
			Collections.shuffle(pokers);//洗牌
			distribute();//发牌
			consequence();//比大小
			System.out.println("你想继续体验这个精致的游戏吗?");
			System.out.println("是: 1\t否: 2");
			while(true){
				try{
					int num=input.nextInt();
					if(num==2){
						break flag;
					}else if(num==1){
						break;
					}else{
						System.out.println("您输入的命令有误,请重新输入!");
						input.next();
					}
				}catch(Exception e){
					System.out.println("您输入的命令有误,请重新输入!");
					input.next();
				}
			}
		}
		System.out.println("游戏愉快,再见。");
	}
	
	/**
	 * 创建玩家
	 */
	public void createPlayer(){
		players=new ArrayList<Player>();
		for(int i=0;i<2;i++){
			int id;
			String name;
			System.out.println("请输入玩家的ID:");
			while(true){
				try{
					id=input.nextInt();
					break;
				}catch(Exception e){
					System.out.println("您输入的ID有误,请重新输入:");
					input.next();
				}
			}
			System.out.println("请输入玩家的用户名:");
			while(true){
				try{
					name=input.next();
					break;
				}catch(Exception e){
					System.out.println("您输入的用户名有误,请重新输入:");
					input.next();
				}
			}
			players.add(new Player(id,name));
		}
		System.out.println("-------------------玩家创建完毕!-------------------");
		System.out.println("欢迎玩家"+players.get(0).getId()+": "+players.get(0).getName());
		System.out.println("欢迎玩家"+players.get(1).getId()+": "+players.get(1).getName());
	}
	
	/**
	 * 发牌
	 */
	public void distribute(){
		System.out.println("-------------------发牌,请等待-------------------");
		for(int i=0;i<6;i++){	
			players.get(0).pokerCatch.add(pokers.get(i));
			i++;
			players.get(1).pokerCatch.add(pokers.get(i));
		}
	}
	
	/**
	 * 比大小结束游戏
	 */
	public void consequence(){
		System.out.println("-------------------游戏结束-------------------");
		Collections.sort(players.get(0).pokerCatch);
		Collections.sort(players.get(1).pokerCatch);
		System.out.println("------------"+players.get(0).getId()+"号玩家的牌从小到大依次是:"+"------------");
		for(Poker poke:players.get(0).pokerCatch){
			System.out.println(poke.getColor()+poke.getNumber());
		}
		System.out.println("------------"+players.get(1).getId()+"号玩家的牌从小到大依次是:"+"------------");
		for(Poker poke:players.get(1).pokerCatch){
			System.out.println(poke.getColor()+poke.getNumber());
		}
		for(int i=2;i>=0;i--){
			if(players.get(0).pokerCatch.get(i).compareTo(players.get(1).pokerCatch.get(i))>0){
				System.out.println("获得胜利的是:"+players.get(0).getName());
				break;
			}else if(players.get(0).pokerCatch.get(i).compareTo(players.get(1).pokerCatch.get(i))<0){
				System.out.println("获得胜利的是:"+players.get(1).getName());
				break;
			}else{
				if(i>0){
					continue;
				}else{
					System.out.println("两家一样大,请重新比过。");
				}
			}
		}
	}
	
	public static void main(String[] args) {
		System.out.println("*********欢迎来到不完整版炸金花!*********");
		PokerGame pokerGame=new PokerGame();
		pokerGame.run();

	}

}


提问者:踽踽行 2015-05-17 17:03

个回答

  • hmily8003
    2015-06-27 16:08:48

    不可能用两家一样大的吧,

  • 小羊爱主
    2015-05-27 11:09:09

    写的很好了,学习了!btw,不会玩炸金花,所以帮不到你了。