斗地主小游戏之洗牌发牌
任务描述
编写一个斗地主发牌洗牌的程序,要求按照斗地主的规则完成洗牌发牌的过程,牌面由花色色和数字(包括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集合,根据数字查找对应的纸牌字符串,并存入新创建的字符串集合中,最后展示字符串集合。
实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
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)方法,其具体的定义如下:
1
|
public int nextInt( int n) |
②要使用键盘输入所猜的数字,可以使用Scanner类,可以让用户从键盘中输入数字。
1
2
|
Scanner sc= new Scanner(System.in); int i=sc.nextInt(); |
③输入数字后,需要比较键盘输入的数字和后台预先生成的数字,由于猜数字并非一定一次成功,很可能是多次进行,因此可以通过while循环使程序能够多次从键盘输入,每次输入都进行猜数字对错判断。如果猜对了,跳出循环,输出"恭喜,你答对了!",游戏结束。
④如果猜错,这时使用if....else语句判断,将错误分为猜大了和猜小了两种结果。如果猜大了,打印"sorry,你猜大了!"继续下一次循环;如果猜小了,打印"sorry,你猜小了!"继续下一次循环。根据结果,给出提示,接着继续猜数字,游戏继续。
实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/m0_55749088/article/details/124452177