Java基础之如何解决斗地主问题

    难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结。

    多多指教,共同进步。

问题:

要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌。在不看底牌的情况下,统计出三个玩家的炸弹数;

S(small)代表小王,B(big)代表大王

-----------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------

思路分析:

   全部用数字代表牌的大小和花色,这样可以方便的进行存储分发,只有在最终的打印牌的时候再进行实际的花色和大小的转化;
     如何随机发牌,如何统计炸弹数量?

1,牌库包括54张牌,用二维数组进行存储4行14列(行代表花色,列代表牌的大小)
       1)难点在于如何存储大小王
              因为接下来是进行随机发放给三个人的,所以随便用两行的第14列来存储大小王,(也用数字代表大小王),剩下的两行的第14列置为空即可;
       2)定义布尔类型的二维数组,也是4行14列,把牌库中有牌的下标置成true;
  2,随机生成牌
      随机生成数字0—3来控制行数,即牌的花色;
          随机生成数字0—14来控制列数,即牌的大小;
  3,随机分发牌
       1)随机生成数字1—3,对3求余,0代表第一个人,1代表第二个人,2代表第三个人;
       2)判断是否已经发出去了(用布尔数组进行判断,true代表没有发出去)
               用一位数组存储发出去的花色,发出去后用布尔数组把下标置成false;同时计算发出去牌的数量;
       3)同理为第二,第三个人随机发牌;
       4)条件判断,当已经发出去51张牌时,跳出循环;
  4,打印生成的牌和底牌
         1)遍历布尔型数组和此时的牌库,找出下标和牌的大小,即可得到底牌;
         2)用存储花色的一位数组和存储牌大小的一位数组进行遍历求生成的牌的花色和大小;
  5,遍历统计每个人的炸弹数量
       1)先统计大小王的个数,再进行双重循环遍历其他牌是否存在用炸弹;
       2)同理,统计第二个人,第三个的;

代码实现:

时间: 2024-12-12 01:48:48

Java基础之如何解决斗地主问题的相关文章

-Java基础-Java介绍

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. java的介绍 1.1java简介 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言. 它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机.电话.闹钟.烤面包机等家用电器的控制和通讯问题.由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划.就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机

Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法

java.lang.OutOfMemoryError: Java heap space 的解决方法 关键字: tomcat outofmemoryerror permgen space java heap space 最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错

No_16_0221 Java基础学习第二天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.02.21 lutianfei none 第二章 Java基础语法(一)关键字(二)标识符1.常见命名规则(三)注释(四)常量原码.反码.补码有符号数据表示法(五)变量数据类型的默认转换数据类型的强制转换面试题1面试题2练习题1 byte b = 300:练习题2,写出下列程序结果 第二章 Java基础语法 本章内容 关键字 标识符 注释 常量.进制和进制转换 变量 数据类型和类型转换 运算符 语句 (一)关键字 关键

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

Java基础和面向对象

Java基础和面向对象 一.数据类型和运算符 标识符 组成:字母.数字.下划线.$ 首字母:不能是数字 见名知义 不能是关键字(48个) 正确的:name.name123.age._name.$name 错误的:1name.public.123.na%me 标识符主要给一个元素起名字,需要符合起名字的以上4种规则.比如说,类的名字:首字母大写:变量名称:小写:方法名称:驼峰命名:数组名称.接口名称.集合名称. //你定义为汉字也可以,不过不推荐,因为国际语言以English为主.为了面向世界,使

Java基础】并发 - 多线程

Java基础]并发 - 多线程 分类: Java2014-05-03 23:56 275人阅读 评论(0) 收藏 举报 Java 目录(?)[+] 介绍 Java多线程 多线程任务执行 大多数并发应用程序时围绕执行任务(task)进行管理的:所谓任务就是抽象的,离散的工作单元. 围绕执行任务来管理应用程序时,第一步是要指明一个清晰的任务边界.大多数应用服务器程序都选择了下面这个自然的任务辩解:单独的客户请求: 任务时逻辑上的单元: 任务 Runnable 表示一个任务单元(java.lang)

Java 基础:认识&理解关键字 native 实战篇

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 泥瓦匠初次遇见 navicat 是在 java.lang.Object 源码中的一个hashCode方法: 1 public native int hashCode(); 为什么有个navicat呢?这是我所要学习的地方.所以今天泥瓦匠想要总结下navicat. 一.认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这

java基础篇---I/O技术(三)

接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象输入流(ObjectInputStream).使用对象输出流输出序列化对象的步骤,有时也成序列化,而使用对象输入流读入对象的过程,有时也称为反序列化 一个对象产生之后实际上是在内存中为其开辟了一个存储空间,方便存储信息. 对象序列化就是把一个对象变成二进制的数据流的一个方法,通过对象序列化可以反驳的

java基础问题总结

1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并