通过java控制台实现简单的斗地主系统

目录

演示效果:

代码:

person类:

Poker类(扑克):

Game类:


演示效果:

所需api:

常用API

  • public boolean add(E e): 把给定的对象添加到当前集合中 。

  • public E get(int index): 返回此列表中指定位置上的元素。

  • public void clear() : 清空集合中所有的元素。

  • public boolean remove(E e): 把给定的对象在当前集合中删除。

  • public boolean contains(E e): 判断当前集合中是否包含给定的对象。

  • public boolean isEmpty(): 判断当前集合是否为空。

  • public int size(): 返回集合中元素的个数。

  • public Object[] toArray(): 把集合中的元素,存储到数组中。

Stream对象 : 

  

流的运用:
方法名方法作用返回值类型方法种类
count统计个数long终结
foreach遍历void终结
filter过滤Stream非终结
limit限定前几个Stream非终结
skip跳过前几个Stream非终结
map映射Stream非终结
sorted排序Stream非终结
distinct去重Stream非终结

使用规则

  • Stream只能操作一次

  • Stream方法返回的是新的流

  • Stream不调用终结方法,中间的操作不会执行

我的代码就使用了流来接收集合,来实现发牌功能,整个项目所使用的api虽然都不复杂,但是能够独立写出来还是具有一定的挑战性的。想要锻炼自己,那就跟着我写

本文适合聪明的java初学者才可以看得懂!

 但是其中的出牌逻辑判断没有写,因为工作量太大了。怎么打牌就全靠大家自觉了,要是345678没有7我也没办法。。

直接放代码

代码:

person类:

public class Person {
    private String name;

    public static ArrayList<String> drawCard(String name, ArrayList<String> arrayList) {
        ArrayList<String> selfCard = new ArrayList<>();
        //定义随机数
//        Random random = new Random();
        //判断随机数的索引
//        int x = 54;
//        if (name.equals("地主")){
//            x=54;
//        }
//        else if (name.equals("农民1")){
//            x=34;
//        }
//        else {
//            x=16;
//        }
//        random.nextInt(x);
        if (name.equals("地主")) {
//            Poker.washCard().get(20);
            //获取二十张牌并删除原有集合的牌数
//          selfCard=  selfCard.stream().limit(20).collect(Collectors.toCollection(ArrayList::new));
            for (int i = 0; i < 20; i++) {
//                selfCard.add(Poker.washCard().get(i));
                selfCard.add(arrayList.get(i));
                arrayList.remove(i);
            }

        }
        else if (name.equals("农民1")){
            for (int i = 0; i < 17; i++) {
//                selfCard.add(Poker.washCard().get(i));
                selfCard.add(arrayList.get(i));
                arrayList.remove(i);
            }

//                     return selfCard1;
        }
        else if (name.equals("农民2")){
                selfCard= arrayList.stream().collect(Collectors.toCollection(ArrayList::new));
                arrayList.clear();
//        return selfCard2;
        }
        return selfCard;
    }


}

Poker类(扑克):

public class Poker {
//    private static ArrayList<String> arrayList = washCard();
    public static ArrayList<String> washCard() {
        ArrayList<String> arrayList = new ArrayList<>();
        Collections.addAll(arrayList, "3♠", "3♥", "3♣", "3♦", "4♠", "4♥", "4♣", "4♦", "5♠", "5♥", "5♣", "5♦", "6♠", "6♥", "6♣", "6♦", "7♠", "7♥", "7♣", "7♦", "8♠", "8♥", "8♣", "8♦", "9♠", "9♥", "9♣", "9♦", "10♠", "10♥", "10♣", "10♦", "J♠", "J♥", "J♣", "J♦", "Q♠", "Q♥", "Q♣", "Q♦", "K♠", "K♥", "K♣", "K♦", "A♠", "A♥", "A♣", "A♦", "2♠", "2♥", "2♣", "2♦", "小王", "大王");
        //进行洗牌
        Collections.shuffle(arrayList);
//        System.out.println(arrayList);

        return arrayList;

    }

//    public ArrayList<String> getArrayList() {
//        return arrayList;
//    }
//
//    public void setArrayList(ArrayList<String> arrayList) {
//        this.arrayList = washCard();
//    }
    //    public static void main(String[] args) {
//        allCard();
//    }
}

Game类:

public class Game {
    //出牌方法
    public static int playCards(ArrayList<String> a,String name){

        Scanner scanner = new Scanner(System.in);
        System.out.println("请"+name+"出牌");
        System.out.println(name+"手上的牌"+a);
        String next = scanner.next();
        if (next.equals("skip")){
            System.out.println(name+"要不起");
            return next.length();
        }
        for (int x=0;x<next.length();x++){
            for (int y=0;y<a.size();y++){
                if (a.get(y).charAt(0)==next.charAt(x)){
                    a.remove(y);
                }
            }
        }
        System.out.println(name+"剩余的牌"+a);
        if (a.size()<=0) {
            System.out.println(name+"赢了");
        }
        return next.length();
    }
    //匹配方法
//    public  static  boolean  piPei(int n,String name){
//        Scanner scanner = new Scanner(System.in);
//        System.out.println("请"+name+"出牌");
//        String next = scanner.next();
//        if (n==next.length()){
//            return true;
//        }
//        else {
//            System.out.println("出老千剁手");
//            return false;
//        }
//    }
    public static void main(String[] args) {
        //定义一个数组
        String[] names=new String[]{"地主","农民1","农民2"};
//定义一个数组装所有牌
        ArrayList<String> allArray = new ArrayList<>();
        //地主牌的集合
        ArrayList<String> arr=new ArrayList<>();
        //农民牌的集合
        ArrayList<String> arr1=new ArrayList<>();
        ArrayList<String> arr2=new ArrayList<>();
        //定义一个数组装集合名
        String [] collectionName=new String[]{"arr","arr1","arr2"};
        Scanner scanner = new Scanner(System.in);

            System.out.println("进行洗牌");
            allArray=  Poker.washCard();
            System.out.println(allArray);
            System.out.println("洗牌结束,进行发牌");
            System.out.print("我是地主我的牌是:");
            //地主牌的集合
            arr= Person.drawCard("地主", allArray);
            System.out.println(arr);
            System.out.print("我是农民1我的牌是:");
            //农民1的牌的集合·
           arr1= Person.drawCard("农民1",allArray);
            System.out.println(arr1);
            System.out.print("我是农民2我的牌是:");
         arr2=  Person.drawCard("农民2",allArray);
            System.out.println(arr2);
            //出牌方法
            while (true) {

    playCards(arr, names[0]);
                playCards(arr1, names[1]);
                playCards(arr2, names[2]);
if (arr.size()<=0||arr1.size()<=0||arr2.size()<=0){
    break;
}


//                    if (piPei(x, names[1])) {
//playCards(arr,names[2]);
//                    }
            }
            //匹配方法
//            System.out.println("请农民1出牌");
//            String nong1=scanner.next();
//            int nongMin1Out=n.length();
//            //删除农民1手中的牌
//            for (int x=0;x<diZhuOut;x++){
//                for (int y=0;y<arr.size();y++){
//                    if (arr1.get(y).charAt(0)==n.charAt(x)){
//                        arr1.remove(y);
//                    }
//                }
//            }
//            System.out.println("农民1手中的牌为:"+arr1);
//            System.out.println("请农民2出牌");
//            String nong2=scanner.next();
//            int nongMin2Out=n.length();
//            //删除农民1手中的牌
//            for (int x=0;x<diZhuOut;x++){
//                for (int y=0;y<arr.size();y++){
//                    if (arr2.get(y).charAt(0)==n.charAt(x)){
//                        arr2.remove(y);
//                    }
//                }
//            }
//            System.out.println("农民2手中的牌为:"+arr2);
//            if(nongMin1Out!=n.length()){
//                System.out.println("出老千请重新出");
//            }

        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值