Java实战项目之斗地主和斗牛游戏的实现

目录
  • 一、前言
  • 1.斗地主:
    • 1.1运行结果:
  • 2.斗地主升级版
    • 2.1原理:
    • 2.2运行结果:
  • 3.斗牛游戏:
    • 3.1运行结果:

一、前言

练一个斗地主小游戏,只能发看牌

1.斗地主:


import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class PokerPlay2 {
    public static void main(String[] args) {
        ArrayList<String> array=new ArrayList<String>();
        String []colors={"♣","♥","♠","♦"};
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        for (String color:colors){
            for (String number:numbers){
                array.add(color+number);
            }
        }int count=1;
        array.add("大🃏");
        array.add("小🃏");
        while(true){
            System.out.println("第"+count+++"局");
        Collections.shuffle(array);
        ArrayList<String> poker1=new ArrayList<String>();
        ArrayList<String> poker2=new ArrayList<String>();
        ArrayList<String> poker3=new ArrayList<String>();
        ArrayList<String> poker4=new ArrayList<String>();
        for (int i=0;i<array.size();i++){
            String poker=array.get(i);
            if (i>=array.size()-3){
                poker4.add(poker);
            }else if(i%3==0){
                poker1.add(poker);
            }else if(i%3==1){
                poker2.add(poker);
            }else if(i%3==2){
                poker3.add(poker);
            }
        }
            Scanner sc=new Scanner(System.in);
        String name1=sc.nextLine();
        lookPoker("1", poker1);
        lookPoker("2", poker2);
        lookPoker("3", poker3);
        lookPoker("底牌", poker4);

    }}
    public static void lookPoker(String name,ArrayList<String> arrayList){
        System.out.print(name+"的牌:");
        for (String s:arrayList){
            System.out.print(" "+s);
        }
        System.out.println();

    }
}

1.1运行结果:

2.斗地主升级版

增加了对牌的排序和地主牌的加入,后续可能会增加玩牌的功能

2.1原理:

斗地主升级版的原理就是,创建HashMap用来后续键找值,然后创建ArrayList

集合(创建其他集合也是可以的)ArrayList集合的作用是用来存储和HashMap

对应的键值,通过两个for进行组合每产生一个就将键值加一,产生不同的键值,

所对应的牌是唯一, 这样为后续排列打下了坚实的前提,然后再创建TreeSet集

合(TreeSet集合可以进行自然排序),然后将ArrayList集合中的元素(其实就是

一些数子,这些数字是HashMap中的键值),分配到三个人上,里面的已经被

TreeSet排序完成,调用方法是通过HashMap将每个人的键值来得到对应的牌。

import java.util.*;
public class PokerPuls {
    public static void main(String[] args) {
        //定义HashMap集合
        HashMap<Integer,String> hm=new HashMap<Integer, String>();
        //定义ArrayList集合用来存储编号
        ArrayList<Integer> array=new ArrayList<Integer>();
        //定义花色和底数数组
        String []colors={"♣","♥","♠","♦"};
        String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A","2"};
        int index=0;
        //注意需要将数字for在外头,否则是按花色排序的
        for (String number:numbers){
            for (String color:colors){
                hm.put(index, color+number);
                array.add(index);
                index++;
            }
        }
        hm.put(index, "小🃏");
        array.add(index);
        index++;
        hm.put(index, "大🃏");
        array.add(index);
        int count=1;
       while(true){
           System.out.println("**********第"+count+++"局斗地主**********");
        //洗牌
        Collections.shuffle(array);
        //创建四个牌位分别用来存储三个玩家和三张底牌,因要排序所以用TreeSet集合
        TreeSet<Integer> play1=new TreeSet<Integer>();
        TreeSet<Integer> play2=new TreeSet<Integer>();
        TreeSet<Integer> play3=new TreeSet<Integer>();
        TreeSet<Integer> play4=new TreeSet<Integer>();
        for (int i=0;i<array.size();i++){
            Integer index1 = array.get(i);
            if(i>=array.size()-3){
                play4.add(index1);
            }else if (i%3==0){
                play1.add(index1);
            }else if (i%3==1){
                play2.add(index1);
            }else if (i%3==2){
                    play3.add(index1);
            }
        }
Scanner sc=new Scanner(System.in);
    System.out.print("第一位玩家:");
    String name1=sc.nextLine();
    System.out.print("第二位玩家:");
    String name2=sc.nextLine();
    System.out.print("第三位玩家:");
    String name3=sc.nextLine();
    lookerPoker("1号:"+name1, play1,hm);
    lookerPoker("2号:"+name2, play2,hm);
    lookerPoker("3号:"+name3, play3,hm );
        lookerPoker("底牌", play4,hm);
    int i=0; int num=0;
    while(true){
    System.out.print("几号是地主:");
  num=sc.nextInt();
   switch(num){
       case 1:{i++;
           play1.addAll(play4);break;
       }
       case 2:{i++;
           play2.addAll(play4);break;
       }
       case 3:{i++;
          play3.addAll(play4);break;
       }
       default:{
           System.out.println("输入有误,重新输入");break;
       }
   }
        lookerPoker("1号:"+name1, play1,hm);
        lookerPoker("2号:"+name2, play2,hm);
        lookerPoker("3号:"+name3, play3,hm );
        if (i!=0){
            break;
        }
        System.out.println("-------游戏结束-------");
    } } }
    //定义遍历方法,并通过存储的index1的键来获取对应的值
    public static void lookerPoker(String name,TreeSet<Integer>  ts,HashMap<Integer,String>  hm){
        System.out.print(name+"的牌:");
        for (Integer key:ts){
            String value=hm.get(key);
            System.out.print(value+" ");
        }
        System.out.println();
    }

2.2运行结果:

3.斗牛游戏:


import java.util.*;

public class PokerPlay {
    public static void main(String[] args) {
        //定义一个ArrayList集合用来存放排盒
        //分别用来给玩家和庄家的两副牌
        ArrayList<String> array = new ArrayList<String>();
        ArrayList<String> array1 = new ArrayList<String>();
        //定义花色、点数数组
        String[] color = {"♣", "♦", "♠", "♥"};
        String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
        //封装组合成牌放入集合中
        for (String s1 : color) {
            for (String s2 : numbers) {
                array.add(s1 + s2);
            }
        }

        //定义庄家的牌盒
        String[] color1 = {"♣", "♦", "♠", "♥"};
        String[] number1 = {"10", "J", "Q", "K",};
        for (String s1 : color1) {
            for (String s2 : number1) {
                array1.add(s1 + s2);
            }
        }
        int count = 1;//定义局数
        while (true) {
            int sum1 = 0, sum2 = 0, sum3 = 0;  int sum4 = 0, sum5 = 0;
            //打乱牌的顺序
            Collections.shuffle(array);
            Collections.shuffle(array1);
            //定义五个牌位
            ArrayList<String> poker1 = new ArrayList<String>();
            ArrayList<String> poker2 = new ArrayList<String>();
            ArrayList<String> poker3 = new ArrayList<String>();
            ArrayList<String> poker4 = new ArrayList<String>();
            ArrayList<String> poker5 = new ArrayList<String>();
           // 为了防止玩家崩溃,随机数给庄家无敌牌或普通牌
            Random r=new Random();
            int 换位=r.nextInt(100);
            //给庄家的无敌牌
            for (int i=0;i<array1.size();i++){
                String s1 = array1.get(i);
                if(sum5<5&&换位<50){
                    poker5.add(s1);
                    sum5++;
                }
            }
            for (int i = 0; i < array.size(); i++) {
                String poker = array.get(i);//得到每张牌
                if (sum1++ < 5) {
                    poker1.add(poker);
                } else if (sum2++ < 5) {
                    poker2.add(poker);
                } else if (sum3++ < 5) {
                    poker3.add(poker);
                } else if (sum4++< 5) {
                    poker4.add(poker);
                }//使庄家的牌正常,可以设置多少一个轮回
                 else if (sum5++<5) {
                    poker5.add(poker);
                }

            }
                    System.out.println("**************第" + (count++) + "局斗牛游戏开始:**************");
                    Scanner sc = new Scanner(System.in);
                    System.out.print("庄家:");
                    String play5 = sc.nextLine();
                    System.out.print("第一位玩家:");
                    String play1 = sc.nextLine();
                    System.out.print("第二位玩家:");
                    String play2 = sc.nextLine();
                    System.out.print("第三位玩家:");
                    String play3 = sc.nextLine();
                    System.out.print("第四位玩家:");
                    String play4 = sc.nextLine();
            System.out.println("-------买定离手--------");
                    lookPoker("庄家"+play5, poker5);
                    lookPoker("玩家"+play1, poker1);
                    lookPoker("玩家"+play2, poker2);
                    lookPoker("玩家"+play3, poker3);
                    lookPoker("玩家"+play4, poker4);
            System.out.println("-------游戏结束--------");
        }
    }
    //定义一个看牌的动作
    public static void lookPoker(String name, ArrayList<String > arrayList){
        //遍历牌
        System.out.print(name + "的牌:");
        for (String poker : arrayList) {
            System.out.print(" " + poker);
        }
        System.out.println();
    }}

其中 在用random,用if是控制庄家的牌

       Random r=new Random();
            int 换位=r.nextInt(100);
            //给庄家的无敌牌
            for (int i=0;i<array1.size();i++){
                String s1 = array1.get(i);
                if(sum5<5&&换位<50){
                    poker5.add(s1);
                    sum5++;
                }

3.1运行结果:

到此这篇关于Java实战项目之斗地主和斗牛游戏的实现的文章就介绍到这了,更多相关Java 斗地主内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java简单实现斗地主发牌功能

    本文实例为大家分享了java简单实现斗地主发牌的具体代码,供大家参考,具体内容如下 问题: 参考斗地主的游戏规则,完成一个发牌的功能(54张牌,考虑点数,花色:三名玩家,其中地主比其他玩家多3张牌) 要求实现以下功能: 1.洗牌 2.发牌(发牌按照常规方式A-B-C-A-B-C-A-,不允许一次性随机17张给某个玩家) 3.玩家手中牌的展示(要求按点数实现排序) 分析 运用面向对象的程序设计思维分为扑克.玩家和游戏三部分,扑克类属性有花色,点数,次序:玩家类属性有玩家id,昵称,是否地主,牌的集

  • Java高级应用之斗地主游戏

    斗地主综合案例,供大家参考,具体内容如下 运用HashMap.ArrayList.List类实现斗地主综合案例,模拟斗地主游戏的随机发牌,并按照牌的大小和花色进行排列. 斗地主玩家每轮都有三个玩家,运用Collections类中的shuffle()方法打乱一整幅扑克牌,利用取余原理将凑乱的牌发放给三个玩家,整副牌发完后的最后三张永一个ArrayList存储作为底牌.具体代码实现如下: import java.util.ArrayList; import java.util.Collections

  • java实现轻轻松松控制台斗地主的示例代码

    实现在控制台斗地主 今天给大家一起分享一下,最近回头学习java基础实现的一个控制台版的斗地主.先给大家简单看一下要求: 有地主,有2个农民,地主有额外3张牌. 游戏开始时,显示地主的牌,并从控制台接收要出的牌,地主出牌后. 农民1显示牌,并从控制台接收要出的牌,以此类推. 如果地主赢了,提示地主胜利.如果有一个农民胜利了,就提示农民胜利. 1.先理清逻辑 在开始敲代码之前,我们第一步一定不是急着动手.而是需要分析一下,我们做的这个项目,它一步一步的应该怎么来操作和完成.理清思路之后,其实剩下的

  • Java实现斗地主的发牌功能

    斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能. 首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下: 首先是Poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个Comparable接口,方便之后进行排序: public class Poker implements Comparable

  • Java集合案例之斗地主游戏

    本文实例为大家分享了Java集合案例之斗地主游戏的具体代码,供大家参考,具体内容如下 题目要求: 通过自制54张扑克牌,发给3人,留下3张底牌,分别显示不同人的手牌与底牌达到斗地主的游戏需求 算法思想: 1.4种花色,每种13张牌,使用for嵌套循环,产生52张牌再加入大小王 创建牌与花色: String[] hs = {"♠", "♥", "♣", "♦"}; String[] number = {"3"

  • java集合模拟实现斗地主洗牌和发牌

    本文实例为大家分享了java实现斗地主洗牌和发牌的具体代码,供大家参考,具体内容如下 1:用ArrayList集合实现 案例分析: 我们现在要做的是模拟斗地主小游戏来进行洗牌和发牌. 具体步骤: A:首先,创建一个ArrayList集合来存储牌,将牌的花色和点数存储在俩个字符串数组中中,然后用for循环加强遍历将每张牌的花色点数及大王小王存储在集合中. B:进行洗牌,调用collectionas的shuffle方法. C:进行发牌,创建四个ArrayList集合,分别用来存储玩家一,玩家二,玩家

  • Java实现斗地主小游戏

    本文实例为大家分享了Java实现斗地主小游戏的具体代码,供大家参考,具体内容如下 原理图: 斗地主过程: *  1.组合牌  *  2.洗牌  *  3.发牌  *  4.看牌 代码实现: package itcast.demo6; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(S

  • Java模拟实现斗地主发牌

    本文实例为大家分享了Java模拟实现斗地主发牌的具体代码,供大家参考,具体内容如下 题目: 模拟斗地主的发牌实现,54张牌,每张牌不同的花色(红心,黑桃,方块,梅花),牌的点数(3,4,5,6,7,8,9,10,J,Q,K,A,2,King,Queen),另有三名玩家,要求(使用面向对象的方式实现): 1.随机产生一名地主 2.随机向三名玩家发牌,最后的底牌自动发给地主 3.显示出每名玩家手中的牌 4.要求根据点数自动对玩家手中的牌排序实现(*) 提示:玩家类,牌类,游戏类(算法) 步骤分析:

  • Java实战项目之斗地主和斗牛游戏的实现

    目录 一.前言 1.斗地主: 1.1运行结果: 2.斗地主升级版 2.1原理: 2.2运行结果: 3.斗牛游戏: 3.1运行结果: 一.前言 练一个斗地主小游戏,只能发看牌 1.斗地主: import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class PokerPlay2 { public static void main(String[] args) { Array

  • Java实战之飞翔的小鸟小游戏

    前言 一个简单的单机小游戏:flypybird ,用来巩固java基础. 涉及主要知识点:JFrame . JPanel . 继承. 键盘/鼠标监听 . 多线程 . 工具类设计 提示:这是大致的实现过程,实际实现过程有一定的修改,具体以源码为准. 一.大体思路 1.首先要有一个框架,作为主程序入口,这里使用 JFrame  类. 2.然后需要有一个画布,用来把游戏场景画上去,然后在上面添加键盘/鼠标监听来控制,这里使用的是 JPenal 类. 3.需要创建几个类:小鸟.地面.障碍物柱子.一个获取

  • java实战项目之记账软件

    本文给大家分享记账软件的实现代码,一起看看吧! 1. 项目介绍 1.1. 项目安排 1.1.1. 项目目标 本项目为JAVAEE基础班综合项目,包含了若干个知识点,达到将基础班所学知识综合使用,提高了我们对项目的理解与知识点的运用. 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查通过本项目,让我们了解公司项目开发的流程,充分的掌握项目需求分析.设计与功能的代码实现.提高同学们独立分析需求与功能实现的能力. 1.1.2. 项目时间 本项

  • Java实战项目 健身管理系统

    主要技术:springmvc. springboot .mybatis.mysql .jQuery.layui.css.jsp shiro权限控制 主要功能截图如下: 用户登录.首页主要功能有:会员信息管理.会员到期续费管理.充值管理.教练课程管理.私教管理.器材管理.小商品售卖管理.信息统计.修改密码等主要功能: 会员管理.续卡.会员卡类型管理: 教练列表展示和添加修改删除教练信息: 会员私教课程管理: 添加私教信息: 健身课程列表展示查询和添加修改: 健身器材列表展示查询和添加修改: 物品遗

  • Java实战项目 图书管理系统

    目录 一.项目简述 二.项目运行 修改图书类型信息代码: 登录图书管理系统主页面代码: 一.项目简述 功能包括: 登录注册,办理借阅.借阅记录,预约借阅,借出未还, 借阅逾期,学生管理,图书管理,书库分类查询搜索. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: JSP +Spring + SpringMVC + MyBatis + html+ cs

  • Java实战项目 医院预约挂号系统

    目录 一.项目简述 二.项目运行 登录拦截器代码: 医院预约挂号系统后台管理页面代码: 一.项目简述 功能: 用户分为患者,医生,管理员,患者可进行注册选择医生 挂号,选择日期,选择号源,医生可进行接诊,管理员可 对用户,医生信息的维护等等功能. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: Jdbc+ Servlert + Jsp + css +

  • JAVA实战项目实现客户选购系统详细流程

    客户选购信息系统功能需求: 1)输入多个客户购买商品信息.包括客户名称,年龄,购买的商品,每种商品的单价和数量. 2)输出多个客户购买商品的信息.包括客户名字,年龄,购买商品,每种商品的单价和数量,总的消费金额. 方法:1)定义一个多个客户信息处理的类 CustomerGoodsAdmin .包括: 属性: Customer [ ]customers 方法: void show () //用户交互界面 void inputCustomerlnfo () / /客户采购信息输入 Void prin

  • Java 实战项目之疫情防控管理系统详解

    目录 ☣基于java疫情防控管理系统 1.登录模块(注册) 2.今日疫情模块 3.防疫管理模块 4.系统管理模块 5.用户模块 ☣基于java疫情防控管理系统 ☣项目介绍:通过对依社区为单位进行人群的管理,以及疫苗的情况,包括小区状况,通过RBAC进行角色与用户之间的权限管理. ☣项目:环境-IDEA.Mysql数据库,Tomcat服务器,SpringMVC,SpringBoot,AOP,拦截器,过滤器,全局异常,RBAC权限控制等. 1.登录模块(注册) 核心代码:service层 @Serv

  • Java 实战项目之疫情人员流动管理系统详解

    一.项目简述 本系统主要实现的功能有: 社区疫情流动人员管理系统,住户管理,出入管理,访客管理,体温录入,高风险警示等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: Springboot+ SpringMVC + MyBatis + Jsp + Html+ JavaScript + JQuery + Ajax + maven等等 系统用户后台管理代

  • Java 实战项目之家居购物商城系统详解流程

    一.项目简述 功能: Java Web精品项目源码,家居商城分类展示,商品展示, 商品下单,购物车,个人中心,后台管理,用户管理,商品管理,分类管理等等. 二.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持) 项目技术: Jdbc+ Servlert + html+ css + JavaScript + JQuery + Ajax + Fileupload 打开订单列

随机推荐