Java 控制台版的跑得快
package com.iot.common.core;
import org.springframework.beans.BeanUtils;
import java.util.*;
import java.util.stream.Collectors;
public class myTest {
final static String[] userStr = new String[]{"发哥", "小刀仔", "小趴菜"};
public static void main(String[] args) {
System.out.println("******跑得快******");
System.out.println("开始游戏,请输入【\033[31;4mstart\033[0m】");
System.out.println("退出游戏,请输入【\033[31;4mexit\033[0m】");
boolean startBol = true;
int playerCount = 0;
while (startBol) {
System.out.println("请输入......");
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
if ("start".equals(str)) {
playerCount++;
startBol = startGame(playerCount);
} else if ("exit".equals(str)){
System.out.println("结束游戏,拜拜~");
startBol = false;
} else {
System.out.println("请输入【start/exit】");
}
}
}
public static boolean startGame(int playerCount) {
System.out.println("第【" + playerCount + "回合开始】......" );
boolean startBol = true;
Queue<UserPokerClass> pokerQueue = new LinkedList<>();
List<UserPokerClass> userPokerClasses = new LinkedList<>();
for (int i = 0; i <= 2; i++) {
UserPokerClass userPokerClass = new UserPokerClass();
userPokerClass.setUserName(userStr[i]);
userPokerClass.setPokers(
pokers
.stream()
.skip(16 * i)
.limit(16
)
.sorted(Comparator.comparing(PokerClass::getPoker))
.collect(Collectors.toList()));
userPokerClasses.add(userPokerClass);
}
userPokerClasses = userPokerClasses.stream().filter(eq -> {
boolean bol = true;
for (int i = 0; i < eq.getPokers().size(); i++) {
if (
3 == eq.getPokers().get(i).getPoker() &&
"♠".equals(eq.getPokers().get(i).getDesignColor())
) {
pokerQueue.offer(eq);
bol = false;
break;
}
}
return bol;
}).collect(Collectors.toList());
putPoker(pokerQueue.peek().getPokers());
System.out.println("请出牌......");
boolean bol = true;
while (bol) {
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
List<Integer> scannerList = getUserScannerData(str);
CheckMsg checkMsg = checkData(scannerList, pokerQueue.peek().getPokers());
if (checkMsg.getBol()) {
putPoker(checkMsg.getPutClasses());
System.out.println(checkMsg.getMsg() + "......");
UserPokerClass userPokerClass = pokerQueue.poll();
userPokerClass.setPokers(checkMsg.getPokerClasses());
pokerQueue.offer(userPokerClass);
System.out.println(" ");
System.out.println(" ");
System.out.println("------------------------------------------");
System.out.println(" ");
System.out.println(" ");
putPoker(checkMsg.getPokerClasses());
bol = true;
} else {
System.out.println(checkMsg.getMsg());
bol = true;
}
}
return startBol;
}
public static CheckMsg AIPutPoker(List<Integer> userPutData, Queue<UserPokerClass> pokerQueue) {
UserPokerClass nowPokerClass = pokerQueue.poll();
return null;
}
public static List<PokerClass> putOne(UserPokerClass nowPokerClass, List<Integer> userPutData) {
Integer userPoker = userPutData.get(0);
return null;
}
public static CheckMsg checkData(List<Integer> putData, List<PokerClass> checkData) {
CheckMsg checkMsg = new CheckMsg();
List<PokerClass> putPokerClasses = new ArrayList<>();
for (Integer putDatum : putData) {
boolean bol = false;
for (int i = 0; i < checkData.size(); i++) {
if (putDatum == checkData.get(i).getPoker()) {
PokerClass pokerClass = new PokerClass();
BeanUtils.copyProperties(pokerClass, checkData.get(i));
putPokerClasses.add(pokerClass);
checkData.remove(i);
bol = true;
break;
}
}
if (!bol) {
checkMsg.setMsg("不存在扑克牌:【"+pokerFormat(putDatum)+"】");
checkMsg.setBol(false);
return checkMsg;
}
}
checkMsg.setBol(true);
if (putPokerClasses.size() == 1) {
checkMsg.setMsg("单张");
} else if (isPairs(putPokerClasses)) {
checkMsg.setMsg("对子");
} else if (isBomb(putPokerClasses)) {
checkMsg.setMsg("炸弹");
} else if (isStraight(putPokerClasses)) {
checkMsg.setMsg("顺子");
} else if (is3And2(putPokerClasses)){
checkMsg.setMsg("三带二");
} else if (is3And2s(putPokerClasses)){
checkMsg.setMsg("飞机");
} else if (is4And2(putPokerClasses)) {
checkMsg.setMsg("四带二");
} else if (isConsecutivePairs(putPokerClasses)) {
checkMsg.setMsg("连对");
} else {
checkMsg.setBol(false);
checkMsg.setMsg("出牌不合规【单张、对子、连对、三代二、炸弹、四带二】");
}
checkMsg.setPokerClasses(checkData);
checkMsg.setPutClasses(putPokerClasses);
return checkMsg;
}
public static boolean isPairs(List<PokerClass> pokerClasses) {
if (pokerClasses.size() == 2) {
return pokerClasses.get(0).getPoker() == pokerClasses.get(1).getPoker();
}
return false;
}
public static boolean isConsecutivePairs(List<PokerClass> pokerClasses) {
if (pokerClasses.size()%2 == 0) {
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).distinct().sorted().collect(Collectors.toList());
for (int i = 0; i < integerList.size() -1; i++) {
if (integerList.get(i) + 1 != integerList.get(i + 1)) {
return false;
}
}
} else {
return false;
}
return true;
}
public static boolean isStraight(List<PokerClass> pokerClasses) {
if (pokerClasses.size() >= 5) {
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).sorted().collect(Collectors.toList());
for (int i = 0; i < integerList.size() -1; i++) {
if (integerList.get(i) + 1 != integerList.get(i + 1)) {
return false;
}
}
} else {
return false;
}
return true;
}
public static boolean is3And2(List<PokerClass> pokerClasses) {
if (pokerClasses.size() == 5) {
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).distinct().sorted().collect(Collectors.toList());
for (Integer integer : integerList) {
if (pokerClasses.stream().filter(eq -> eq.getPoker() == integer).collect(Collectors.toList()).size() == 3) {
return true;
}
}
}
return false;
}
public static boolean is3And2s(List<PokerClass> pokerClasses) {
if (pokerClasses.size() >= 10) {
int count = pokerClasses.size() / 5;
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).distinct().sorted().collect(Collectors.toList());
int count3 = 0;
for (Integer integer : integerList) {
if (pokerClasses.stream().filter(eq -> eq.getPoker() == integer).collect(Collectors.toList()).size() == 3) {
count3++;
}
}
if (count == count3) {
return true;
}
}
return false;
}
public static boolean is4And2(List<PokerClass> pokerClasses) {
if (pokerClasses.size() == 5) {
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).distinct().sorted().collect(Collectors.toList());
for (Integer integer : integerList) {
if (pokerClasses.stream().filter(eq -> eq.getPoker() == integer).collect(Collectors.toList()).size() == 4) {
return true;
}
}
}
return false;
}
public static boolean isBomb(List<PokerClass> pokerClasses) {
if (pokerClasses.size() == 4) {
List<Integer> integerList = pokerClasses.stream().map(PokerClass::getPoker).distinct().sorted().collect(Collectors.toList());
if (integerList.stream().distinct().collect(Collectors.toList()).size() == 1) {
return true;
}
}
return false;
}
public static List<Integer> getUserScannerData(String str) {
boolean bol = true;
List<Integer> dataList = new ArrayList<>();
while (bol) {
if (str.indexOf("10") >= 0) {
dataList.add(10);
str = str.replaceFirst("10" , "");
} else {
bol = false;
}
}
for (char c : str.toCharArray()) {
dataList.add(pokerFormat2(String.valueOf(c)));
}
return dataList;
}
public static void putPoker(List<PokerClass> pokers) {
StringBuffer sop1 = new StringBuffer();
StringBuffer sop2 = new StringBuffer();
StringBuffer sop3 = new StringBuffer();
StringBuffer sop4 = new StringBuffer();
for (PokerClass poker : pokers) {
if (poker.getPoker() == 10) {
sop1.append("\033[31;4m"+pokerFormat(poker.getPoker())+" "+poker.getDesignColor()+"\033[0m ");
} else {
sop1.append("\033[31;4m"+pokerFormat(poker.getPoker())+" "+poker.getDesignColor()+"\033[0m ");
}
sop2.append(" ");
sop3.append(" ");
if (poker.getPoker() == 10) {
sop4.append("\033[31;4m"+poker.getDesignColor()+" "+pokerFormat(poker.getPoker())+"\033[0m ");
} else {
sop4.append("\033[31;4m"+poker.getDesignColor()+" "+pokerFormat(poker.getPoker())+"\033[0m ");
}
}
System.out.println(sop1);
System.out.println(sop2);
System.out.println(sop3);
System.out.println(sop4);
}
static class UserPokerClass {
String userName;
List<PokerClass> pokers;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public List<PokerClass> getPokers() {
return pokers;
}
public void setPokers(List<PokerClass> pokers) {
this.pokers = pokers;
}
}
static class MyComparator implements Comparator<PokerClass> {
@Override
public int compare(PokerClass o1, PokerClass o2) {
return Math.random() < 0.5? 1 : -1;
}
}
static List<PokerClass> pokers = makePoker();
public static List<PokerClass> makePoker() {
List<PokerClass> pokerClasses = new ArrayList<>();
int[] pokers = new int[]{3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15,};
String[] designColor = new String[]{"♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦","♠","♣","♥","♦"};
for (int i = 0; i < pokers.length; i++) {
PokerClass pokerClass = new PokerClass();
pokerClass.setPoker(pokers[i]);
pokerClass.setDesignColor(designColor[i]);
pokerClasses.add(pokerClass);
}
Comparator cmp = new MyComparator();
pokerClasses.sort(cmp);
return pokerClasses;
}
public static String pokerFormat(int poker) {
String data;
switch (poker) {
case 10:
data = "10";
break;
case 11:
data = "J";
break;
case 12:
data = "Q";
break;
case 13:
data = "K";
break;
case 14:
data = "A";
break;
case 15:
data = "2";
break;
default:
data = String.valueOf(poker);
break;
}
return data;
}
public static int pokerFormat2(String poker) {
int data;
switch (poker) {
case "10":
data = 10;
break;
case "J":
case "j":
data = 11;
break;
case "Q":
case "q":
data = 12;
break;
case "K":
case "k":
data = 13;
break;
case "A":
case "a":
data = 14;
break;
case "2":
data = 15;
break;
default:
data = Integer.valueOf(poker);
break;
}
return data;
}
static class CheckMsg {
private boolean bol;
private String msg;
private List<PokerClass> pokerClasses;
private List<PokerClass> putClasses;
public boolean getBol() {
return bol;
}
public void setBol(boolean bol) {
this.bol = bol;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<PokerClass> getPokerClasses() {
return pokerClasses;
}
public void setPokerClasses(List<PokerClass> pokerClasses) {
this.pokerClasses = pokerClasses;
}
public List<PokerClass> getPutClasses() {
return putClasses;
}
public void setPutClasses(List<PokerClass> putClasses) {
this.putClasses = putClasses;
}
}
static class PokerClass {
int poker;
String designColor;
public int getPoker() {
return poker;
}
public void setPoker(int poker) {
this.poker = poker;
}
public String getDesignColor() {
return designColor;
}
public void setDesignColor(String designColor) {
this.designColor = designColor;
}
}
}