寻找需要的类
1.房间类,用来控制游戏的开始
2.纸牌类,包含花色,大小,用来排序的value值。
流程:创建54张牌,51张随机发三个玩家(创建一个集合存牌),最后三张随机发个一个玩家当地主,创建排序方法对牌进行排序。
card类
package com.jjt.game_an_li;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class card {
private String size;
private String color;
private int value;
//重写打印方式
@Override
public String toString() {
return color + size;
}
}
//运行的主函数
package com.jjt.game_an_li;
public class an_li_dou_di_zhu {
public static void main(String[] args) {
//目标开发斗地主游戏
//1.每张牌都是一个对象,定义牌类
//游戏房间也是一个对象
//三个玩家一个房间
room_card room = new room_card();
room.start();//启动房间
}
}
房间类
package com.jjt.game_an_li;
import java.util.*;
import java.util.stream.Collectors;
public class room_card {
//启动游戏,准备54张牌,给房间使用
//定义容器装牌
private List<card> cards=new ArrayList<>();
}
初始化:我们需要准备54张牌,方法构造器,代码块
代码块初始化
//初始化54张排牌,(与创建对象时候一起调用,比构造器快)利用示例代码块,初始化
{
//准备点数
String[] sizes={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
//准备花色
String[] colors={"♥","♠","♣","♦"};
//准备牌
//indexd代表牌的价值方便排序
int index=1;
for(String size:sizes)
{
for(String color:colors)
{
cards.add(new card(color,size,index));
}
index++;
}
// cards.add(new card("","大王"));
// cards.add(new card("","小王"));
//高级写法,Collections的方法
Collections.addAll(cards, new card("","大王",index+2),new card("","小王",index+1));
}
start开始方法
public void start()
{
//打乱顺序
Collections.shuffle(cards);
System.out.println("洗牌后:"+cards);
//发牌:定义三个玩家 令狐冲、令狐白、令狐黄,每个人都有17张牌,利用map容器
Map<String,List<card>> players=new HashMap<>();
List<card> player1=new ArrayList<>();
players.put("令狐冲",player1);
List<card> player2=new ArrayList<>();
players.put("令狐白",player2);
List<card> player3=new ArrayList<>();
players.put("令狐黄",player3);
//只发51张牌,剩余3张牌当底牌
for(int i=0;i<cards.size();i++)
{
//随机发牌
card card = cards.get(i);
//发牌规则
switch (i%3)
{
case 0:
player1.add(card);
break;
case 1:
player2.add(card);
break;
case 2:
player3.add(card);
break;
}
//
}
//拿三张底牌
List<card> lastcards=cards.subList(cards.size()-3,cards.size());
//三张底牌随机给一个玩家
int index1=new Random().nextInt(3);
switch (index1)
{
case 0:
player1.addAll(lastcards);
break;
case 1:
player2.addAll(lastcards);
break;
case 2:
player3.addAll(lastcards);
break;
}
//对排排序(实现类的自定义排序)
//Collections自定义排序
//写一个排序方法
sortcard(player1);
sortcard(player2);
sortcard(player3);
//使用Stream流对玩家List<card> player1=new ArrayList<>();的牌进行排序
//排完序后需要返回集合利用collect,不建议,最好用Collectors。sort自定义排序
//看牌遍历map集合
for(Map.Entry<String,List<card>> entry:players.entrySet())
{
String name = entry.getKey();
List<card> value = entry.getValue();
System.out.println(name+"的牌:"+value);
}
}
//牌排序方法
public void sortcard(List<card> cards)
{
Collections.sort(cards, new Comparator<card>() {
public int compare(card o1, card o2)
{
//牌里面有很多排序规则,不好写怎么办,重新写一个排序规则,给每个牌设置一个大小判断数字
return o2.getValue()-o1.getValue();
}
});
}