斗地主+三人+叫地主+作弊(可设置)

斗地主+三人+叫地主+作弊(可设置)
版权声明原作品版权声明本文版权声明
一、相关文章二、添加功能三、运行展示有作弊无作弊
四、代码代码框架其余代码TipPlayWithLandlord_CallPoints_NoTip_V1
版权声明
原作品版权声明
java斗地主游戏开发 算法思路讲解 转载请注明出处 若本文侵犯原作者的版权,联系邮箱3063494684@qq.com删除本文
本文版权声明
代码改编于两人版 java斗地主游戏开发 算法思路讲解
1、本文所有内容文字资料,版权均属作者个人所有, 任何媒体、网站或个人不得复制内容用于发布/发表。 引用必须注明来源
2、本文下载仅供个人学习或研究,不得在任何网站以任何形式上传。
3、转载、链接、转贴必须注明来源,并且不能用作商用,只能用于学习或研究
除注明来源外,以下内容亦不可任意转载: a.本文所指向的非本人内容的相关链接内容; b.已作出不得转载或未经许可不得转载声明的内容; c.其他法律不允许或本人认为不适合的内容。
转载或引用本人内容不得进行如下活动: a.损害本人或他人利益; b.任何违法行为; c.任何可能破坏公秩良俗的行为; d.擅自同意他人继续转载、引用本文内容;
4、对不遵守本声明或其他违法、恶意使用本人内容者,本人保留追究其法律责任的权利。
署名:日星月云
一、相关文章
斗地主三人版 斗地主+三人+叫地主 斗地主+三人+叫地主+作弊(可设置) 斗地主+三人+叫地主+作弊(可设置)+积分属性 斗地主+三人+叫地主+作弊(可设置)+积分属性+记牌器(可设置)
二、添加功能
作弊Tip类 设置了有无作弊 在main方法中 可以通过修改创建Tip对象的构造器来实现
设置 1 主动显示底牌(默认不显示为true)设置23 主动显示上家和下家手中的牌及其牌数(默认不显示为true)设置45 偷看下显示上家和下家手中的牌及其牌数(默认显示为true)
有作弊Tip tip = new Tip(true, true, true,false,false); 无作弊Tip tip = new Tip(false, false, false,false,false);
三、运行展示
有作弊
斗地主+三人+叫地主
无作弊
"C:\Program Files\Java\jdk-15.0.1\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2021.1\lib\idea_rt.jar=8124:E:\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\lenovo\IdeaProjects\DouDiZhu\out\production\DouDiZhu;C:\Users\lenovo\.m2\repository\junit\junit\4.13.1\junit-4.13.1.jar;C:\Users\lenovo\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\lenovo\.m2\repository\org\junit\jupiter\junit-jupiter\5.7.0\junit-jupiter-5.7.0.jar;C:\Users\lenovo\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.7.0\junit-jupiter-api-5.7.0.jar;C:\Users\lenovo\.m2\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;C:\Users\lenovo\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\lenovo\.m2\repository\org\junit\platform\junit-platform-commons\1.7.0\junit-platform-commons-1.7.0.jar;C:\Users\lenovo\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.7.0\junit-jupiter-params-5.7.0.jar;C:\Users\lenovo\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0\junit-jupiter-engine-5.7.0.jar;C:\Users\lenovo\.m2\repository\org\junit\platform\junit-platform-engine\1.7.0\junit-platform-engine-1.7.0.jar com.ddz.PlayWithLandlord_CallPoints_NoTip_V1
地主牌为♦10
您的扑克牌:[2, A, A, Q, Q, Q, J, J, 10, 10, 9, 8, 7, 5, 5, 5, 3]
=====================================叫地主阶段=====================================
玩家有地主牌♦10,玩家先叫地主
===玩家叫地主===
输入0,不叫 / 输入1,1分 / 输入2,2分 / 输入3,3分 -----> 0
不叫
===下家叫地主===
2分
===上家叫地主===
不叫
======下家是地主======
===================================================================================
======================================出牌阶段======================================
=======================下家主动出牌=======================
下家主动出牌:[9, 8, 7, 6, 5, 4, 3]
下家出牌:[9, 8, 7, 6, 5, 4, 3]
=============上家=================
上家不要
=============玩家=================
上一次出牌:CardProduct{list=[9, 8, 7, 6, 5, 4, 3], type=顺子, maxCard=9, len=7, group=[(num=6, sum=1), (num=5, sum=1), (num=4, sum=1), (num=3, sum=1), (num=2, sum=1), (num=1, sum=1), (num=0, sum=1)]}
您当前的扑克牌:[2, A, A, Q, Q, Q, J, J, 10, 10, 9, 8, 7, 5, 5, 5, 3]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
?
提示:[]
=============玩家=================
上一次出牌:CardProduct{list=[9, 8, 7, 6, 5, 4, 3], type=顺子, maxCard=9, len=7, group=[(num=6, sum=1), (num=5, sum=1), (num=4, sum=1), (num=3, sum=1), (num=2, sum=1), (num=1, sum=1), (num=0, sum=1)]}
您当前的扑克牌:[2, A, A, Q, Q, Q, J, J, 10, 10, 9, 8, 7, 5, 5, 5, 3]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
.
=======================下家主动出牌=======================
下家主动出牌:[6, 6, 6, K, K]
下家出牌:[6, 6, 6, K, K]
=============上家=================
上家不要
=============玩家=================
上一次出牌:CardProduct{list=[6, 6, 6, K, K], type=三带一对, maxCard=6, len=5, group=[(num=3, sum=3), (num=10, sum=2)]}
您当前的扑克牌:[2, A, A, Q, Q, Q, J, J, 10, 10, 9, 8, 7, 5, 5, 5, 3]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
qqq11
出牌成功:CardProduct{list=[Q, Q, Q, A, A], type=三带一对, maxCard=Q, len=5, group=[(num=9, sum=3), (num=11, sum=2)]}
=============下家=================
下家不要
=============上家=================
上家不要
=======================玩家主动出牌=======================
您当前的扑克牌:[2, J, J, 10, 10, 9, 8, 7, 5, 5, 5, 3]
请您出牌:(输入?提示 输入,偷看电脑的牌)
5553
出牌成功:CardProduct{list=[5, 5, 5, 3], type=三带一, maxCard=5, len=4, group=[(num=2, sum=3), (num=0, sum=1)]}
=============下家=================
下家不要
=============上家=================
上家不要
=======================玩家主动出牌=======================
您当前的扑克牌:[2, J, J, 10, 10, 9, 8, 7]
请您出牌:(输入?提示 输入,偷看电脑的牌)
7890j
出牌成功:CardProduct{list=[J, 10, 9, 8, 7], type=顺子, maxCard=J, len=5, group=[(num=8, sum=1), (num=7, sum=1), (num=6, sum=1), (num=5, sum=1), (num=4, sum=1)]}
=============下家=================
下家不要
=============上家=================
上家不要
=======================玩家主动出牌=======================
您当前的扑克牌:[2, J, 10]
请您出牌:(输入?提示 输入,偷看电脑的牌)
0
出牌成功:CardProduct{list=[10], type=单牌, maxCard=10, len=1, group=[(num=7, sum=1)]}
玩家就剩2牌啦!!!
=============下家=================
下家出牌:[J]
=============上家=================
上家出牌:[K]
=============玩家=================
上一次出牌:CardProduct{list=[K], type=单牌, maxCard=K, len=1, group=[(num=10, sum=1)]}
您当前的扑克牌:[2, J]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
2
出牌成功:CardProduct{list=[2], type=单牌, maxCard=2, len=1, group=[(num=12, sum=1)]}
玩家就剩1牌啦!!!
=============下家=================
下家出牌:[大王]
=============上家=================
上家不要
=============玩家=================
上一次出牌:CardProduct{list=[大王], type=单牌, maxCard=大王, len=1, group=[(num=13, sum=1)]}
您当前的扑克牌:[J]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
.
=======================下家主动出牌=======================
下家主动出牌:[3]
下家出牌:[3]
=============上家=================
上家出牌:[7]
=============玩家=================
上一次出牌:CardProduct{list=[7], type=单牌, maxCard=7, len=1, group=[(num=4, sum=1)]}
您当前的扑克牌:[J]
请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)
j
出牌成功:CardProduct{list=[J], type=单牌, maxCard=J, len=1, group=[(num=8, sum=1)]}
===================================================================================
你赢啦!
Process finished with exit code 0
四、代码
代码框架
其余代码
斗地主+三人+叫地主
Tip
package com.ddz;
/**
* 用于作弊
* 设置 主动显示底牌(默认不显示为true)
* 设置 主动显示上家和下家手中的牌及其牌数(默认不显示为true)
* 设置 偷看下显示上家和下家手中的牌及其牌数(默认显示为true)
*/
public class Tip {
public boolean NoShowsHoleCards=true;
public boolean NoShowsCards=true;
public boolean NoShowsCardsNum=true;
public boolean ShowsCardsInTip=true;
public boolean ShowsCardsNumInTip=true;
public Tip() {
}
public Tip(boolean noShowsHoleCards, boolean noShowsCards, boolean noShowsCardsNum) {
NoShowsHoleCards = noShowsHoleCards;
NoShowsCards = noShowsCards;
NoShowsCardsNum = noShowsCardsNum;
}
public Tip(boolean noShowsHoleCards, boolean noShowsCards, boolean noShowsCardsNum, boolean showsCardsInTip, boolean showsCardsNumInTip) {
NoShowsHoleCards = noShowsHoleCards;
NoShowsCards = noShowsCards;
NoShowsCardsNum = noShowsCardsNum;
ShowsCardsInTip = showsCardsInTip;
ShowsCardsNumInTip = showsCardsNumInTip;
}
}
PlayWithLandlord_CallPoints_NoTip_V1
package com.ddz;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
* Cc代表大小王,0代表10
* 大小写jqk都可以代表JQK
* Aa1都代表A
*
* 多少副牌sum、是否包含345contains345可以在main方法中更改
*
* 四炸<双王炸<五炸<六炸<三王炸<七炸<八炸<四王炸
* 并且[大王, 大王]是可以打赢[大王, 小王]和[小王, 小王]的
*/
/**
* 斗地主+三人+叫地主+设置无作弊+V1
*/
public class PlayWithLandlord_CallPoints_NoTip_V1 {
private static List
private static List
private static List
private static CardProduct last = CardProduct.createNullType();
private static List
private static Card specialCard;//地主牌,最开始叫地主
/**
* 发牌
*
* @param sum 多少副牌
* @param contains345 是否包含345
*/
public static void licensing(int sum, boolean contains345) {
player = new ArrayList<>();
left = new ArrayList<>();
right = new ArrayList<>();
ArrayList
for (int i = 0; i < sum; i++) {
for (int j = contains345 ? GameConstants.ID_3_1 : GameConstants.ID_6_1; j < 54; j++) {
list.add(j);
}
}
int specialId;
while (true) {
specialId = (int) (Math.random() * list.size());
if (contains345 == false) {
if (specialId >= GameConstants.ID_3_1 && specialId < GameConstants.ID_6_1) {
continue;
}
}
specialCard = new Card(specialId);
break;
}
//底牌
while (holeCards.size() < 3) {
int cardId = (int) (Math.random() * list.size());
if (specialId != cardId) {
Card card = new Card(list.remove(cardId));
holeCards.add(card);
}
}
//发牌
while (list.size() > 0) {
player.add(new Card(list.remove((int) (Math.random() * list.size()))));
left.add(new Card(list.remove((int) (Math.random() * list.size()))));
right.add(new Card(list.remove((int) (Math.random() * list.size()))));
}
player.sort((o1, o2) -> o2.id - o1.id);
left.sort((o1, o2) -> o2.id - o1.id);
right.sort((o1, o2) -> o2.id - o1.id);
}
public static List
if (card.size() > list.size()) return null;
int[] cardNum = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
cardNum[i] = list.get(i).num;
}
List
for (int i = 0; i < card.size(); i++) {
if (card.get(i).num > GameConstants.NUM_2) {
final int id = card.get(i).id;
for (int j = 0; j < list.size(); j++) {
if (card.get(i).id == list.get(j).id && !indexes.contains(j)) {
indexes.add(j);
break;
}
}
} else {
for (int j = 0; j < cardNum.length; j++) {
if (card.get(i).num == cardNum[j] && !indexes.contains(j)) {
indexes.add(j);
break;
}
}
}
}
if (indexes.size() != card.size()) return null;
return indexes;
}
//判断花色
public static String Suit(Card card) {
if (card.id==GameConstants.ID_JOKER_1||card.id==GameConstants.ID_JOKER_2){
return "";
}
int suitId = card.id % 4;
switch (suitId) {
case 0:
return "♥";
case 1:
return "♦";
case 2:
return "♣";
case 3:
return "♠";
}
return null;
}
/**
* 5--一分 7--两分 10--三分
* 预估玩家的初始手牌的牌力
* 炸弹分为5点
* 对于7890j炸弹为4(因为容易被拆)
* 对于王炸为8分
* // * 10点--一分 16---两分 20--三分
* // * 对于3456QKA2C的炸弹分依次+1(3炸为5分...C炸为13分)
* 三条2是3分
* 三条是1点
* 对2是2点
* C是4分
* c是3分
*
* @param list 玩家的初始手牌
* @return 玩家的初始手牌的牌力
*/
public static int CardsPower(List
int power = 0;
boolean hasCc = false;
List
Collections.sort(groups, (o1, o2) -> {
//order by sum desc,num desc
final int o = o2.sum - o1.sum;
if (o != 0) return o;
return o2.num - o1.num;
});
for (CardGroup cardGroup : groups) {
if (cardGroup.sum == 4) {
//大分
// int p = 5;
// switch (cardGroup.num) {
// case GameConstants.NUM_3:
// p += 0;
// case GameConstants.NUM_4:
// p += 1;
// case GameConstants.NUM_5:
// p += 1;
// case GameConstants.NUM_6:
// p += 1;
// break;
// case GameConstants.NUM_7:
// case GameConstants.NUM_8:
// case GameConstants.NUM_9:
// case GameConstants.NUM_10:
// case GameConstants.NUM_J:
// p=-1;
// break;
// case GameConstants.NUM_Q:
// p += 4;
// case GameConstants.NUM_K:
// p += 1;
// case GameConstants.NUM_A:
// p += 1;
// case GameConstants.NUM_2:
// p += 1;
// break;
//
// }
// power+=p;
switch (cardGroup.num) {
case GameConstants.NUM_7:
case GameConstants.NUM_8:
case GameConstants.NUM_9:
case GameConstants.NUM_10:
case GameConstants.NUM_J:
power += 4;
break;
default:
power += 5;
break;
}
} else if (cardGroup.sum == 3) {
if (cardGroup.num == GameConstants.NUM_2) {
power += 3;
} else {
power += 1;
}
} else if (cardGroup.sum == 2) {
if (cardGroup.num == GameConstants.NUM_2) {
power += 2;
} else if (cardGroup.num == GameConstants.NUM_JOKER) {
hasCc = true;
power += 8;
}
}
}
if (hasCc) {
} else if (list.contains(new Card(GameConstants.ID_JOKER_1))) {
power += 3;
} else if (list.contains(new Card(GameConstants.ID_JOKER_2))) {
power += 4;
}
return power;
}
public static int point(List
int power = CardsPower(list);
if (power < 5) {
return 0;
} else if (power < 7) {
return 1;
} else if (power < 10) {
return 2;
} else {
return 3;
}
}
/**
* @param left 上家的牌
* @param player 玩家的牌
* @param right 下家的牌
* @param lc 上家是否拿地主牌,先叫
* @param mc 玩家是否拿地主牌,先叫
* @param rc 下家是否拿地主牌,先叫
* @return 返回上家、玩家、下家是否成为地主的List
*/
public static List
System.out.println("=====================================叫地主阶段=====================================");
String ss;
if (lc) {
ss = "上家";
} else if (mc) {
ss = "玩家";
} else {
ss = "下家";
}
System.out.println(ss + "有地主牌" + Suit(specialCard) + specialCard + "," + ss + "先叫地主");
List
boolean calling = true;
boolean lFirstCall = false;
boolean mFirstCall = false;
boolean rFirstCall = false;
boolean lCall0 = false;
boolean mCall0 = false;
boolean rCall0 = false;
boolean lHasCalled = false;
boolean mHasCalled = false;
boolean rHasCalled = false;
int lPoint = 0;
int mPoint = 0;
int rPoint = 0;
int lastPoint = -1;
while (calling) {
if (lc) {
if (mFirstCall == false && rFirstCall == false) {
lFirstCall = true;
}
System.out.println("===上家叫地主===");
lPoint = point(left);
if (lPoint > lastPoint) {
lHasCalled = true;
switch (lPoint) {
case 0:
System.out.println("不叫");
lastPoint = 0;
lCall0 = true;
lc = false;
mc = true;
break;
case 1:
System.out.println("1分");
lastPoint = 1;
lc = false;
mc = true;
break;
case 2:
System.out.println("2分");
lastPoint = 2;
lc = false;
mc = true;
break;
case 3:
System.out.println("3分");
lastPoint = 3;
lc = false;
break;
}
} else {
System.out.println("不叫");
lPoint = 0;
lCall0 = true;
lc = false;
lHasCalled = true;
mc = true;
}
}
if (lastPoint == 3 || (lCall0 && mCall0 && rCall0)) {
break;
} else if (lHasCalled && mHasCalled && rHasCalled) {
break;
}
while (mc) {
if (lFirstCall == false && rFirstCall == false) {
mFirstCall = true;
}
System.out.println("===玩家叫地主===");
Scanner scanner = new Scanner(System.in);
String tip = "输入0,不叫 / ";
switch (lastPoint) {
case -1:
tip = "输入0,不叫 / ";
case 0:
tip = tip + "输入1,1分 / ";
case 1:
tip = tip + "输入2,2分 / ";
case 2:
tip = tip + "输入3,3分 ";
}
System.out.print(tip + " -----> ");
String s = scanner.nextLine();
if (!s.equals("0") && !s.equals("1") && !s.equals("2") && !s.equals("3")) {
continue;
}
mPoint = Integer.parseInt(s);
if (mPoint <= lastPoint) {
if (mPoint != 0) {
continue;
}
}
switch (mPoint) {
case 0:
System.out.println("不叫");
if (lastPoint == 0 || lastPoint == -1) {//此条件为上一次叫或玩家首次不叫,否则玩家不叫不会改变上一次的叫分
lastPoint = 0;
}
mCall0 = true;
mc = false;
mHasCalled = true;
rc = true;
break;
case 1:
System.out.println("1分");
lastPoint = 1;
mc = false;
mHasCalled = true;
rc = true;
break;
case 2:
System.out.println("2分");
lastPoint = 2;
mc = false;
mHasCalled = true;
rc = true;
break;
case 3:
System.out.println("3分");
lastPoint = 3;
mc = false;
mHasCalled = true;
break;
}
}
if (lastPoint == 3 || (lCall0 && mCall0 && rCall0)) {
break;
} else if (lHasCalled && mHasCalled && rHasCalled) {
break;
}
if (rc) {
if (mFirstCall == false && lFirstCall == false) {
rFirstCall = true;
}
System.out.println("===下家叫地主===");
rPoint = point(right);
if (rPoint > lastPoint) {
rHasCalled = true;
switch (rPoint) {
case 0:
System.out.println("不叫");
lastPoint = 0;
rCall0 = true;
rc = false;
lc = true;
break;
case 1:
System.out.println("1分");
lastPoint = 1;
rc = false;
lc = true;
break;
case 2:
System.out.println("2分");
lastPoint = 2;
rc = false;
lc = true;
break;
case 3:
System.out.println("3分");
rc = false;
lc = true;
lastPoint = 3;
break;
}
} else {
System.out.println("不叫");
rPoint = 0;
rCall0 = true;
lc = true;
rc = false;
rHasCalled = true;
}
}
if (lastPoint == 3 || (lCall0 && mCall0 && rCall0)) {
calling = false;
} else if (lHasCalled && mHasCalled && rHasCalled) {
break;
}
}
if (lCall0 && mCall0 && rCall0) {
if (lFirstCall) {
lPoint = 4;
} else if (mFirstCall) {
mPoint = 4;
} else if (rFirstCall) {
rPoint = 4;
}
}
boolean LandlordIsL = lPoint > mPoint && lPoint > rPoint;
boolean LandlordIsM = lPoint < mPoint && mPoint > rPoint;
boolean LandlordIsR = rPoint > mPoint && lPoint < rPoint;
if (LandlordIsL) {
System.out.println("======上家是地主======");
} else if (LandlordIsM) {
System.out.println("======玩家是地主======");
} else {
System.out.println("======下家是地主======");
}
result.add(LandlordIsL);
result.add(LandlordIsM);
result.add(LandlordIsR);
System.out.println("===================================================================================");
return result;
}
public static void main(String[] args) {
Tip tip = new Tip(true, true, true,false,false);
int sum = 1;//多少副牌
boolean contains345 = true;//是否包含345
licensing(sum, contains345);
System.out.println("地主牌为" + Suit(specialCard) + specialCard);
if (!tip.NoShowsHoleCards) {
System.out.println("底牌为" + holeCards);
}
System.out.println("您的扑克牌:" + player);
if (!tip.NoShowsCards) {
System.out.println("上家扑克牌:" + left);
System.out.println("下家扑克牌:" + right);
}
//测试,显示牌力
// System.out.println(CardsPower(player));
// System.out.println(CardsPower(left));
// System.out.println(CardsPower(right));
boolean playing = true;
boolean toLeft = false;//出牌
boolean toMe = false;//我出
boolean toRight = false;
boolean lCall = left.contains(specialCard);
boolean mCall = player.contains(specialCard);
boolean rCall = right.contains(specialCard);
List
boolean l = booleans.get(0);//成为地主并且主动出牌
boolean m = booleans.get(1);
boolean r = booleans.get(2);
if (l) {
left.addAll(holeCards);
left.sort((o1, o2) -> o2.id - o1.id);
} else if (m) {
player.addAll(holeCards);
player.sort((o1, o2) -> o2.id - o1.id);
} else {
right.addAll(holeCards);
right.sort((o1, o2) -> o2.id - o1.id);
}
boolean isMe = false;//me获胜
System.out.println("======================================出牌阶段======================================");
Scanner scanner = new Scanner(System.in);
while (playing) {
if (l) {
System.out.println("=======================上家主动出牌=======================");
if (!tip.NoShowsCards) {
System.out.println("上家当前扑克牌:" + left);
}
last = CardProduct.createNullType();
Prompt prompt = new Prompt(left, last);
if (prompt.prompt.size() > 0) {
CardProducts cardProducts = CardsFactory.builder(prompt.prompt.get(0));
int index = cardProducts.isGreaterThan(last);
if (index >= 0) {
last = cardProducts.list.get(index);
left.removeAll(last.list);
System.out.println("上家主动出牌:" + last.list);
if (!tip.NoShowsCardsNum) {
System.out.println("上家剩余牌数:" + left.size());
}
if (left.size() == 2) {
System.out.println("上家就剩2牌啦!!!");
} else if (left.size() == 1) {
System.out.println("上家就剩1牌啦!!!");
} else if (left.size() == 0) {
System.out.println("=======================================================================");
System.out.println("上家赢了!");
System.out.println("你输啦!");
break;
}
toLeft = false;
toMe = true;
}
}
}
if (toLeft) {
System.out.println("=============上家=================");
if (!tip.NoShowsCards) {
System.out.println("上家当前扑克牌:" + left);
}
Prompt prompt = new Prompt(left, last);
if (prompt.prompt.size() > 0) {
CardProducts cardProducts = CardsFactory.builder(prompt.prompt.get(0));
int index = cardProducts.isGreaterThan(last);
if (index >= 0) {
last = cardProducts.list.get(index);
left.removeAll(last.list);
System.out.println("上家出牌:" + last.list);
if (!tip.NoShowsCardsNum) {
System.out.println("上家剩余牌数:" + left.size());
}
if (left.size() == 2) {
System.out.println("上家就剩2牌啦!!!");
} else if (left.size() == 1) {
System.out.println("上家就剩1牌啦!!!");
} else if (left.size() == 0) {
System.out.println("=======================================================================");
System.out.println("上家赢了!");
System.out.println("你输啦!");
break;
}
m = false;
r = false;
l = true;
toLeft = false;
toMe = true;
}
} else {
System.out.println("上家不要");
toLeft = false;
toMe = true;
}
}
while (m) {
System.out.println("=======================玩家主动出牌=======================");
last = CardProduct.createNullType();
System.out.println("您当前的扑克牌:" + player);
System.out.println("请您出牌:(输入?提示 输入,偷看电脑的牌)");
String line = scanner.nextLine();
if (line == null || line.length() == 0) {
continue;
} else if (".".equals(line)){
System.out.println("主动出牌,不能不出");
continue;
}
else if ("?".equals(line)) {
System.out.println("提示:" + new Prompt(player, last).prompt);
continue;
} else if (",".equals(line)) {
if (tip.ShowsCardsInTip) {
System.out.println("上家当前扑克牌:" + left);
System.out.println("下家当前扑克牌:" + right);
}
if (tip.ShowsCardsNumInTip) {
System.out.println("上家剩余牌数:" + left.size());
System.out.println("下家剩余牌数:" + right.size());
}
if (!tip.ShowsCardsInTip||!tip.ShowsCardsNumInTip){
System.out.println("尚未开启此功能");
}
continue;
}
List
if (indexes == null) {
System.out.println("您输入的扑克牌无效请重新输入");
continue;
}
CardProducts cardProducts = CardsFactory.builder(CardUtils.getCardsByIndexes(player, indexes));
int index = cardProducts.isGreaterThan(last);
// if (index >= 0) {
CardProduct newCardProduct = cardProducts.list.get(index);
last = newCardProduct;
player.removeAll(last.list);
System.out.println("出牌成功:" + last);
if (player.size() == 2) {
System.out.println("玩家就剩2牌啦!!!");
} else if (player.size() == 1) {
System.out.println("玩家就剩1牌啦!!!");
} else if (player.size() == 0) {
System.out.println("=======================================================================");
System.out.println("你赢啦!");
isMe = true;
break;
}
toMe = false;
toRight = !toRight;
break;
// } else {
// System.out.println("不符合游戏规则:" + cardProducts);
//
// continue;
// }
}
if (isMe) {
break;
}
while (toMe) {
System.out.println("=============玩家=================");
System.out.println("上一次出牌:" + last);
System.out.println("您当前的扑克牌:" + player);
System.out.println("请您出牌:(输入.不出 输入?提示 输入,偷看电脑的牌)");
String line = scanner.nextLine();
if (line == null || line.length() == 0) {
continue;
} else if (".".equals(line)) {
toMe = false;
toRight = true;
break;
} else if ("?".equals(line)) {
System.out.println("提示:" + new Prompt(player, last).prompt);
continue;
} else if (",".equals(line)) {
if (tip.ShowsCardsInTip) {
System.out.println("上家当前扑克牌:" + left);
System.out.println("下家当前扑克牌:" + right);
}
if (tip.ShowsCardsNumInTip) {
System.out.println("上家剩余牌数:" + left.size());
System.out.println("下家剩余牌数:" + right.size());
}
if (!tip.ShowsCardsInTip||!tip.ShowsCardsNumInTip){
System.out.println("尚未开启此功能");
}
continue;
} else {
List
if (indexes == null) {
System.out.println("您输入的扑克牌无效请重新输入");
continue;
}
CardProducts cardProducts = CardsFactory.builder(CardUtils.getCardsByIndexes(player, indexes));
int index = cardProducts.isGreaterThan(last);
if (index >= 0) {
CardProduct newCardProduct = cardProducts.list.get(index);
last = newCardProduct;
player.removeAll(last.list);
System.out.println("出牌成功:" + last);
if (player.size() == 2) {
System.out.println("玩家就剩2牌啦!!!");
} else if (player.size() == 1) {
System.out.println("玩家就剩1牌啦!!!");
} else if (player.size() == 0) {
System.out.println("===================================================================================");
System.out.println("你赢啦!");
isMe = true;
break;
}
l = false;
r = false;
m = true;
toMe = false;
toRight = true;
} else {
System.out.println("不符合游戏规则:" + cardProducts);
continue;
}
}
}
if (isMe) {
break;
}
if (r) {
System.out.println("=======================下家主动出牌=======================");
if (!tip.NoShowsCards) {
System.out.println("下家当前扑克牌:" + right);
}
last = CardProduct.createNullType();
Prompt prompt = new Prompt(right, last);
if (prompt.prompt.size() > 0) {
CardProducts cardProducts = CardsFactory.builder(prompt.prompt.get(0));
int index = cardProducts.isGreaterThan(last);
if (index >= 0) {
last = cardProducts.list.get(index);
right.removeAll(last.list);
System.out.println("下家主动出牌:" + last.list);
System.out.println("下家出牌:" + last.list);
if (!tip.NoShowsCardsNum) {
System.out.println("下家剩余牌数:" + right.size());
}
if (right.size() == 2) {
System.out.println("下家就剩2牌啦!!!");
} else if (right.size() == 1) {
System.out.println("上家就剩1牌啦!!!");
} else if (right.size() == 0) {
System.out.println("===================================================================================");
System.out.println("下家赢了!");
System.out.println("你输啦!");
break;
}
toRight = false;
toLeft = true;
}
}
}
if (toRight) {
System.out.println("=============下家=================");
if (!tip.NoShowsCards) {
System.out.println("下家当前扑克牌:" + right);
}
Prompt prompt = new Prompt(right, last);
if (prompt.prompt.size() > 0) {
CardProducts cardProducts = CardsFactory.builder(prompt.prompt.get(0));
int index = cardProducts.isGreaterThan(last);
if (index >= 0) {
last = cardProducts.list.get(index);
right.removeAll(last.list);
System.out.println("下家出牌:" + last.list);
if (!tip.NoShowsCardsNum) {
System.out.println("下家剩余牌数:" + right.size());
}
if (right.size() == 2) {
System.out.println("上家就剩2牌啦!!!");
} else if (right.size() == 1) {
System.out.println("上家就剩1牌啦!!!");
} else if (right.size() == 0) {
System.out.println("===================================================================================");
System.out.println("下家赢了!");
System.out.println("你输啦!");
break;
}
l = false;
m = false;
r = true;
toRight = false;
toLeft = true;
}
} else {
System.out.println("下家不要");
toRight = false;
toLeft = true;
}
}
}
}
}