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

分类: 365bet滚球网站 时间: 2025-08-25 21:25:08 作者: admin 阅读: 5958
斗地主+三人+叫地主+作弊(可设置)

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

版权声明原作品版权声明本文版权声明

一、相关文章二、添加功能三、运行展示有作弊无作弊

四、代码代码框架其余代码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 player;//玩家

private static List left;//上家

private static List right;//下家

private static CardProduct last = CardProduct.createNullType();

private static List holeCards = new ArrayList<>();//底牌

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 list = new 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 searchIndexByNum(List list, List card) {

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 indexes = new ArrayList<>();

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 list) {

int power = 0;

boolean hasCc = false;

List groups = CardUtils.createGroup(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 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 CallLandlord(List left, List player, List right, boolean lc, boolean mc, boolean rc) {

System.out.println("=====================================叫地主阶段=====================================");

String ss;

if (lc) {

ss = "上家";

} else if (mc) {

ss = "玩家";

} else {

ss = "下家";

}

System.out.println(ss + "有地主牌" + Suit(specialCard) + specialCard + "," + ss + "先叫地主");

List result = new ArrayList<>();

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 booleans = CallLandlord(left, player, right, lCall, mCall, rCall);

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 indexes = searchIndexByNum(player, CardUtils.CreateCards(line));

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 indexes = searchIndexByNum(player, CardUtils.CreateCards(line));

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;

}

}

}

}

}

相关推荐