Java实现斗地主与猜数字游戏详细流程

作者:LNORA 时间:2022-02-04 07:02:48 

斗地主小游戏之洗牌发牌

任务描述

编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括J,Q,K,A字母)组成,花色有红桃,黑桃,方块,梅花组成。还设有大王和小王。将这54张牌的顺序打乱,有三位玩家参与游戏,每人轮流一次摸一张牌,剩余的三张作为底牌,程序结束,打印出每人手中的纸牌和底牌。

运行结果  

Java实现斗地主与猜数字游戏详细流程 

任务目标

  • 学会分析"斗地主小游戏之洗牌发牌"程序的实现思路。

  • 能够根据思路独立完成"斗地主小游戏之洗牌发牌"程序的代码编写,编译及运行。

  • 掌握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,你猜小了";如果一直猜错,则游戏一直进行下去,直到数字猜对为止。

运行结果

Java实现斗地主与猜数字游戏详细流程  

任务目标

  • 学会分析"猜数字游戏"程序的实现思路。

  • 根据思路独立完成"猜数字游戏"的源代码编写,编译和运行。

  • 掌握在程序中使用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

标签:Java,斗地主,猜数字,游戏
0
投稿

猜你喜欢

  • Java代理模式与动态代理之间的关系以及概念

    2022-03-15 18:05:34
  • Android自定义View绘制的方法及过程(二)

    2023-05-02 14:42:17
  • Android Zxing 转换竖屏扫描且提高识别率的方法

    2022-06-19 13:18:12
  • 详解Java编程中包package的内容与包对象的规范

    2022-03-06 17:48:08
  • Android布局技巧之使用ViewStub

    2023-03-22 06:34:10
  • c#调用api控制windows关机示例(可以重启/注销)

    2021-12-20 14:52:06
  • Android解决所有双击优化的问题

    2023-07-27 09:07:03
  • Java的idea连接mongodb数据库的详细教程

    2023-11-19 08:07:58
  • ViewPager实现带引导小圆点与自动跳转的引导界面

    2021-07-11 12:25:18
  • Android程序美化之自定义ListView背景的方法

    2023-12-13 17:52:57
  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)

    2021-06-11 10:25:11
  • Android实现加载对话框

    2023-10-24 14:48:36
  • Java多线程的临界资源问题解决方案

    2021-12-29 07:44:35
  • MaterialApp Flutter 应用全局配置与主题管理详解

    2023-05-03 18:50:48
  • 在winform下实现左右布局多窗口界面的方法

    2023-02-23 11:31:51
  • Android编程开发之NotiFication用法详解

    2023-01-19 22:50:11
  • 详解Jvm中时区设置方式

    2023-12-09 02:59:19
  • Feign如何实现第三方的HTTP请求

    2023-06-10 16:20:20
  • Java C++ 算法题解拓展leetcode670最大交换示例

    2022-05-18 23:31:51
  • Java设计模式之责任链模式的概念、实现以及netty中的责任链模式

    2022-05-28 00:24:12
  • asp之家 软件编程 m.aspxhome.com