黑马程序员技术交流社区

标题: 新手遍的模拟洗牌发牌比较牌大小的小游戏,求指导 [打印本页]

作者: 坚持努力wbj    时间: 2016-8-26 21:18
标题: 新手遍的模拟洗牌发牌比较牌大小的小游戏,求指导
[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());       
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2