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(); }
public void AddCard(sCard card, int x, int y, bool enemy) { sTableCard tcard = new sTableCard(card, enemy, x, y); ChangeOwnerNearCard(tcard); cards.Add(tcard); }
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); }
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; }
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)); //} }
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); }
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); }