private static void Run(String pass, String serverIP, int serverPort, int version, String room = "", string cdb = "cards.cdb")
        {
            ProVersion = version;
            if (pass == "--")
            {
                pass = "";
            }
            if (room == "[null]")
            {
                room = "";
            }
            Console.WriteLine(pass + " " + serverIP + ":" + serverPort + " 0x" + version.ToString("x") + " room:" + room);
            Rand = new Random();
            CardsManager.Init(cdb);
            DecksManager.Init();

            // Start two clients and connect them to the same room. Which deck is gonna win?
            AIGameClient clientA = new AIGameClient(pass, serverIP, serverPort, room);

            clientA.Start();
            while (clientA.Connection.IsConnected)
            {
                clientA.Tick();
                Thread.Sleep(1);
            }
            //Thread.Sleep(3000);
        }
Exemple #2
0
        private void FillPlayedCards(CurrentGameDataViewModel model, List <CardPlayed> cardsPlayed, PlayerPosition playerPosition)
        {
            foreach (var cardPlayed in cardsPlayed)
            {
                var  onScreenPosition = playerPosition.GetOnScreenPosition(cardPlayed.PlayerPosition);
                Card card             = CardsManager.GetCardFromString(cardPlayed.CardString);
                switch (onScreenPosition)
                {
                case PlayerPosition.Up:
                    model.UpCard = card.ImgPath;
                    break;

                case PlayerPosition.Left:
                    model.LeftCard = card.ImgPath;
                    break;

                case PlayerPosition.Right:
                    model.RightCard = card.ImgPath;
                    break;

                case PlayerPosition.Down:
                    model.DownCard = card.ImgPath;
                    break;
                }
            }
        }
Exemple #3
0
        public void PickACardTest2()
        {
            int pickTimes           = -2;
            int ecpectedCardsAmount = pickTimes;

            Game targetGame   = new Game();
            int  playerButton = 1;

            for (int i = 0; i < pickTimes; i++)
            {
                targetGame.PickACard(playerButton);
            }
            int          actualCardslAmount = 0;
            CardsManager theManager         = targetGame.cardManager1;
            CardsFactory theFactory         = targetGame.cardFactory1;

            if (pickTimes <= 0)
            {
                ecpectedCardsAmount = 0;
            }
            else if (pickTimes < targetGame.cardManager1.cards.Count)
            {
                actualCardslAmount = theManager.cards.Count;
            }
            else if (pickTimes > theManager.cards.Count && theFactory.cards.Count > 0)
            {
                ecpectedCardsAmount = 5;
                actualCardslAmount  = theManager.cards.Count;
            }

            Assert.AreEqual(ecpectedCardsAmount, actualCardslAmount);
        }
Exemple #4
0
        public void showNewTableTest()
        {
            const string info1 = "怪兽名:诅咒之龙\r\n攻击力:500\r\n防守力:";
            int          info2 = 1;
            int          cardsManager1Amount = 4;
            int          cardsManager2Amount = 5;

            string expectedBoxesShowInfo = "";

            BuiltExpectedBoxesShowInfo(ref expectedBoxesShowInfo, cardsManager1Amount, info1, info2);
            BuiltExpectedBoxesShowInfo(ref expectedBoxesShowInfo, cardsManager2Amount, info1, info2);

            Form1 target = new Form1(); // TODO: 初始化为适当的值

            target.InitGame();

            CardsManager cardManager1 = target.duelGame.cardManager1;
            CardsManager cardManager2 = target.duelGame.cardManager2;

            BuiltActualCardsInfo(cardManager1, cardsManager1Amount, info1, info2);
            BuiltActualCardsInfo(cardManager2, cardsManager2Amount, info1, info2);

            target.ShowNewTable();

            string actualBoxesShowInfo = "";

            BuiltActualBoxesShowInfo(ref actualBoxesShowInfo, cardManager1.cards, 0);
            BuiltActualBoxesShowInfo(ref actualBoxesShowInfo, cardManager2.cards, 15);


            Assert.AreEqual(expectedBoxesShowInfo, actualBoxesShowInfo);
        }
    /// <summary>
    /// 洗牌:对局开始时由God为对阵双方洗牌(初始化双方的牌库)
    /// </summary>
    public void Shuffle()
    {
        int[] c = new int[num_of_cards];
        for (int i = 0; i < num_of_cards; i++)
        {
            c[i] = i;
        }
        for (int i = 0; i < num_of_cards; i++)
        {
            int j    = Random.Range(i, num_of_cards);
            int temp = c[i];
            c[i] = c[j];
            c[j] = temp;
        }

        Card FirstCard = new Card(CardsManager.GetInstance().CardsInGame[c[0]]);

        for (int i = 1; i < num_of_cards; i++)
        {
            Card TempCard = new Card(CardsManager.GetInstance().CardsInGame[c[i]]); // 重排数组后,顺序填充卡牌就可以了
            times = 100;
            while (times-- >= 0)
            {
                CardStack.Push(new KeyValuePair <int, Card>(100 - times, TempCard));
            }
        }
    }
Exemple #6
0
        public bool AddCard(CardData cardData, int packageId)
        {
            if (CardExists(cardData.Id))
            {
                return(false);
            }

            string statement = $"INSERT INTO \"{Table}\" (id, name, damage, weakness, element, card_type, package_id) VALUES" +
                               " (@id, @name, @damage, @weakness, @element, @card_type, @package_id)";

            string cardType = CardsManager.ExtractCardType(cardData.Name) == CardType.Spell ? "spell"
                              : CardsManager.ExtractMonsterType(cardData.Name).ToString().ToLower();

            int rowsAffected = database.ExecuteNonQuery(
                statement,
                new NpgsqlParameter <string>("id", cardData.Id),
                new NpgsqlParameter <string>("name", cardData.Name),
                new NpgsqlParameter <double>("damage", cardData.Damage),
                new NpgsqlParameter <double>("weakness", cardData.Weakness),
                new NpgsqlParameter <string>("element", CardsManager.ExtractElementType(cardData.Name).ToString().ToLower()),
                new NpgsqlParameter <string>("card_type", cardType),
                new NpgsqlParameter <int>("package_id", packageId)
                );;

            return(rowsAffected == 1);
        }
Exemple #7
0
        private PlayerPosition GetWiningCallPosition(Round round)
        {
            Call call = null;

            var orderedCalls = round.Calls.OrderByDescending(c => c.Type);
            var firstCall    = orderedCalls.FirstOrDefault();

            if (firstCall.Type == CallType.EightInARow || firstCall.Type == CallType.FourJacks || firstCall.Type == CallType.FourNines)
            {
                call = firstCall;
            }

            if (firstCall.Type == CallType.FourOfAKind)
            {
                call = orderedCalls
                       .ThenBy(c => Array.IndexOf(CustomSorting.FourOfAKindSortOrder, CardsManager.GetCardFromString(c.HighestCard).Value))
                       .FirstOrDefault();
            }

            if (firstCall.Type == CallType.SevenInARow || firstCall.Type == CallType.SixInARow || firstCall.Type == CallType.FiveInARow || firstCall.Type == CallType.FourInARow || firstCall.Type == CallType.ThreeInARow)
            {
                var maxValue = round.Calls.Select(c => c.Value).Max();
                call = orderedCalls
                       .Where(c => c.Value == maxValue)
                       .OrderByDescending(c => CardsManager.GetCardFromString(c.HighestCard).Value)
                       .ThenBy(c => Array.IndexOf(CustomSorting.GetPositionSortingOrderForCalls(round.FirstPlayerToPlay), c.PlayerPosition))
                       .FirstOrDefault();
            }

            return(call.PlayerPosition);
        }
Exemple #8
0
    public void GetVariables()
    {
        cardManager = cardsManager.GetComponent <CardsManager>();
        cards       = new List <GameObject>(cardManager.Cards);

        winner = "";

        if (GameObject.Find("CatManager") != null)
        {
            catManager = GameObject.Find("CatManager").GetComponent <CatManager>();
            p1         = catManager.p1g;
            p2         = catManager.p2g;
        }
        else
        {
            p1 = GameObject.Find("Sausage");
            p2 = GameObject.Find("Queso");
        }

        // get floor
        if (GameObject.Find("StageManager") != null)
        {
            stageManager = GameObject.Find("StageManager").GetComponent <StageManager>();
            floor        = stageManager.currentStage;
        }

        p1s           = p1.transform.localScale;
        p2s           = p2.transform.localScale;
        floorScale    = floor.transform.localScale;
        floorRotation = floor.transform.localRotation;
        floorPosition = floor.transform.localPosition;
    }
Exemple #9
0
 public static CardsManager GetInstance()   //单例方法获取对象
 {
     if (CM == null)
     {
         CM = new CardsManager();
     }
     return(CM);
 }
Exemple #10
0
        public void TestFullDeck()
        {
            Deck deck = new Deck(2);

            deck.Add(CardsManager.RandomCard());
            deck.Add(CardsManager.RandomCard());

            Assert.Throws <DataException>(() => deck.Add(CardsManager.RandomCard()));
        }
Exemple #11
0
        private static UInt32 MyCardReader(UInt32 code, Card.CardData *pData)
        {
            Card card = CardsManager.GetCard((int)code);

            if (card != null)
            {
                *pData = card.Data;
            }
            return(code);
        }
 void Start()
 {
     cardMan            = gameObject.GetComponent <CardsManager>();
     p1But.interactable = false;
     p2But.interactable = false;
     MainMenuScreen.SetActive(true);
     GameScreen.SetActive(false);
     GameOverScreen.SetActive(false);
     CamAnim.SetBool("GameStarted", false);
 }
Exemple #13
0
        private void CalculateResults()
        {
            int[] comboCount = new int[_combos.Count];
            for (int i = 0; i < _reshuffleAmount; i++)
            {
                List <int> randomHand = Decklist.rand(_deckMain).GetRange(0, handSize);
                bool       firstFound = true;
                for (int j = 0; j < _combosIds.Count; j++)
                {
                    bool       resultFound = false;
                    List <int> combo       = _combosIds[j];
                    if (ListComparer.ContainsAllItems(randomHand, combo))
                    {
                        resultFound = true;
                        comboCount[j]++;
                        if (firstFound)
                        {
                            _globalCombosCount++;
                            firstFound = false;
                        }
                    }
                    List <Card> randomHandCard = new List <Card>();
                    foreach (var c in randomHand)
                    {
                        randomHandCard.Add(CardsManager.GetCard(c));
                    }
                    logs.Add($"Hand number {i.ToString()} Combo number: {j.ToString()} Found combo: {resultFound} Combo: {string.Join(", ", _combos[j])} Hand: {string.Join(", ", randomHandCard)}");
                }
            }
            for (int j = 0; j < _combosIds.Count; j++)
            {
                logs.Add($"\nResult for Combo{j.ToString()} is: {comboCount[j].ToString()}\n");
            }
            for (int i = 0; i < _combos.Count; i++)
            {
                DisplayResults(_combos[i], comboCount[i]);
            }
            decimal percentage = GetPercentage(_globalCombosCount, _reshuffleAmount);

            amountLabel.Text     = $"{_globalCombosCount.ToString()} out of {_reshuffleAmount} hands = {percentage.ToString()}%";
            LastComboLogFileName = $"ComboLogs_{_deckName}_{DateTime.Now.ToString("yyyyMMddTHHmmss")}.txt";
            try
            {
                if (!Directory.Exists(_logsFolder))
                {
                    Directory.CreateDirectory(_logsFolder);
                }
                File.WriteAllLines(Path.Combine(_logsFolder, LastComboLogFileName), logs);
            }
            catch
            {
                MessageBox.Show("The app experienced issues exporting logs into the folder.", "Error saving logs to the logs folder", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            logs.Clear();
        }
Exemple #14
0
        public async Task <Result> MakeACall(List <string> cardStrings, int roundId, int userId, bool isCall)
        {
            var            result              = Result.Success();
            int            highestCallValue    = 0;
            PlayerPosition?winningCallPosition = null;
            Round          round = await _gameRepository.GetRoundById(roundId);

            Player player = await _playerRepository.GetPlayerByUserIdAsync(userId);

            if (isCall)
            {
                if (cardStrings.Count > 2)
                {
                    List <Card> cards               = cardStrings.Select(cs => CardsManager.GetCardFromString(cs)).ToList();
                    List <Call> foundCalls          = new List <Call>();
                    List <Card> fourOfAKindRemained = new List <Card>();
                    List <Card> sequenceRemained    = new List <Card>();
                    FindFourOfAKindCalls(cards, player.PlayerPosition.Value, ref foundCalls, ref fourOfAKindRemained);
                    FindSequenceCalls(cards, player.PlayerPosition.Value, ref foundCalls, ref sequenceRemained);
                    if (!DoListsHaveMatchingCard(fourOfAKindRemained, sequenceRemained))
                    {
                        round.Calls.AddRange(foundCalls);
                        highestCallValue = foundCalls.OrderByDescending(c => c.Value).FirstOrDefault().Value;
                    }
                    else
                    {
                        return(Result.Fail(new string[] { "Nevažeće zvanje" }));
                    }
                }
                else
                {
                    return(Result.Fail(new string[] { "Nevažeće zvanje" }));
                }
            }

            round.CurrentPlayerToPlay = round.CurrentPlayerToPlay.GetNextPosition();
            if (round.CurrentPlayerToPlay == round.FirstPlayerToPlay)
            {
                round.RoundPhase = round.RoundPhase.GetNextPhase();
                if (round.Calls.Count > 0)
                {
                    winningCallPosition = GetWiningCallPosition(round);
                    await ResolveCalls(round, winningCallPosition.Value);
                }
            }
            result.Values = GetResultObjForCall(round, highestCallValue, winningCallPosition);

            if (await _gameRepository.SaveAsync())
            {
                return(result);
            }

            return(Result.Fail(new string[] { "Dogodila se greška" }));
        }
Exemple #15
0
    /// <summary>
    /// 假装洗牌:对局开始时由God为对阵双方洗牌(初始化双方的牌库)
    /// </summary>
    public void Shuffle()
    {
        Card FirstCard = new Card(CardsManager.GetInstance().CardsInGame[7]); // 酸性沼泽怪

        int times = 100;

        while (times-- >= 0)
        {
            CardStack.Push(new KeyValuePair <int, Card>(100 - times, FirstCard));
        }
    }
Exemple #16
0
 private void Awake()
 {
     if (cardsManager == null)
     {
         cardsManager = this;
     }
     else if (cardsManager != this)
     {
         Destroy(gameObject);
     }
 }
Exemple #17
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Destroy(this);
     }
 }
Exemple #18
0
 private void Awake()
 {
     if (_instance != null && _instance != this)
     {
         Destroy(this.gameObject);
     }
     else
     {
         _instance = this;
     }
 }
Exemple #19
0
        private bool ElementTypeForTradeIsOk(string offeredCardName, string requiredElementType)
        {
            if (requiredElementType.IsNullOrWhiteSpace() || requiredElementType.ToLower() == "any")
            {
                return(true);
            }

            ElementType offeredCardElementType = CardsManager.ExtractElementType(offeredCardName);
            ElementType requiredElement        = CardsManager.ExtractElementType(requiredElementType);

            return(offeredCardElementType == requiredElement);
        }
Exemple #20
0
        private void ResolveTurn(Round round, Game game, bool isLastTurn)
        {
            var cardsPlayed       = round.CardsPlayed.Where(cp => cp.RoundPhase == round.RoundPhase).ToList();
            var sum               = cardsPlayed.Sum(cp => cp.Value);
            var cards             = cardsPlayed.Select(cp => CardsManager.GetCardFromString(cp.CardString)).ToList();
            var strongestCard     = GetStrongestCardInTurn(cards, round.CurrentTrump.Value);
            var winningPosition   = round.CardsPlayed.Where(cp => strongestCard.ToString() == cp.CardString).FirstOrDefault().PlayerPosition;
            var playerThatWonTurn = game.PlayerGames.Where(pg => pg.Player.PlayerPosition == winningPosition).Select(pg => pg.Player).FirstOrDefault();

            SetPointValuesInTurn(round, playerThatWonTurn.Team.Value, sum, isLastTurn);
            round.CurrentPlayerToPlay = winningPosition;
        }
Exemple #21
0
 private void Awake()
 {
     DontDestroyOnLoad(this);
     if (instance != null && instance != this)
     {
         Destroy(this.gameObject);
     }
     else
     {
         instance = this;
     }
 }
Exemple #22
0
        public Card(ElementType element, CardType cardType)
        {
            CardData data = CardsManager.RandomCardData();

            ID       = data.Id;
            Name     = data.Name;
            Damage   = data.Damage;
            Weakness = data.Weakness;

            ElementType = element;
            CardType    = cardType;
        }
Exemple #23
0
        public void MakeDeck(CardData c1, CardData c2, CardData c3, CardData c4)
        {
            if (!Deck.Empty)
            {
                Deck.Clear();
            }

            Deck.Add(CardsManager.Create(c1));
            Deck.Add(CardsManager.Create(c2));
            Deck.Add(CardsManager.Create(c3));
            Deck.Add(CardsManager.Create(c4));
        }
Exemple #24
0
 public void SetId(int id)
 {
     if (Id == id)
     {
         return;
     }
     Id   = id;
     Data = CardsManager.GetCard(Id);
     if (Data != null)
     {
         Name = Data.Name;
     }
 }
Exemple #25
0
        private void BuiltActualCardsInfo(CardsManager owner, int cardsAmount, string info1, int info2)
        {
            owner.cards.Clear();

            for (int i = 0; i < cardsAmount; i++)
            {
                info2++;
                Card builtedCard = new Card();
                builtedCard.ChineseName = "诅咒之龙";
                builtedCard.attack      = "500";
                builtedCard.defend      = Convert.ToString(info2);
                owner.cards.Add(builtedCard);
            }
        }
Exemple #26
0
    /*
     * 初始化对阵信息
     */
    public void init()
    {
        red             = GameObject.Find("PlayerRed");
        yellow          = GameObject.Find("PlayerYellow");
        playerred       = red.GetComponent <Player>();
        redposcontainer = red.GetComponent <PosContainer>();
        playerred.setPlayerObject(red);
        playeryellow       = yellow.GetComponent <Player>();
        yellowposcontainer = yellow.GetComponent <PosContainer>();
        playeryellow.setPlayerObject(yellow);

        //UI设置
        UI.set_player_HP(playerred.HP, playerred);
        UI.set_player_MP(playerred.MP, playerred);
        UI.set_player_Cardnum(playerred.CardsInHand.Count, playerred);
        UI.set_player_HP(playeryellow.HP, playeryellow);
        UI.set_player_MP(playeryellow.MP, playeryellow);
        UI.set_player_Cardnum(playeryellow.CardsInHand.Count, playeryellow);

        // 开局选边扩展点
        Debug.Log("黄色方先手");
        PlayerRound    = 0;
        currentplayer  = playeryellow;
        currentoponent = playerred;
        roundCount     = 1;
        Debug.Log("第" + roundCount + "回合开始");

        GameObject redcardslots = GameObject.Find("RedCardSlots");

        Transform[] rcs             = redcardslots.GetComponentsInChildren <Transform>();
        GameObject  yellowcardslots = GameObject.Find("YellowCardSlots");

        Transform[] ycs = yellowcardslots.GetComponentsInChildren <Transform>();

        for (int i = 0; i < rcs.Length; i++)
        {
            redposcontainer.CardsPos.Add(rcs[i].position);
            yellowposcontainer.CardsPos.Add(ycs[i].position);
        }

        CSVReader.GetInstance().loadFile(Application.dataPath + "/CardsConfigs", "卡组csv.csv"); // 读取存储卡牌描述的CSV文件
        CardsManager.GetInstance().SetCardsData(CSVReader.GetInstance().arrayData);            // 将读取到的数据传入卡牌管理器
        CardsManager.GetInstance().InstansitateCards();                                        // 卡牌管理器根据读取的数据来实例化卡牌


        currentplayer.Shuffle();
        currentoponent.Shuffle();
        currentplayer.DrawCard();
    }
        public static void Init(string path = ".", string scripts = "script", string cards = "cards.cdb")
        {
            PathManager.Init(path, scripts, cards);
            CardsManager.Init(cards);

            m_buffer = Marshal.AllocHGlobal(65536);

            m_creader    = MyCardReader;
            m_sreader    = MyScriptReader;
            m_msghandler = MyMessageHandler;

            set_card_reader(m_creader);
            set_script_reader(m_sreader);
            set_message_handler(m_msghandler);
        }
Exemple #28
0
        public void TestGetRandomCard()
        {
            Deck deck = new Deck(4);

            deck.Add(CardsManager.RandomMonster());
            deck.Add(CardsManager.RandomSpell());
            deck.Add(CardsManager.RandomMonster());
            deck.Add(CardsManager.RandomSpell());

            for (int i = 0; i < 10000; i++)
            {
                Assert.DoesNotThrow(() => deck.GetRandomCard());
            }
            // test that GetRandomCard doesn't go out of boundaries
        }
Exemple #29
0
        public async Task <List <CardInHandModel> > GetCardHandModelListForPlayer(int userId, bool allCards, int trump)
        {
            List <CardInHandModel> listOfCards = new List <CardInHandModel>();
            var player = await _playerRepository.GetPlayerByUserIdAsync(userId);

            if (string.IsNullOrEmpty(player.Hand))
            {
                return(listOfCards);
            }

            var cards = CardsManager.GetCardListFromHandString(player.Hand);

            if (allCards)
            {
                cards = cards.OrderCards();
                var trumpSuit       = (CardSuit)trump;
                var belaAvailable   = cards.Exists(c => c.Value == CardValue.King && c.Suit == trumpSuit) && cards.Exists(c => c.Value == CardValue.Queen && c.Suit == trumpSuit);
                var trumpSuitString = trumpSuit.GetStringValue();
                listOfCards = cards
                              .Select(c => new CardInHandModel()
                {
                    CardString = c.ToString(),
                    CardUrl    = c.ImgPath,
                    AskForBela = belaAvailable && c.Suit == trumpSuit && (c.Value == CardValue.Queen || c.Value == CardValue.King)
                }).ToList();
            }
            else
            {
                var firstSix = cards.Take(6).ToList().OrderCards();
                listOfCards = firstSix
                              .Select(c => new CardInHandModel()
                {
                    CardString = c.ToString(),
                    CardUrl    = c.ImgPath,
                    AskForBela = false
                }).ToList();
                listOfCards.Add(new CardInHandModel()
                {
                    CardString = "", CardUrl = CardsManager.GetBackgroundCardImgPath()
                });
                listOfCards.Add(new CardInHandModel()
                {
                    CardString = "", CardUrl = CardsManager.GetBackgroundCardImgPath()
                });
            }

            return(listOfCards);
        }
Exemple #30
0
        public void TestRemove()
        {
            Deck deck = new Deck(50);

            // test the equality operator

            for (int i = 0; i < 10000; i++)
            {
                Card card = CardsManager.RandomCard();

                deck.Add(card);
                deck.Remove(card);

                Assert.IsTrue(deck.Empty);
            }
        }
 public CardsCatalogViewModel(CardsManager cardsManager)
 {
     _cardsManager = cardsManager;
 }