-1

所以我正在写一个小纸牌游戏来学习一些 C#。这是我的第一个项目,我遇到了一些麻烦。所以游戏只问你几个简单的问题。下一张牌是红色还是黑色,下一张牌比前一张牌高还是低,下一张牌在前两张牌的内侧或外侧。最后,为下一张牌选择一套花色。除了输入输出部分外,它都可以正常工作。我正在使用 switch 语句来获取用户输入,然后使用 if 语句来踢出正确的答案。如果您打开“in”,它运行完美,但如果您输入“out”则错误,请帮助。此外,任何批评都会很好。感谢您的帮助。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Text.RegularExpressions;
    using System.Collections;

    namespace Drinking_Game_
{
class Program
{
    public static void Main()
    {
        Deck deck = new Deck();
        Card card = new Card();
        Intro intro = new Intro();
        Game drink = new Game();
        deck.Shuffle();
        intro.intro();
        drink.game();
        //Console.WriteLine(deck.TakeCard());
        Console.ReadLine();
    }


        //In out part of the  Game
        Card inOut = new Card();
        deck.Shuffle();
        inOut = deck.TakeCard();
        Start2:
        Console.WriteLine("Is the next card going to be inside, out, or equal to \n {0} & {1}
        (in, out or equal)  \n", rorbcard,highLow);
        string userValue2 = Console.ReadLine().ToLower();
        Console.WriteLine(inOut.ToString());
        switch (userValue2)
        {
            case "out":
                          //+                      -
                    if (rorbcard.CardNumber > highLow.CardNumber)
                    {
                        if (inOut.CardNumber > rorbcard.CardNumber) & (inOut.CardNumber <
                        highLow.CardNumber)
                        {
                            Console.WriteLine("Correct give 6 drinks\n");
                        }
                        else
                        {
                            Console.WriteLine("Wrong take 6 drinks\n");
                        }
                    }
                    else if (rorbcard.CardNumber < highLow.CardNumber)
                    {
                        if (inOut.CardNumber < rorbcard.CardNumber) & (inOut.CardNumber >
                        highLow.CardNumber)
                        {
                            Console.WriteLine("Correct give 6 drinks\n");
                        }
                        else
                        {
                            Console.WriteLine("Wrong take 6 drinks\n");
                        }
                    }
                break;
            case "in":
                    if (rorbcard.CardNumber > highLow.CardNumber)
                    {
                        if (inOut.CardNumber < rorbcard.CardNumber & inOut.CardNumber >
                        highLow.CardNumber)
                        {
                            Console.WriteLine("Correct give 6 drinks\n");
                        }
                        else
                        {
                            Console.WriteLine("Wrong take 6 drinks\n");
                        }
                    }
                    else if (rorbcard.CardNumber < highLow.CardNumber)
                    {
                        if (inOut.CardNumber > rorbcard.CardNumber && inOut.CardNumber <
                         highLow.CardNumber)
                        {
                            Console.WriteLine("Correct give 6 drinks\n");
                        }
                        else
                        {
                            Console.WriteLine("Wrong take 6 drinks\n");
                        }
                    }
                break;
            case "equal":

                    if (inOut.CardNumber == rorbcard.CardNumber || inOut.CardNumber ==
                    highLow.CardNumber)
                    {
                        Console.WriteLine("Correct give 6 drinks\n");  
                    }
                    else
                    {
                        Console.WriteLine("Bold move, but wrong drink 6\n");
                    }
                break;
            default:
                {
                    Console.WriteLine("You must input in, out, or equal");
                    goto Start2;
                }
        }
 public enum Suit
{
    Spades = 0,
    Hearts = 1,
    Diamonds = 2,
    Clubs = 3,
}

public enum CardNumber
{
    Two = 1,
    Three = 2,
    Four = 3,
    Five = 4,
    Six = 5,
    Seven = 6,
    Eight = 7,
    Nine = 8,
    Ten = 9,
    Jack = 10,
    Queen = 11,
    King = 12,
    Ace = 13,
}

public class Card
{
    public Suit Suit { get; set; }
    public CardNumber CardNumber { get; set; }

    public override string ToString()
    {
        return CardNumber + " of " + Suit;
    }


}

public class Deck
{

    public Deck()
    {
        Reset();
    }

    public List<Card> Cards { get; set; }

    public void Reset()
    {
        Cards = Enumerable.Range(0, 3).SelectMany(s => Enumerable.Range(1, 13).Select(c => new
        Card()
        {
            Suit = (Suit)s,
            CardNumber = (CardNumber)c
        } )).ToList();
    }

    public void Shuffle()
    {
        Cards = Cards.OrderBy(c => Guid.NewGuid())
                     .ToList();
    }

    public Card TakeCard()
    {
        var card = Cards.FirstOrDefault();
        Cards.Remove(card);
        return card;


    }

    public IEnumerable<Card> TakeCards(int numberOfCards)
    {
        var cards = Cards.Take(numberOfCards);

        var takeCards = cards as Card[] ?? cards.ToArray();
        Cards.RemoveAll(takeCards.Contains);

        return takeCards;
    }
}
}
4

2 回答 2

1

看起来您的问题在于您确定卡片是否“超出”范围的逻辑。目前,你的内心if陈述基本上是说:“如果卡片小于小卡片并且大于大卡片”,这显然是不可能的,而是你想要断言卡片小于小卡片大于较大的卡片,使用布尔 OR ( ||) 运算符:

...
if (rorbcard.CardNumber > highLow.CardNumber)
{
    if (inOut.CardNumber > rorbcard.CardNumber) || (inOut.CardNumber < highLow.CardNumber)
    {
        Console.WriteLine("Correct give 6 drinks\n");
    }
    else
    {
        Console.WriteLine("Wrong take 6 drinks\n");
    }
}
else if (rorbcard.CardNumber < highLow.CardNumber)
{
    if (inOut.CardNumber < rorbcard.CardNumber) || (inOut.CardNumber > highLow.CardNumber)
    {
        Console.WriteLine("Correct give 6 drinks\n");
    }
    else
    {
        Console.WriteLine("Wrong take 6 drinks\n");
    }
}
break;
...

请注意,正如其他人所提到的,当 AND 或 OR 的两边都是bool类型时,您应该使用条件运算符&&and ||,而不是逻辑&and |

于 2013-10-16T20:15:02.083 回答
0

我注意到您的案例中有更多括号。这可能会改变代码的行为。

于 2013-10-16T19:54:06.053 回答