A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

[Java] 纯文本查看 复制代码
package first;
/**
 * 扑克牌类
 * 有以下属性
 * 颜色 大小由大到小顺序:黑桃 红心 梅花 方块; 
 * 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
 * @author Administrator
 * 大小编号 编号数字越小则越大
 */
public class Pai implements Comparable<Pai> {
/**
 * 颜色 大小由大到小顺序:黑桃 红心 梅花 方块
 */
private String colur;
/**
 * 数字 大小由大到小顺序:2 A K Q J 10 9 8 7 6 5 4 3
 */
private String num;
/**
 * 大小编号 编号数字越小则越大
 */
private int  ID;
public String getColur() {
	return colur;
}
public void setColur(String colur) {
	this.colur = colur;
}
public String getNum() {
	return num;
}
public void setNum(String num) {
	this.num = num;
}
public int getID() {
	return ID;
}
public void setID(int iD) {
	ID = iD;
}
@Override
public int compareTo(Pai o) {
	// TODO Auto-generated method stub
	if(this.getID()>o.getID()){
		return -(o.getID()-this.getID());
	}else if(this.getID()==o.getID()){
		return 0;
	}else {
		return -(o.getID()-this.getID());
	}
}


}


package first;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
/**
 * 创建牌,洗牌类
 * @author Administrator
 *
 */
public class BuildingAndChangePai {
	public BuildingAndChangePai(){
		this.newPai=new ArrayList<Pai>();
		this.oldPai=new HashSet<Pai>();
		this.randomPai=new ArrayList<Pai>();
	}
	public static void main(String[] args) {
		BuildingAndChangePai it=new BuildingAndChangePai();
		it.builder();
		it.showNewPai();
		it.SetChangers();;
		it.showSetPai();
		it.randomPai();
		it.showRandom();
		//以下时间与电脑配置有关
		//以下循环需约1分20秒
		//for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.randomPai();}
		//以下循环需约30秒
		//for(int i=0;i<10000000;i++){it=new BuildingAndChangePai();it.builder();it.newRandom();}
		//it.showNewPai();
		//it.showRandom();
	}
	/**
	 * 一盒新牌
	 */
	private List<Pai> newPai;
	/**
	 * 一盒random洗的牌
	 */
	private List<Pai> randomPai;
	/**
	 * 一盒洗好的牌
	 */
	private Set<Pai> oldPai;
	/**
	 * 创建一副牌的方法
	 */
	public void builder(){
		//先创建两个List,按照顺序加入颜色和数字
		List<String>colurs=new ArrayList<String>();
		colurs.add("黑桃");
		colurs.add("红心");
		colurs.add("梅花");
		colurs.add("方片");
		List<String>nums=new ArrayList<String>();
		nums.add("2");
		nums.add("A");
		nums.add("K");
		nums.add("Q");
		nums.add("J");
		nums.add("10");
		nums.add("9");
		nums.add("8");
		nums.add("7");
		nums.add("6");
		nums.add("5");
		nums.add("4");
		nums.add("3");
		//创建int变量id;用于接下来统计大小顺序
		int id=1;
		//嵌套循环创建牌,外循环控制数字,内循环控制花色
		
		for(int i=0;i<nums.size();i++){
			for(int j=0;j<colurs.size();j++){
				Pai pai=new Pai();
				pai.setColur(colurs.get(j));
				pai.setNum(nums.get(i));
				pai.setID(id);
				newPai.add(pai);
				id++;
			}
		}
	}
	/**
	 * 新牌展示
	 */
	public void showNewPai(){
		System.out.println("现有新牌如下:");
		for(int i=0;i<(newPai.size());i++){
		System.out.print(newPai.get(i).getID()+":"+newPai.get(i).getColur()+newPai.get(i).getNum()+"   ");
		if((i+1)%4==0)System.out.println();
		}
	}
	/**
	 * 创建list-set的方法
	 */
	public void SetChangers(){
		for(Pai pai:newPai){
			oldPai.add(pai);
			}
	}
	/**
	 * 洗好的牌展示
	 */
	public void showSetPai(){
		System.out.println("现有list-set交换牌如下:");
		int i=0;
		for(Pai newPai:oldPai){
			System.out.print(newPai.getID()+":"+newPai.getColur()+newPai.getNum()+"   ");
			i++;
			if(i%4==0){System.out.println();}
		}
		
	}
	/**
	 * random方法
	 */
	public void randomPai(){
		Random random=new Random();
		for(int i=0;i<52;i++){
		int j;
		Pai pai;
		do{
			j=random.nextInt(52);
			pai=newPai.get(j);
		}while(randomPai.contains(pai));
		randomPai.add(pai);
		}
	}
	/**
	 * 新的random方法
	 * @return 
	 */
	public List<Pai> newRandom(){
		Random random=new Random();
		for(int i=0;i<52;i++){
			int j;
			Pai pai;
			j=random.nextInt(newPai.size());
			pai=newPai.get(j);
			randomPai.add(pai);
			newPai.remove(j);
		}
		return randomPai;
	}
	
	/**
	 * 展示randomPai
	 */
	public void showRandom(){
		System.out.println("现有random牌如下:");
		for(int i=0;i<(randomPai.size());i++){
		System.out.print(randomPai.get(i).getID()+":"+randomPai.get(i).getColur()+randomPai.get(i).getNum()+"   ");
		if((i+1)%4==0)System.out.println();
		}
	}
}




package first;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * 玩家类
 * @author Administrator
 *
 */
public class Player {
	/**
	 * 构造器
	 */
	public Player(){
		this.myPai=new ArrayList<Pai>();
	}
	private String id;
	private String name;
	private List<Pai>myPai;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Pai> getMyPai() {
		return myPai;
	}
	public void setMyPai(Pai pai) {
		this.myPai.add(pai);
		Collections.sort(this.myPai);
	}
	
}










package first;

import java.util.List;
import java.util.Random;
import java.util.Scanner;

import javax.print.DocFlavor.INPUT_STREAM;

/**
 * 游戏类
 * @author Administrator
 *
 */
public class Game {
	/**
	 * Game构造器
	 * 初始化一副牌
	 * 初始化两名玩家
	 */
	public Game(){
		player1=new Player();
		player2=new Player();
		BuildingAndChangePai bacp=new BuildingAndChangePai();
		bacp.builder();
		this.randomPai=bacp.newRandom();
		System.out.print("输入玩家1的ID:");
		String string=input.nextLine();
		player1.setId(string);
		System.out.print("输入玩家1的姓名:");
		player1.setName(input.nextLine());
		System.out.print("输入玩家2的ID:");
		player2.setId(input.nextLine());
		System.out.print("输入玩家2的姓名:");
		player2.setName(input.nextLine());
	}
	static Scanner input=new Scanner(System.in);
	List<Pai>randomPai;
	Player player1;
	Player player2;
	/**
	 * main方法
	 */
	public static void main(String[] args) {
		int check=2;
		do {
			Game game=new Game();
			int i;
			System.out.print("输入手牌数目:");
			i=input.nextInt();
			game.dilver(i);
			game.compare();
			System.out.print("是否继续(1.是 2.否):");
			check=input.nextInt();
		} while (check==1);
	}
	/**
	 * 发牌方法
	 * 传入每人将要有的手牌数目i
	 */
	public void dilver(int i){
		Random random=new Random();
		int k;
		for(int j=0;j<i;j++){
			k=random.nextInt(randomPai.size());
			player1.setMyPai(randomPai.get(k));
			randomPai.remove(k);
			k=random.nextInt(randomPai.size());
			player2.setMyPai(randomPai.get(k));
			randomPai.remove(k);	
		}
		System.out.println("发牌完毕,两位玩家手牌如下:");
		System.out.print("玩家1:");
		for(Pai newPai:player1.getMyPai()){
			System.out.print(newPai.getID()+":"+newPai.getColur()+newPai.getNum()+"   ");
		}
		System.out.println();
		System.out.print("玩家2:");
		for(Pai newPai:player2.getMyPai()){
			System.out.print(newPai.getID()+":"+newPai.getColur()+newPai.getNum()+"   ");
		}
		System.out.println();
	}
	public void compare(){
		if(player1.getMyPai().get(0).getID()<player2.getMyPai().get(0).getID()){
			System.out.println("玩家1"+player1.getName()+"赢");
		}else System.out.println("玩家2"+player2.getName()+"赢");
		System.out.println(player1.getName()+"最大牌为"+player1.getMyPai().get(0).getColur()+player1.getMyPai().get(0).getNum());
		System.out.println(player2.getName()+"最大牌为"+player2.getMyPai().get(0).getColur()+player2.getMyPai().get(0).getNum());	
	}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马