【发布时间】:2015-04-09 23:30:48
【问题描述】:
我一直在用 C++ 创建扑克,我注意到在我确定(或者我认为)玩家的手牌后,它总是显示为皇家同花顺(或 9,就手牌排名而言)。我对其进行了测试,结果发现用于确定手牌的 if 语句被跳过了。为什么这些语句没有注册,如何解决?附言我知道这段代码有点长,如果你不想看,请继续。
int hand_ranking = 0;
bool one_pair_bool;
int one_pair;
bool two_pair_bool;
int two1_pair;
int two2_pair;
if (min_all == min2_all){
one_pair = min_all;
one_pair_bool = true;
if (mid_card == max2_all){
two_pair_bool = true;
two1_pair = min_all;
two2_pair = mid_card;
}
else if (max2_all == max_all){
two_pair_bool = true;
two1_pair = min_all;
two2_pair = max2_all;
}
else{
two_pair_bool = false;
}
}
else if (min2_all == mid_card){
one_pair = min2_all;
one_pair_bool = true;
if (max2_all == max_all){
two_pair_bool = true;
two1_pair = min2_all;
two2_pair = max2_all;
}
else {
two_pair_bool = false;
}
}
else if (mid_card == max2_all){
one_pair = mid_card;
one_pair_bool = true;
if (min_all == min2_all){
two_pair_bool = true;
two1_pair = mid_card;
two2_pair = min_all;
}
else{
two_pair_bool = false;
}
}
else if (max2_all == max_all){
one_pair = max2_all;
one_pair_bool = true;
if (min_all == min2_all){
two_pair_bool = true;
two1_pair = max2_all;
two2_pair = min_all;
}
else if (min2_all == mid_card){
two_pair_bool = true;
two1_pair = max2_all;
two2_pair = min2_all;
}
else{
two_pair_bool = false;
}
}
else{
one_pair_bool = false;
}
bool three_of_a_kind;
int three_of_a_kind_number;
if (min_all == min2_all && min2_all == mid_card){
three_of_a_kind = true;
three_of_a_kind_number = min_all;
}
else if (min2_all == mid_card && mid_card == max2_all){
three_of_a_kind = true;
three_of_a_kind_number = min2_all;
}
else if (mid_card == max2_all && max2_all == max_all){
three_of_a_kind = true;
three_of_a_kind_number = mid_card;
}
else {
three_of_a_kind = false;
}
bool straight;
int straight_start;
if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1){
straight = true;
straight_start = min_all;
}
else {
straight = false;
}
bool flush;
char flush_suit;
if (min_suit == min2_suit == mid_suit == max2_suit == max_suit){
flush = true;
flush_suit = min_suit;
}
bool full_house;
int full_house2;
int full_house3;
if (min_all == min2_all && min2_all == mid_card){
if (max2_all == max_all){
full_house = true;
full_house2 = max2_all;
full_house3 = min_all;
}
}
else if (min2_all == mid_card && mid_card == max2_all){
}
else if (mid_card == max2_all && max2_all == max_all){
if (min_all == min2_all){
full_house = true;
full_house2 = min_all;
full_house3 = mid_card;
}
}
else {
}
bool four_of_a_kind;
int four_of_a_kind_number;
if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1){
four_of_a_kind = true;
four_of_a_kind_number = min_all;
}
else if (min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1){
four_of_a_kind = true;
four_of_a_kind_number = min2_all;
}
bool straight_flush;
char straight_flush_suit;
int straight_flush_start;
if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1 && min_suit == min2_suit && min2_suit == mid_suit && mid_suit == max2_suit && max2_suit == max_suit){
straight_flush = true;
straight_flush_start = min_all;
straight_flush_suit = min_suit;
}
else {
straight_flush = false;
}
bool royal_flush = false;
char royal_flush_suit;
if (min_all == 1 && min2_all == 10 && mid_card == 11 && max2_all == 12 && max_all == 13 && min_suit == min2_suit && min2_suit == mid_suit && mid_suit == max2_suit && max2_suit == max_suit){
royal_flush = true;
royal_flush_suit = min_suit;
}
else{
royal_flush = false;
}
if (royal_flush = true){
hand_ranking = 9;
}
else if (straight_flush == true){
hand_ranking = 8;
}
else if (four_of_a_kind == true){
hand_ranking = 7;
}
else if (full_house == true){
hand_ranking = 6;
}
else if (flush == true){
hand_ranking = 5;
}
else if (straight == true){
hand_ranking = 4;
}
else if (three_of_a_kind == true){
hand_ranking = 3;
}
else if (two_pair_bool == true){
hand_ranking = 2;
}
else if (one_pair == true){
hand_ranking = 1;
}
else{}
【问题讨论】:
-
当您使用调试器时,哪些行导致了问题?
-
调试器没有发现任何错误,但是当我将 cout 语句放入其中一个手动确定循环(即 - “char royal_flush_suit”下的 if 语句)时,它没有打印,但是它仍然在说我每次都有皇家同花顺。
-
所以你用调试器跳过了
cout行并且它没有打印任何东西? -
不,当我尝试调试它时,我将 cout 语句放入 if 语句中。它没有打印 cout,这意味着它没有经过那个 if 语句,但它仍然说变量 (royal_flush) 是真的。虽然,这不可能是正确的,因为实现它的唯一方法是输入 if 语句
标签: c++