Commit 35106b1a authored by fallenstardust's avatar fallenstardust

卡组编辑添加算法:根据genesys总分控制添加卡片数量

筛选条件选择genesys时只展示有信用分的卡牌列表,不显示禁卡
parent 53022b98
...@@ -167,7 +167,7 @@ public class CardLoader implements ICardSearcher { ...@@ -167,7 +167,7 @@ public class CardLoader implements ICardSearcher {
@Override @Override
public List<Card> sort(List<Card> cards) { public List<Card> sort(List<Card> cards) {
Collections.sort(cards, CardSort.ASC); cards.sort(CardSort.ASC);
return cards; return cards;
} }
...@@ -210,6 +210,8 @@ public class CardLoader implements ICardSearcher { ...@@ -210,6 +210,8 @@ public class CardLoader implements ICardSearcher {
ids = limitList.limit; ids = limitList.limit;
} else if (cardLimitType == LimitType.SemiLimit) { } else if (cardLimitType == LimitType.SemiLimit) {
ids = limitList.semiLimit; ids = limitList.semiLimit;
} else if (cardLimitType == LimitType.GeneSys) {
ids = limitList.getGeneSysCodeList();
} else if (cardLimitType == LimitType.All) { } else if (cardLimitType == LimitType.All) {
ids = limitList.getCodeList(); ids = limitList.getCodeList();
} else { } else {
......
...@@ -73,6 +73,7 @@ import java.util.ArrayList; ...@@ -73,6 +73,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
...@@ -1131,13 +1132,63 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -1131,13 +1132,63 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
LimitList limitList = mDeckAdapater.getLimitList(); LimitList limitList = mDeckAdapater.getLimitList();
int id = cardInfo.getGameCode(); int id = cardInfo.getGameCode();
Integer count = mCount.get(id); Integer count = mCount.get(id);
if (limitList == null) { if (limitList == null) {
return count != null && count <= 3; return count != null && count <= 3;
} }
if (limitList.check(cardInfo, LimitType.Forbidden)) { if (limitList.check(cardInfo, LimitType.Forbidden)) {
YGOUtil.showTextToast(getString(R.string.tip_card_max, 0)); YGOUtil.showTextToast(getString(R.string.tip_card_max, 0));
return false; return false;
} }
if (limitList.check(cardInfo, LimitType.GeneSys)) {
// 检查GeneSys信用分限制
if (limitList.getCredits() != null && limitList.getCreditLimits() != null) {
// 获取当前卡片的信用分值
Integer cardCreditValue = limitList.getCredits().get(cardInfo.Alias == 0 ? cardInfo.Code : cardInfo.Alias);
if (cardCreditValue != null && cardCreditValue > 0) {
// 计算当前卡组中所有GeneSys卡片的信用分总和
int totalCredit = 0;
SparseArray<Integer> cardCounts = mDeckAdapater.getCardCount();
for (int i = 0; i < cardCounts.size(); i++) {
int cardId = cardCounts.keyAt(i);
int cardQuantity = cardCounts.valueAt(i);
// 检查这张卡是否是GeneSys卡
if (limitList.getCredits().containsKey(cardId)) {
Integer creditValue = limitList.getCredits().get(cardId);
if (creditValue != null) {
// 如果是当前要添加的卡片,需要考虑添加后的数量
if (cardId == cardInfo.Code || cardId == cardInfo.Alias) {
totalCredit += creditValue * (cardQuantity + 1);
} else {
totalCredit += creditValue * cardQuantity;
}
}
}
}
// 检查是否超过信用分上限
boolean overLimit = false;
for (Map.Entry<String, Integer> entry : limitList.getCreditLimits().entrySet()) {
Integer creditLimit = entry.getValue();
if (creditLimit != null && totalCredit > creditLimit) {
overLimit = true;
break;
}
}
if (overLimit) {
YGOUtil.showTextToast("超过总分上限:" + limitList.getCreditLimits().entrySet());
return false;
}
}
}
}
if (count != null) { if (count != null) {
if (limitList.check(cardInfo, LimitType.Limit)) { if (limitList.check(cardInfo, LimitType.Limit)) {
if (count >= 1) { if (count >= 1) {
...@@ -1766,7 +1817,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -1766,7 +1817,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
}); });
} else { } else {
Log.d("seesee",deckFile.getPathFile().getAbsolutePath()); Log.d("seesee", deckFile.getPathFile().getAbsolutePath());
loadDeckFromFile(deckFile.getPathFile()); loadDeckFromFile(deckFile.getPathFile());
ll_click_like.setVisibility(View.GONE); ll_click_like.setVisibility(View.GONE);
} }
......
...@@ -4,6 +4,7 @@ import java.util.ArrayList; ...@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
import ocgcore.enums.LimitType; import ocgcore.enums.LimitType;
...@@ -54,7 +55,7 @@ public class LimitList { ...@@ -54,7 +55,7 @@ public class LimitList {
public List<String> getStringForbidden() { public List<String> getStringForbidden() {
List<String> strFobidden = new ArrayList<>(); List<String> strFobidden = new ArrayList<>();
for (int i = 0; i< forbidden.size(); i++) { for (int i = 0; i < forbidden.size(); i++) {
strFobidden.add(forbidden.get(i).toString()); strFobidden.add(forbidden.get(i).toString());
} }
return strFobidden; return strFobidden;
...@@ -62,7 +63,7 @@ public class LimitList { ...@@ -62,7 +63,7 @@ public class LimitList {
public List<String> getStringLimit() { public List<String> getStringLimit() {
List<String> strLimit = new ArrayList<>(); List<String> strLimit = new ArrayList<>();
for (int i = 0; i< limit.size(); i++) { for (int i = 0; i < limit.size(); i++) {
strLimit.add(limit.get(i).toString()); strLimit.add(limit.get(i).toString());
} }
return strLimit; return strLimit;
...@@ -70,7 +71,7 @@ public class LimitList { ...@@ -70,7 +71,7 @@ public class LimitList {
public List<String> getStringSemiLimit() { public List<String> getStringSemiLimit() {
List<String> strSemiLimit = new ArrayList<>(); List<String> strSemiLimit = new ArrayList<>();
for (int i = 0; i< semiLimit.size(); i++) { for (int i = 0; i < semiLimit.size(); i++) {
strSemiLimit.add(semiLimit.get(i).toString()); strSemiLimit.add(semiLimit.get(i).toString());
} }
return strSemiLimit; return strSemiLimit;
...@@ -133,18 +134,34 @@ public class LimitList { ...@@ -133,18 +134,34 @@ public class LimitList {
if (allList.isEmpty()) { if (allList.isEmpty()) {
allList.addAll(forbidden); allList.addAll(forbidden);
allList.addAll(limit); allList.addAll(limit);
allList.addAll(semiLimit);; allList.addAll(semiLimit);
;
allList.addAll(credits.keySet()); allList.addAll(credits.keySet());
} }
return allList; return allList;
} }
/**
* 获取按信用分值卡牌ID列表(不含禁止卡)
*
* @return 包含信用分卡牌ID列表
*/
public List<Integer> getGeneSysCodeList() {
if (credits == null || credits.isEmpty()) {//防止空指针异常
return new ArrayList<>();
}
return new ArrayList<>(credits.keySet());
}
public boolean check(Card cardInfo, LimitType type) { public boolean check(Card cardInfo, LimitType type) {
return check(cardInfo.Code, cardInfo.Alias, type); return check(cardInfo.Code, cardInfo.Alias, type);
} }
/** /**
* 判断入参code或alias对应的卡片是否属于限制类型x,x由type确定 * 判断入参code或alias对应的卡片是否属于限制类型x,x由type确定
*
* @param code * @param code
* @param alias * @param alias
* @param type * @param type
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment