Java实现斗地主与猜数字游戏详细流程
作者:LNORA 发布时间:2022-02-04 07:02:48
斗地主小游戏之洗牌发牌
任务描述
编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括J,Q,K,A字母)组成,花色有红桃,黑桃,方块,梅花组成。还设有大王和小王。将这54张牌的顺序打乱,有三位玩家参与游戏,每人轮流一次摸一张牌,剩余的三张作为底牌,程序结束,打印出每人手中的纸牌和底牌。
运行结果
任务目标
学会分析"斗地主小游戏之洗牌发牌"程序的实现思路。
能够根据思路独立完成"斗地主小游戏之洗牌发牌"程序的代码编写,编译及运行。
掌握ArrayList和HashMap集合的特点以及增强for循环的使用。
实现思路
①要实现纸牌程序,首先要在程序中添加54张牌,这些牌包括红桃,黑桃,梅花,方块各13张,加上大王和小王。
②将花色集合和数字集合这两个集合进行嵌套循环,将花色与数字组合,形成52张牌,并且赋予编号,将组合后的牌放入HashMap集合中,集合的key值是编号,value值是组装完成的纸牌,还有大王和小王,由于组装规则不一致,需要单独使用add()方法将这两张纸牌加入到HashMap集合中。
③创建一个数字集合,用这个数字集合来替代纸牌完成洗牌和发牌的操作,由于一共有54张牌,所以创建集合的范围为0-53。
④可以使用Collections类的shuffle()方法完成打乱数字集合的操作,实现洗牌的效果。由于只有三个人,所以可以使用for循环,通过将数字与3取余的方法,将代表不同纸牌的数字分配给不同的人和底牌,实现发牌效果。
⑤洗牌发牌完成之后,可通过Collections类的sort()方法完成排序,之后通过增强for循环HashMap集合,根据数字查找对应的纸牌字符串,并存入新创建的字符串集合中,最后展示字符串集合。
实现代码
package Swing;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
public class DoudiZhu {
public static void main(String[]args) {
//准备花色
ArrayList<String>color=new ArrayList<String >();
color.add("黑桃");
color.add("红桃");
color.add("方块");
color.add("梅花");
//准备数字,用列表将纸牌从大到小排列
ArrayList<String >number=new ArrayList<String >();
for(int i=3;i<=10;i++){
number.add(i+"");
}
number.add("J");
number.add("Q");
number.add("K");
number.add("A");
number.add("2");
//定义一个map集合,用来将数字与每一张纸牌进行对应
HashMap<Integer,String>map=new HashMap<Integer,String>();
//纸牌编号
int index=0;
//循环纸牌数字
for(String thisNumber:number){
//循环纸牌花色
for(String thisColor:color){
//将花色与数字组合,形成52张牌,并赋予编号
map.put(index++,thisColor+thisNumber);
}
}
map.put(index++,"小王");
map.put(index++,"大王");
//创建0-53的数字集合代表54张牌
ArrayList<Integer>cards=new ArrayList<Integer>();
for(int i=0;i<=53;i++){
cards.add(i);
}
//洗牌,使用Collections工具类的shuffle()方法
Collections.shuffle(cards);
//创建三个玩家和底牌
ArrayList<Integer>iPlayer=new ArrayList<Integer>();
ArrayList<Integer>iPlayer2=new ArrayList<Integer>();
ArrayList<Integer>iPlayer3=new ArrayList<Integer>();
ArrayList<Integer>iSecretCards=new ArrayList<Integer>();
//遍历这副洗好的牌,遍历的过程中,将牌发到三个玩家和底牌中
for(int i=0;i<cards.size();i++){
if(i>=51){
//留取三个底牌
iSecretCards.add(cards.get(i));
}else{
if(i%3==0){//与3取余为0的发给玩家1
iPlayer.add(cards.get(i));
}else if(i%3==1){//与3取余为1的发给玩家2
iPlayer2.add(cards.get(i));
}else {//剩余的牌发给玩家3
iPlayer3.add(cards.get(i));
}
}
}
//对每个人手中的牌进行排序,使用的使Collections工具类中的sort()方法
Collections.sort(iPlayer);
Collections.sort(iPlayer2);
Collections.sort(iPlayer3);
ArrayList<String>sPlayer=new ArrayList<String>();
ArrayList<String>sPlayer2=new ArrayList<String>();
ArrayList<String>sPlayer3=new ArrayList<String>();
ArrayList<String>sSectCards=new ArrayList<String>();
//循环主键,从map中获取纸牌
for (Integer key:iPlayer){
sPlayer.add(map.get(key));
}
for (Integer key:iPlayer2){
sPlayer2.add(map.get(key));
}
for (Integer key:iPlayer3){
sPlayer3.add(map.get(key));
}
for (Integer key:iSecretCards){
sSectCards.add(map.get(key));
}
//将分发的牌显示出来
System.out.println("玩家1:"+sPlayer);
System.out.println("玩家2:"+sPlayer2);
System.out.println("玩家3:"+sPlayer3);
System.out.println("底牌:"+sSectCards);
}
}
猜数字游戏
任务描述
编写一个猜数字游戏,这个游戏就是"你出个数字,我来猜",程序后台预先生成一个0-9的随机数,用户键盘录入一个所猜的数字,如果输入的数字与后台预先生成的数字相同,则表示猜对了,这时,程序会打印出"恭喜,答对了",如果不相同,则比较输入的数字和后台预先生成的数字的大小,如果大了,打印"sorry,你猜大了!";如果小了,会打印"sorry,你猜小了";如果一直猜错,则游戏一直进行下去,直到数字猜对为止。
运行结果
任务目标
学会分析"猜数字游戏"程序的实现思路。
根据思路独立完成"猜数字游戏"的源代码编写,编译和运行。
掌握在程序中使用if选择结构和while循环结构语句进行运算操作。
实现思路
①要实现这个功能,首先程序要在后台预先生成一个0-9的随机数,生成随机数可以使用Random类中的nextInt(int n)方法,其具体的定义如下:
public int nextInt(int n)
②要使用键盘输入所猜的数字,可以使用Scanner类,可以让用户从键盘中输入数字。
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
③输入数字后,需要比较键盘输入的数字和后台预先生成的数字,由于猜数字并非一定一次成功,很可能是多次进行,因此可以通过while循环使程序能够多次从键盘输入,每次输入都进行猜数字对错判断。如果猜对了,跳出循环,输出"恭喜,你答对了!",游戏结束。
④如果猜错,这时使用if....else语句判断,将错误分为猜大了和猜小了两种结果。如果猜大了,打印"sorry,你猜大了!"继续下一次循环;如果猜小了,打印"sorry,你猜小了!"继续下一次循环。根据结果,给出提示,接着继续猜数字,游戏继续。
实现代码
package math;
import java.util.Random;
import java.util.Scanner;
public class CaishuZi {
public static void main(String[] args) {
int randomNumber = new Random().nextInt(10);
System.out.println("随机数已经生成");
System.out.println("请输入你所猜的数字");
Scanner sc =new Scanner(System.in);
int enterNumber =sc.nextInt();
//通过while循环,进行猜数字对错判断
//猜对,跳出循环,游戏结束
while(enterNumber!=randomNumber){
//猜错了,根据结果,给出提示,接着猜数字,游戏继续
if(enterNumber>randomNumber){
//猜大了给出的提示
System.out.println("sorry,你猜大了");
}else{
//猜小了,给出的提示
System.out.println("sorry,你猜小了");
}
//输入猜的数字
System.out.println("请输入你猜的数字");
enterNumber = sc.nextInt();
}
System.out.println("恭喜你,答对了!");
}
}
来源:https://blog.csdn.net/m0_55749088/article/details/124452177


猜你喜欢
- 前言在逛网易新闻时,发现列表中的广告在你滑动的时候会有一个3D旋转的交互引你的注意,不得不说这些产品为了让用户看广告花样百出,那么今天我们就
- 我就废话不多说了,大家还是直接看代码吧~/** * 从list中随机抽取元素 * * @param
- 本篇是对安卓菜单使用编程方式实现,当然可以使用XML的方式完成同样的功能,基本Java和C#写法都是一致的,所以使用XML的方式在本篇中使用
- 本文实例讲述了WinForm绘制圆角的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Co
- Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取
- onclick事件的定义方法,分为三种,分别为在xml中进行指定方法;在Actitivy中new出一个OnClickListenner();
- 本文实例为大家分享了Android中TabLayout结合ViewPager实现页面切换,供大家参考,具体内容如下一、实现思路1、在buil
- StringBuilder内部是由多段char[]组成的半自动链表,因此频繁从中间修改StringBuilder,会将原本连续的内存分隔为多
- Java数组的定义和使用如果希望保存一组有相同类型的数据,可以使用数组。数组的定义和内存分配Java 中定义数组的语法有两种:
- 这个比较简单,但是刚用as不久的朋友可能不知道。这里也不啰嗦了,给两张图就全懂了按ctrl+alt+s打开设置面板选择 Version &n
- 前言对于数组遍历,基本上每个开发者都写过,遍历本身没什么好说的,但是当我们在遍历的过程中,有一些复杂的业务逻辑时,将会发现代码的层级会逐渐加
- 时间戳转换:/// <summary>/// C#时间格式转换为时间戳(互转)/// 时间戳定义为从格林威治时间 1970年01
- 前言平时在搬砖的时候,大家有没有遇到过这样的一个场景,由于各种不可描述因素导致,一个接口返回的数据 里面的 key 是 A , 但是客户端(
- 1.字节码增强技术字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。参考地址2.常见技术技术分类类型静态增强Asp
- JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可
- 目录一:spring读取配置或注解的过程二:spring的bean的生命周期2.1:实例化 Instantiation2.2:初始化3: 使
- WebService是一种跨编程语言和跨操作系统平台的远程调用技术所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一
- 通过将PDF格式转换为PDF/A格式,可保护文档布局、格式、字体、大小等不受更改,从而实现文档安全保护的目的,同时又能保证文档可读、可访问。
- /* * 绘制0°到360°的正弦曲线 * 分两种情形,y>0和y<=0进行绘制 * 每种情形中要
- 之前开发项目,一直都使用的是外壳程序加子程序的模式,通过外壳程序去启动子程序,外壳程序和子程序之间的通信,是使用配置文件完成的。我总觉得这样