> 技术文档 > Java基础-斗地主游戏

Java基础-斗地主游戏

目录

案例要求:​

实现思路:

代码:

Main启动类:

Card实体类:

Room操作类:

总结:


案例要求:

实现思路:

1构造卡牌,细节:实体类另设一个int类型变量表示大小,后面为了实现斗地主牌降序或者升序排序

2打乱卡牌的顺序和发牌

3选定大小王

4实现对牌顺序

5展示玩家的卡牌即可

代码:

Main启动类:

import java.io.IOException;import java.util.*;import java.util.stream.Collectors;//TIP 要运行代码,请按  或// 点击装订区域中的  图标。public class Main { static Scanner sc = new Scanner(System.in); public static void main(String[] args) { Room room = new Room(); room.start(); }}

Card实体类:

import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Objects;@Data@AllArgsConstructor@NoArgsConstructorpublic class Card implements Comparable { private String number; private String color; private int size; @Override public String toString() { return number + color; } @Override public int compareTo(Card o) { return o.size-size; }}

Room操作类:

import java.util.*;import java.util.stream.Collectors;public class Room { private List list=new ArrayList(); { String [] colors={\"♥\",\"♠\",\"♣\",\"♦\"}; String [] numbers={\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"J\",\"Q\",\"K\",\"A\",\"2\"}; for (int i = 0; i < numbers.length; i++){ for(int j = 0; j < colors.length; j++){ list.add(new Card(numbers[i],colors[j],i)); } } list.add(new Card(\"\",\"\\uD83C\\uDCCF\",13)); list.add(new Card(\"\",\"\\uD83E\\uDDD1\",14)); } Scanner sc = new Scanner(System.in); public void start(){ System.out.println(\"洗牌前\"); System.out.println(list); System.out.println(\"洗牌后\");// 使用集合类工具打乱卡牌顺序 Collections.shuffle(list); System.out.println(list);// 发牌,三个玩家 Map<String,List> players=new HashMap(); List p1=new ArrayList(); players.put(\"张三\",p1); List p2=new ArrayList(); players.put(\"李四\",p2); List p3=new ArrayList(); players.put(\"王五\",p3); for(int i=0;i<list.size()-3;i++){ if(i%3==0){ p1.add(list.get(i)); } else if (i%3==1) { p2.add(list.get(i)); }else{ p3.add(list.get(i)); } } System.out.print(\"底牌是 \"); for (int i = list.size()-3; i < list.size(); i++) { System.out.print(list.get(i)+\" \"); } System.out.println(); System.out.print(\"玩家 \"); for (String name : players.keySet()){ System.out.print(name+\" \"); } System.out.print(\"请决定谁是地主(姓名)\"); String name=sc.next(); for(Map.Entry<String,List> entry:players.entrySet()) { if (entry.getKey().equals(name)) { List cards = entry.getValue(); cards.addAll(list.stream().skip(51).toList()); } }////TODO或者// if(entry.getKey().equals(name)){// entry.getValue().addAll(list.stream().skip(51).collect(Collectors.toList()));// }// 对拍顺序// TODO法一// sortCards(p1);// sortCards(p2);// sortCards(p3);// TODO法二 Collections.sort(p1); Collections.sort(p2); Collections.sort(p3);// 看牌/* //TODO遍历方法一:List names=players.entrySet().stream().map(Map.Entry::getKey).toList(); for(int i=0;i<names.size();i++){ System.out.println(names.get(i)+\"的牌是:\"); List cards=players.get(names.get(i)); for(int j=0;j<cards.size();j++){ System.out.print(cards.get(j)+\" \"); } System.out.println(); }*/ for(Map.Entry entry:players.entrySet()){ System.out.println(entry.getKey()+\"的牌是:\"); List cards=(List) entry.getValue(); for(Card card:cards){ System.out.print(card+\" \"); } System.out.println(); } } //TODO法一;哪用哪里构造比较器// private void sortCards(List p1) {// Collections.sort(p1, new Comparator() {// @Override// public int compare(Card o1, Card o2) {//// return o1.getSize()-o2.getSize();// }// });// }//// TODO简化版的// private void sortCards(List p1) {// Collections.sort(p1, (o1, o2) -> o1.getSize()-o2.getSize());// }}

总结:

本文展示了一个Java实现的简单扑克牌游戏程序。程序主要包含三个类:Main启动类、Card实体类(使用Lombok简化代码)和Room操作类。程序实现了洗牌、发牌、选择地主、排序牌面和显示牌面等功能。通过Collections工具类实现洗牌和排序,使用HashMap存储玩家信息,并展示了多种遍历和排序的实现方式(包括Lambda表达式)。程序能正确处理54张牌(含大小王),支持3名玩家游戏,由用户指定地主并获得底牌。