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 ...
随机推荐
- sql server一些快捷方式和操作技巧
1.注释(ctrl+k+c) 和 取消注释(ctrl+k+u) 2.行号显示,如图:
- 使用layui框架 修改时部分参数未传给后台(查找原因)
采用的结构: <form class="layui-form reset-form" action="" id="formData"& ...
- kubernets学习笔记
K8s CI :持续集成CD :持续交付 D --DeliveryCD :持续部署 D --Deployment Kubernetes Cluster: Masters: (3-host 做高可用)A ...
- 「专题总结」LCT 2
差不多理解板子之后,写了一些奇怪的题. 但是还是那个问题:树剖真好使. 魔法森林:mikufun说这个是傻逼题. 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐士. 魔法森林可以 ...
- vue-cli2和cli3的使用和区别
vue-cli脚手架的使用 使用vue-cli可以快速搭建vue的开发环境,和webpack的配置 安装vue脚手架: npm install -g@vue/cli 上面安装的是vue cli3的版本 ...
- 干货:.net core实现读取appsettings.json配置文件(建议收藏)
看好多人不懂在.NET CORE中如何读取配置文件,我这里分两篇,这一篇介绍怎样通过appsettings.json配置读取文件信息.这里我会教大家两种方式: 第一种直接放到通用类库,那里想调往那调. ...
- 基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术-Angel工作室通用权限管理
一.Angel工作室简单通用权限系统简介 AngelRM(Asp.net MVC Web api)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技术 ...
- Web前端基础(17):jQuery基础(四)
1. jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...
- ElementUI项目中怎样引用Jquery
场景 使用ElementUI的快速开始的项目模板搭建Element项目后, 要在vue页面中使用jquery的语法. 这里直接使用$.ajax会提示$找不到. 注: 博客:https://blog.c ...
- JavaScript 使用new关键字调用函数
使用new关键字调用函数 test.js 代码如下 function Person(name, age, obj) { var o = new Object(); o.name = name; o.a ...