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

斗地主小游戏之洗牌发牌

任务描述

编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括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("恭喜你,答对了!");
     }
 }

总结

通过这两个实例让我们学习了如何去分析一个小的项目,如何划分实现项目步骤以及如何用代码去实现这个项目,并且通过演练一些比较有趣的小游戏可以增加我们对开发语言的兴趣,为我们以后大的项目开发积累经验,提升自身竞争力。

到此这篇关于java实现斗地主与猜数字游戏详细流程的文章就介绍到这了,更多相关java游戏内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关推荐:

如何根据前一个连续段落的值修改当前数字序列

本文介绍如何在Pandas中识别数值的连续段(streak),并基于前一段的值批量修改当前段——例如,将紧跟在1段之后的所有2段统一替换为1,同时保持其他值(如-1)不变。 本文介绍如何在pandas中识别数值的连续段(streak),并基于前一段的值批量修改当前段——例如,将紧跟在`1`段之后的所...

Python中使用glob匹配三位数字前缀的beta系列NIfTI文件路径

本文介绍如何用glob模块精准匹配形如“123_beta_faces.nii.gz”的文件路径,重点解决通配符误用问题,提供正确模式写法、常见错误分析及实用代码示例。 本文介绍如何用glob模块精准匹配形如“123_beta_faces.nii.gz”的文件路径,重点解决通配符误用问题,提供正确模式...

Python中Scikit-learn如何构建机器学习流水线_使用Pipeline简化流程

Pipeline的核心作用是防止数据泄露、避免训练/预测不一致、减少重复代码;其fit()在每次交叉验证fold内仅用当前fold训练子集拟合scaler,杜绝跨fold信息泄露。 直接说结论:用Pipeline不是为了“看起来更专业”,而是为了堵住数据泄露、避免训练/预测不一致、减少重复代码这三类...

提取 Pandas 字符串中形如“数字+X”的模式(如 3X、4X)

本文详解如何在Pandas中准确提取形如单个数字(3–6)后紧跟字母X的子串(如"3X"),解决str.extract返回NaN或匹配失败的常见误区,重点说明正则捕获组、边界控制与数据类型预处理的关键作用。 本文详解如何在pandas中准确提取形如单个数字(3–6)后紧跟字母x的子串(如"3x"),...

如何在 Pandas 中精准提取形如“数字+X”的子串(如 3X、4X)

本文详解如何使用str.extract()正确捕获单个数字后紧跟字母X的模式(如"3X"),解决因正则表达式分组缺失、边界匹配不当或数据类型导致的提取失败问题,并提供可直接运行的代码示例与关键注意事项。 本文详解如何使用`str.extract()`正确捕获单个数字后紧跟字母x的模式(如`"3x"`...

如何使用Python从文件每行中提取数字并移除数字生成新字符串

本文介绍如何用python逐行读取文本文件,利用正则表达式同时提取所有数字(存入列表)和移除所有数字后保留的纯文本(存入另一列表),代码简洁、健壮且符合python最佳实践。 本文介绍如何用python逐行读取文本文件,利用正则表达式同时提取所有数字(存入列表)和移除所有数字后保留的纯文本(存入另一...

如何从文本文件每行中提取数字并移除数字生成纯净字符串

本文介绍使用python正则表达式高效处理文本文件:逐行读取内容,自动提取所有连续数字(如"123"、"45")存入数字列表,并生成剔除所有数字后的纯净字符串,全程内存友好、无需手动循环控制。 本文介绍使用python正则表达式高效处理文本文件:逐行读取内容,自动提取所有连续数字(如"123"、"4...