Пример #1
0
        private void LoadCards()
        {
            cards = new List <sCard>();

            Image characters = Image.FromFile(@"img/card_types.png");
            Image numbers    = Image.FromFile(@"img/power_numbers.png");
            Image frame      = Image.FromFile(@"img/card_frame.png");

            XmlDocument doc = new XmlDocument();

            doc.Load("cards.xml");

            XmlNodeList cardsNodes = doc.DocumentElement.SelectNodes("/cards/card");

            foreach (XmlNode cardNode in cardsNodes)
            {
                sCard card = new sCard();
                card.name   = cardNode.Attributes["name"].Value;
                card.left   = Convert.ToInt32(cardNode.Attributes["left"].Value);
                card.right  = Convert.ToInt32(cardNode.Attributes["right"].Value);
                card.top    = Convert.ToInt32(cardNode.Attributes["top"].Value);
                card.bottom = Convert.ToInt32(cardNode.Attributes["bottom"].Value);
                int column = Convert.ToInt32(cardNode.Attributes["column"].Value) - 1;
                int row    = Convert.ToInt32(cardNode.Attributes["row"].Value) - 1;
                card.image = GenerateCardBitmap(characters, numbers, frame, column, row, card);
                cards.Add(card);
            }
            characters.Dispose();
            numbers.Dispose();

            GenerateCardBackgrounds(frame);
            frame.Dispose();
        }
Пример #2
0
        public void AddCard(sCard card, int x, int y, bool enemy)
        {
            sTableCard tcard = new sTableCard(card, enemy, x, y);

            ChangeOwnerNearCard(tcard);
            cards.Add(tcard);
        }
Пример #3
0
        private double CalculateFreeCellsCoef(int x, int y, sCard card, Table table)
        {
            double count = 1;

            //check up
            if (y - 1 >= 0 && table.PlaceIsFree(x, y - 1))
            {
                count += (double)cardsInfo[2][card.top - 1] / cardsNumber;
            }

            //check down
            if (y + 1 < 3 && table.PlaceIsFree(x, y + 1))
            {
                count += (double)cardsInfo[0][card.bottom - 1] / cardsNumber;
            }

            //check left
            if (x - 1 >= 0 && table.PlaceIsFree(x - 1, y))
            {
                count += (double)cardsInfo[1][card.left - 1] / cardsNumber;
            }

            //check right
            if (x + 1 < 3 && table.PlaceIsFree(x + 1, y))
            {
                count += (double)cardsInfo[3][card.right - 1] / cardsNumber;
            }
            return(count);
        }
Пример #4
0
 public sTableCard(sCard card, bool enemy, int x, int y)
 {
     this.card        = card;
     this.enemy       = enemy;
     this.x           = x;
     this.y           = y;
     this.toBeFlipped = false;
 }
Пример #5
0
        private double CardWeight(int x, int y, sCard card)
        {
            int pow = 2;

            //if (x == 0 && y == 0) //left top
            //{
            //    return Math.Pow(card.bottom, pow) + Math.Pow(card.right, pow);
            //}
            //else if (x == 2 && y == 0) //right top
            //{
            //    return Math.Pow(card.bottom, pow) + Math.Pow(card.left, pow);
            //}
            //else if (x == 0 && y == 2) //left bottom
            //{
            //    return Math.Pow(card.top, pow) + Math.Pow(card.right, pow);
            //}
            //else if (x == 2 && y == 2) //right bottom
            //{
            //    return Math.Pow(card.top, pow) + Math.Pow(card.left, pow);
            //}
            //else if (y == 0) //top
            //{
            //    return Math.Pow(card.bottom, pow) + Math.Pow(card.left, pow) + Math.Pow(card.right, pow);
            //}
            //else if (x == 2) //right
            //{
            //    return Math.Pow(card.bottom, pow) + Math.Pow(card.left, pow) + Math.Pow(card.top, pow);
            //}
            //else if (y == 2) //bottom
            //{
            //    return Math.Pow(card.top, pow) + Math.Pow(card.left, pow) + Math.Pow(card.right, pow);
            //}
            //else if (x == 0) //left
            //{
            //    return Math.Pow(card.bottom, pow) + Math.Pow(card.top, pow) + Math.Pow(card.right, pow);
            //}
            //else //middle
            //{
            return(Math.Pow(card.top, pow) + Math.Pow(card.bottom, pow) +
                   Math.Pow(card.left, pow) + Math.Pow(card.right, pow));
            //}
        }
Пример #6
0
        public sTableCard MakeMove(Table table)
        {
            sCard  bestCard  = new sCard();
            double bestScore = -1;
            int    bestX     = -1;
            int    bestY     = -1;

            for (int i = 0; i < cards.Count; i++)
            {
                for (int x = 0; x < 3; ++x)
                {
                    for (int y = 0; y < 3; ++y)
                    {
                        if (table.PlaceIsFree(x, y))
                        {
                            Sort(x, y);
                            double score = Calculate(i, x, y, table);
                            if (score > bestScore)
                            {
                                bestCard  = cards[i];
                                bestX     = x;
                                bestY     = y;
                                bestScore = score;
                            }
                        }
                    }
                }
            }
            sTableCard card = new sTableCard();

            card.card        = bestCard;
            card.enemy       = iAmEnemy;
            card.toBeFlipped = false;
            card.x           = bestX;
            card.y           = bestY;
            cards.Remove(bestCard);
            return(card);
        }
Пример #7
0
        private Bitmap GenerateCardBitmap(Image characters, Image numbers, Image frame, int column, int row, sCard card)
        {
            Rectangle dest = new Rectangle(0, 0, 256, 316);
            //Prepare image
            Bitmap    image     = new Bitmap(256, 316);
            Graphics  canvas    = Graphics.FromImage(image);
            Rectangle imageRect = new Rectangle(column * 256, row * 316, 256, 316);

            //Draw character
            canvas.DrawImage(characters, dest, imageRect, GraphicsUnit.Pixel);
            //Draw numbers frame
            Rectangle rect = new Rectangle(256, 0, 256, 316);

            canvas.DrawImage(frame, dest, rect, GraphicsUnit.Pixel);
            //Draw numbers
            Rectangle numberRect = new Rectangle(dest.Left + 10, dest.Top + (dest.Height - 32) / 2, 32, 32);

            DrawNumber(canvas, numberRect, card.left, numbers);
            numberRect = new Rectangle(dest.Right - 10 - 32, dest.Top + (dest.Height - 32) / 2, 32, 32);
            DrawNumber(canvas, numberRect, card.right, numbers);
            numberRect = new Rectangle(dest.Left + (dest.Width - 32) / 2, dest.Top + 10, 32, 32);
            DrawNumber(canvas, numberRect, card.top, numbers);
            numberRect = new Rectangle(dest.Left + (dest.Width - 32) / 2, dest.Bottom - 10 - 32, 32, 32);
            DrawNumber(canvas, numberRect, card.bottom, numbers);
            canvas.Save();
            return(image);
        }