java基础小项目:简易版斗地主(详解代码)

适用人群:java基础刚入门的人群

项目需求:

1.搞一副新的扑克牌 

2.对新的扑克牌进行洗牌过程

3.有三个人创建三个Player对象(Player类当中String nickname;ArrayList<String>pockers);

三个玩家模拟真实场景情况进行抓牌(记住保留三颗底牌)

4.叫牌(在控制台输入想要叫牌玩家昵称) 对应昵称玩家获得剩余三颗底牌

5.要对三个玩家手中最终的扑克牌进行一个码牌(从小到大进行排序3,45678910J,Q..A,2小王大王)

6.最终打印出三个玩家排好序后的扑克牌

代码详解:

PokerGame类:

搞一副新的扑克牌 :

package com.yunma.pokergame;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class PokerGame {

    //搞一副新的扑克牌 该方法一定有返回值
    public ArrayList<String> getNewPoker(){
        String[] huase={"红桃","梅花","方片","黑桃"};
        String[] MianZhi={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        ArrayList<String> list = new ArrayList<>();

        for(int i=0;i<MianZhi.length;i++){
            for(int j=0;j< huase.length;j++){
                list.add(huase[j]+MianZhi[i]);
            }
        }
        list.add("小王");
        list.add("大王");

        return list;
    }

 洗牌:

 //洗牌操作:返回值是洗后的扑克牌;在洗牌的时候 要给我一副新的扑克牌
    public ArrayList<String> washPoker(ArrayList<String> newpoker){
        ArrayList<String> washedPoker=new ArrayList();//用于装洗完后的扑克牌
        Random random=new Random();

        while(newpoker.size()>0){
            //洗好的牌 添加 remove删除的元素
            //remove删除的元素就是random随机产生的(括号内是0~元素数)
            washedPoker.add(newpoker.remove(random.nextInt(newpoker.size())));
        }

        return washedPoker;
    }

抓牌+叫牌:

//抓牌操作:先给我三个玩家以及一副洗好的牌
    public ArrayList<String> grabPoker(player p1,player p2,player p3,ArrayList<String>washedCard){
        while(washedCard.size()>3){//剩余三张底牌
            p1.getPokers().add(washedCard.remove(0));
            p2.getPokers().add(washedCard.remove(0));
            p3.getPokers().add(washedCard.remove(0));
        }

        //叫牌操作:
        Scanner scanner=new Scanner(System.in);//读取输入内容
        System.out.println("开始叫牌,请输入叫牌玩家昵称:");
        String callplayer=scanner.next();

        if(p1.getNickname().equals(callplayer)){ //字符串比较用equals
            p1.getPokers().addAll(washedCard);
        }
        else if(p2.getNickname().equals(callplayer))
        {
            p2.getPokers().addAll(washedCard);
        }
        else if(p3.getNickname().equals(callplayer))
        {
            p3.getPokers().addAll(washedCard);
        }
        else{
            System.out.println("请输入正确的玩家昵称");
        }

        //完成叫牌后,对每个玩家手里的牌进行排序(码牌)
        orderPoker(p1.getPokers());
        orderPoker(p2.getPokers());
        orderPoker(p3.getPokers());

        //打印玩家手中的牌
        System.out.println(p1.getNickname());
        printPoker(p1.getPokers());
        System.out.println();
        System.out.println(p2.getNickname());
        printPoker(p2.getPokers());
        System.out.println();
        System.out.println(p3.getNickname());
        printPoker(p3.getPokers());
        System.out.println();

        System.out.println("剩余三张底牌");
        printPoker(washedCard);

        return washedCard;
    }

码牌:

//码牌操作:先排好牌面值;遍历手中所有牌,与取出的每个牌面值看是否相符
    public  void orderPoker(ArrayList<String> pokers){
        String[] orderMianzhi={"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};

        ArrayList<String> orderedlist=new ArrayList<>();
        for(int i=0;i<orderMianzhi.length;i++){ //遍历牌面值
            for(String card:pokers) //遍历玩家手中的牌
            {
                if(card.indexOf(orderMianzhi[i])>-1){
                    orderedlist.add(card);
                }
            }
        }

        pokers.clear();//清空列表
        pokers.addAll(orderedlist);//把排好的加进去
    }

观察:

//专门打印扑克牌内容,方便观察
    public void printPoker(ArrayList<String> list){
        for(String poker:list){
            System.out.print(poker+"  ");
        }
    }

PokerGame类完整代码:
 

package com.yunma.pokergame;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import org.w3c.dom.ls.LSOutput;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class PokerGame {

    //搞一副新的扑克牌 该方法一定有返回值
    public ArrayList<String> getNewPoker(){
        String[] huase={"红桃","梅花","方片","黑桃"};
        String[] MianZhi={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        ArrayList<String> list = new ArrayList<>();

        for(int i=0;i<MianZhi.length;i++){
            for(int j=0;j< huase.length;j++){
                list.add(huase[j]+MianZhi[i]);
            }
        }
        list.add("小王");
        list.add("大王");

        return list;
    }

    //洗牌操作:返回值是洗后的扑克牌;在洗牌的时候 要给我一副新的扑克牌
    public ArrayList<String> washPoker(ArrayList<String> newpoker){
        ArrayList<String> washedPoker=new ArrayList();//用于装洗完后的扑克牌
        Random random=new Random();

        while(newpoker.size()>0){
            //洗好的牌 添加 remove删除的元素
            //remove删除的元素就是random随机产生的(括号内是0~元素数)
            washedPoker.add(newpoker.remove(random.nextInt(newpoker.size())));
        }

        return washedPoker;
    }

    //抓牌操作:先给我三个玩家以及一副洗好的牌
    public ArrayList<String> grabPoker(player p1,player p2,player p3,ArrayList<String>washedCard){
        while(washedCard.size()>3){//剩余三张底牌
            p1.getPokers().add(washedCard.remove(0));
            p2.getPokers().add(washedCard.remove(0));
            p3.getPokers().add(washedCard.remove(0));
        }

        //叫牌操作:
        Scanner scanner=new Scanner(System.in);//读取输入内容
        System.out.println("开始叫牌,请输入叫牌玩家昵称:");
        String callplayer=scanner.next();

        if(p1.getNickname().equals(callplayer)){ //字符串比较用equals
            p1.getPokers().addAll(washedCard);
        }
        else if(p2.getNickname().equals(callplayer))
        {
            p2.getPokers().addAll(washedCard);
        }
        else if(p3.getNickname().equals(callplayer))
        {
            p3.getPokers().addAll(washedCard);
        }
        else{
            System.out.println("请输入正确的玩家昵称");
        }

        //完成叫牌后,对每个玩家手里的牌进行排序(码牌)
        orderPoker(p1.getPokers());
        orderPoker(p2.getPokers());
        orderPoker(p3.getPokers());

        //打印玩家手中的牌
        System.out.println(p1.getNickname());
        printPoker(p1.getPokers());
        System.out.println();
        System.out.println(p2.getNickname());
        printPoker(p2.getPokers());
        System.out.println();
        System.out.println(p3.getNickname());
        printPoker(p3.getPokers());
        System.out.println();

        System.out.println("剩余三张底牌");
        printPoker(washedCard);

        return washedCard;
    }

    //码牌操作:先排好牌面值;遍历手中所有牌,与取出的每个牌面值看是否相符
    public  void orderPoker(ArrayList<String> pokers){
        String[] orderMianzhi={"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};

        ArrayList<String> orderedlist=new ArrayList<>();
        for(int i=0;i<orderMianzhi.length;i++){ //遍历牌面值
            for(String card:pokers) //遍历玩家手中的牌
            {
                if(card.indexOf(orderMianzhi[i])>-1){
                    orderedlist.add(card);
                }
            }
        }

        pokers.clear();//清空列表
        pokers.addAll(orderedlist);//把排好的加进去
    }

    //专门打印扑克牌内容,方便观察
    public void printPoker(ArrayList<String> list){
        for(String poker:list){
            System.out.print(poker+"  ");
        }
    }
}

player类:

package com.yunma.pokergame;

import java.util.ArrayList;

public class player {
    private String nickname;//玩家昵称
    private ArrayList<String> pokers;

    //封装
    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public ArrayList<String> getPokers() {
        return pokers;
    }

    public void setPokers(ArrayList<String> pokers) {
        this.pokers = pokers;
    }
}

Test类:

package com.yunma.pokergame;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {

        PokerGame p =new PokerGame();

        //调用 洗牌
        //p.printPoker(p.washPoker(p.getNewPoker()));

        //调用 创建三个玩家
        player player1=new player();
        player player2=new player();
        player player3=new player();


        player1.setNickname("小红");
        player1.setPokers(new ArrayList<String>());
        player2.setNickname("小兰");
        player2.setPokers(new ArrayList<String>());
        player3.setNickname("小花");
        player3.setPokers(new ArrayList<String>());

        //调用 抓牌(含叫牌、码牌)
        p.grabPoker(player1,player2,player3,p.washPoker(p.getNewPoker()));
    }
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的斗地主小游戏的Java代码实现,其中使用了Java集合类和随机数生成器: ``` import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class DouDiZhuGame { public static void main(String[] args) { // 初始化一副扑克牌 List<String> poker = new ArrayList<>(); String[] colors = {"♠", "♥", "♣", "♦"}; String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"}; for (String color : colors) { for (String number : numbers) { poker.add(color + number); } } poker.add("大王"); poker.add("小王"); // 洗牌 Collections.shuffle(poker); // 发牌 List<String> player1 = new ArrayList<>(); List<String> player2 = new ArrayList<>(); List<String> player3 = new ArrayList<>(); List<String> bottomCards = new ArrayList<>(); for (int i = 0; i < poker.size(); i++) { String card = poker.get(i); if (i >= poker.size() - 3) { bottomCards.add(card); } else if (i % 3 == 0) { player1.add(card); } else if (i % 3 == 1) { player2.add(card); } else if (i % 3 == 2) { player3.add(card); } } // 查看初始牌面 System.out.println("玩家1的牌:" + player1); System.out.println("玩家2的牌:" + player2); System.out.println("玩家3的牌:" + player3); System.out.println("底牌:" + bottomCards); // 叫分 Scanner scanner = new Scanner(System.in); int score = 0; int highestScore = 0; int highestScorePlayer = 0; for (int i = 1; i <= 3; i++) { System.out.print("玩家" + i + "是否叫分(0-不叫,1-1分,2-2分,3-3分):"); int callScore = scanner.nextInt(); if (callScore > highestScore) { highestScore = callScore; highestScorePlayer = i; } if (callScore > 0) { score = callScore; } } System.out.println("最高分:" + highestScore + ",玩家" + highestScorePlayer + "叫的分最高"); // 出牌 List<String> playerCards = new ArrayList<>(); if (highestScore > 0) { if (highestScorePlayer == 1) { playerCards.addAll(player1); } else if (highestScorePlayer == 2) { playerCards.addAll(player2); } else if (highestScorePlayer == 3) { playerCards.addAll(player3); } Collections.sort(playerCards); System.out.println("玩家" + highestScorePlayer + "先出牌"); System.out.println("玩家" + highestScorePlayer + "的牌:" + playerCards); System.out.print("请玩家" + highestScorePlayer + "出牌:"); String playedCard = scanner.next(); playerCards.remove(playedCard); while (!playerCards.isEmpty()) { System.out.print("请玩家" + (highestScorePlayer % 3 + 1) + "出牌:"); String nextPlayerCard = scanner.next(); if (playerCards.contains(nextPlayerCard)) { playerCards.remove(nextPlayerCard); highestScorePlayer = highestScorePlayer % 3 + 1; } else { System.out.println("出牌不符合规则,请重新出牌"); } if (playerCards.isEmpty()) { System.out.println("玩家" + highestScorePlayer + "赢了"); } } } else { System.out.println("无人叫分,结束游戏"); } } } ``` 这个小游戏实现了洗牌、发牌、叫分、出牌的基本功能,玩家可以通过命令行输入来进行操作。需要注意的是,这只是一个简单的示例,实际的斗地主游戏还需要考虑更多的细节和规则。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值