IT兄弟连 Java语法教程 综合案例
1.案例需求
编写程序,模拟斗地主游戏洗牌和发牌的流程。
2.应用知识
● 数组的声明
● 数组的遍历
● for循环
● if-else分支结构
3.需求解析
模拟斗地主游戏洗牌和发牌,需要在程序中定义一个String类型的数组用来存储扑克牌,数组的大小为54,初始化这个数组,将不同花色不同点数以及大小王以字符串的形式存储到这个数组中共54张牌。开始洗牌,定义一个新的数组,数组长度也是54,用来存储洗后的扑克牌,使用随机数在未洗牌的扑克数组中进行抽取,被随机到的扑克牌进入新数组中,然后在原数组中将该牌标记未已经被洗出去了,如果再次随机到该牌,则重新随机获取下一张牌,最后新数组中存储了洗好的扑克牌。牌洗好后,需要为三位玩家每人发17张牌,然后留下3张做为底牌,三位玩家的手牌使用三个数组表示,每个数组长度为17,底牌使用一个长度为3的数组表示。通过for循环依次为三位玩家发牌,当发到第51张牌时停止发牌,剩下的三张扑克牌存入底牌数组中。
4.需求实现
import java.util.Random;
public class PokerGame {
public static void main(String[] args){
//创建数组,用于存储扑克牌,扑克牌共54张,所以设定数组大小为54
String[] pokers = new String[54];
//定义花色数组,共4中花色。
String[] colors = {"红桃","黑桃","梅花","方片"};
//定义牌面数组
String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q", "K"};
//定义大小王
String[] kings = {"大王","小王"};
//使用循环将牌存储到pokers数组中
int index = 0; //index用来表示扑克牌数组的下标
for(int i = 0;i<numbers.length;i++){
for(int j = 0;j<colors.length;j++){
pokers[index++] = colors[j] + numbers[i];
}
}
//将大小王添加进扑克牌数组
pokers[index++] = kings[0];
pokers[index] = kings[1];
System.out.println("现在有一副新扑克");
//输出扑克牌
for (String poker : pokers){
System.out.print(poker+",");
}
//开始洗牌
//定义数组,用来存储被洗出的牌
String[] newPokers = new String[pokers.length];
//定义数组,用以表示被随机取出的牌
boolean[] make = new boolean[pokers.length];
//洗牌
for (int i = 0;i<pokers.length;i++){
//创建随机数对象
Random rd = new Random();
//获取随机数,当作即将被洗出的牌的下标
int pokerIndex = rd.nextInt(pokers.length);
//判断被洗出的牌是否已经被洗出了
if (!make[pokerIndex]) {
//如果该牌没被洗出则将该牌添加进洗出数组
newPokers[i] = pokers[pokerIndex];
//将该牌设置为已经被洗出了
make[pokerIndex] = true;
} else i--;//如果该牌已经被洗出了,控制扑克数组下标减1重新选牌
}
//控制换行输出
System.out.println();
//输出洗牌后的牌
for (String poker : newPokers){
System.out.print(poker+",");
}
//定义3名玩家手牌数组以及底牌数组
String[] one = new String[17];
String[] two = new String[17];
String[] three = new String[17];
String[] underPoker = new String[3];
//定义下标在发牌时表示不同玩家需要发的第几张牌
int oneIndex = 0;
int twoIndex = 0;
int threeIndex = 0;
int underPokerIndex = 0;
//循环进行按顺序发牌
for(int i = 0; i<newPokers.length ;i++){
//因为每位玩家只需要发17张手牌,最后3张留给底牌,
//所以发到51张时就不应该给继续给玩家发牌了
if(i<=50 && i % 3 == 0){
one[oneIndex++] = newPokers[i];
}else if(i<=50 && i % 3 ==1){
two[twoIndex++] = newPokers[i];
}else if (i<=50 && i % 3 == 2){
three[threeIndex++] = newPokers[i];
}else{
underPoker[underPokerIndex++] = newPokers[i];
}
}
//循环输出每名玩家的手牌以及底牌
System.out.println();
System.out.print("玩家1得到的牌:");
for (String poker: one){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("玩家2得到的牌:");
for (String poker: two){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("玩家3得到的牌:");
for (String poker: three){
System.out.print(poker + ",");
}
System.out.println();
System.out.print("底牌:");
for (String poker: underPoker){
System.out.print(poker + ",");
}
}
}
IT兄弟连 Java语法教程 综合案例的更多相关文章
- IT兄弟连 Java语法教程 标识符和关键字
Java语言也和其它编程语言一样,使用标识符作为变量.对象的名字.也提供了一系列的关键字用以实现特别的功能.本小节将详细介绍Java语言的标识符和关键字等内容. 1.分隔符 Java语言里的分号“;” ...
- IT兄弟连 Java语法教程 数组 经典案例
案例需求: 编程实现双色球中奖号码的生成 1)应用知识: ● 数组的声明 ● 数组的使用 ● for循环 2)需求解析: 在该程序中,需要定义一个长度为7的数组,用来存储中奖号码,使用Rando ...
- IT兄弟连 Java语法教程 流程控制语句 经典案例
使用continue忽略本次循环剩下的语句 continue的功能和break有点类似,区别是continue只是忽略本次循环剩下的语句,接着开始下一次循环,并不会终止循环:而break则是完全终止循 ...
- IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明
Java语言里提供了支持多维数组的语法.但是这里还想说,从数组底层的运行机制上来看是没有多维数组的. Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存,数组元 ...
- IT兄弟连 Java语法教程 变量2
变量的作用域和生命周期 到目前为止,使用的所有变量都是在main()方法开始时声明的,然而,Java允许在任何代码块(代码块以开花括号开始,以闭花括号结束)中声明变量,代码块定义了作用域.因此,每当开 ...
- IT兄弟连 Java语法教程 变量1
什么是变量 在Java程序中,变量是基本的存储单元.是在程序运行中值可以改变的一块内存区域.变量是通过标识符(变量名).变量类型及可选的初始化器来定义的,此外,所有的变量都有作用域,作用域定义了变量的 ...
- IT兄弟连 Java语法教程 Java语言的其他特性
Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ● 语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...
- IT兄弟连 Java语法教程 Java的发展历程
只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...
- IT兄弟连 Java Web教程 经典案例2
案例需求:写一个用户登录的html页面有账号和密码,并在登录的Servlet中获取登录的账号和密码,如果账号是abc密码是123则向浏览器输出登录成功,否则向浏览器输出登录失败. 案例实现: ● h ...
随机推荐
- Centos8尝鲜
Centos 8阿里云下载地址https://mirrors.aliyun.com/centos/8.0.1905/isos/x86_64/ Centos8的一些变化 网络服务: 在/etc/sysc ...
- AXN文档
https://help.aliyun.com/document_detail/59705.html?spm=a2c4g.11186623.6.664.58a053afCvMM57 AXN api文档 ...
- gitlab-CI作业-yml
stages: - build - deploy before_script: - echo "Restore NuGet Packages..." - echo "do ...
- Swoole如何处理高并发
有需要学习交流的友人请加入swoole交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群 swoole如何处理高并发 ①Reactor模型介绍 IO复用异步非阻塞 ...
- H5移动端开发遇见的东西
常见的有viewport.强制浏览器全屏.IOS的Web APP模式.可点击元素出现阴影 本文主要讲一些其他的或者实用的优化手段. 1. 弹出数字键盘 <!-- 有"#" & ...
- 01-linux介绍
一.Linux简介 Linux内核最初只是由芬兰人林纳斯.托瓦兹在大学时出于爱好写出来的,是一套免费使用和自由传播的类Unix操作系统,是基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU ...
- cocoscreator查找节点的方法 (跟jquery find一样)
var each = function(object, callback) { var type = (function() { switch (object.constructor) { case ...
- Spring中,关于IOC和AOP的那些事
一.spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很 ...
- Java题库——Chapter3 操作符、选择
1)The "less than or equal to" comparison operator in Java is ________. A)<< B) != C) ...
- audio标签以及audio对象
一.audio标签 简单语法 <audio src="音频链接"></audio> 属性 属性 值 描述 autoplay 如果出现该属性,则音频在就绪后马 ...