using Microsoft.VisualBasic.Devices; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PuzzlePlayer_Namespace { enum BJSTATE // the different states the game can be in { Setup, // choose how much money the player deploys Game, // play the game Result, // see te result and then restart } struct Card { string name; // for drawing the card, needs to be in format num_of_kind int value; // value of the card int value2; // some cards have two values } internal class BlackJack : Form { BJSTATE state; int money; int deployedMoney = 0; readonly FontFamily BJFont = FontFamily.GenericSansSerif; Size screen = Screen.PrimaryScreen.WorkingArea.Size; // visibility depends on game state Panel SetupPanel; Panel GamePanel; Panel ResultPanel; List<Card> cards; (int,string,Color)[] chipInfo = { (5,"5",Color.Gray), (25, "25", Color.Blue), (50, "50", Color.Green), (100, "100", Color.DarkCyan), (500, "500", Color.Purple), (1000, "1K", Color.Red), (5000, "5K", Color.Orange), (10000, "10K", Color.Gold) }; public object Int { get; private set; } public BlackJack() { state = BJSTATE.Setup; WindowState = FormWindowState.Maximized; BackColor = Color.DarkGreen; Paint += BlackJack_Paint; money = ReadMoney(); SetupUI(); } private int ReadMoney() //TODO read money from local file { return 1000; } private void SetupUI() { //Setup #region SetupPanel SetupPanel = new Panel(); SetupPanel.Size = new Size(screen.Width/2,screen.Height); SetupPanel.Location = new Point(screen.Width / 4, 0); //DefaultPanel.BackColor = Color.Blue; //DEBUG SetupPanel.Paint += Setup_Paint; //money buttons int goofyIndex = 0; //dw for(int j = 1; j <= 2; j++) for(int i = 0; i < 4; i++) { Button b = new Button(); b.Size = new Size(SetupPanel.Width / 4, SetupPanel.Height / 6); // /2 b.Location = new Point(i * b.Size.Width, SetupPanel.Height - b.Size.Height*j); b.Name = goofyIndex.ToString(); // for getting the index for chipInfo later (int, string, Color) chip = chipInfo[goofyIndex]; b.Text = chip.Item2; b.BackColor = chip.Item3; b.Font = new Font(BJFont, b.Size.Width / 5); b.Click += moneyButtonClick; SetupPanel.Controls.Add(b); goofyIndex++; } // Deal button Button dealButton = new Button(); dealButton.Text = "DEAL"; dealButton.Size = new Size(SetupPanel.Width/4, SetupPanel.Height / 6); dealButton.Location = new Point(SetupPanel.Width /2 - dealButton.Width/2, SetupPanel.Height /4); dealButton.Font = new Font(BJFont, dealButton.Size.Width / 5); dealButton.BackColor = Color.DodgerBlue; dealButton.Click += (object o, EventArgs e) => { if (deployedMoney == 0) return; SetupPanel.Hide(); GamePanel.Show(); state = BJSTATE.Game; }; SetupPanel.Controls.Add(dealButton); Controls.Add(SetupPanel); #endregion //Game #region GamePanel GamePanel = new Panel(); GamePanel.Paint += Game_Paint; GamePanel.Size = new Size((int)(screen.Width / 1.5), screen.Height); GamePanel.Location = new Point((screen.Width - GamePanel.Size.Width)/2, 0); GamePanel.BackColor = Color.Red; //DEBUG GamePanel.Hide(); //Hide until the game state is reached Controls.Add(GamePanel); #endregion //Result #region ResultPanel ResultPanel = new Panel(); ResultPanel.Hide(); //Hide until the result state is reached Controls.Add(ResultPanel); #endregion } private void moneyButtonClick(object sender, EventArgs e) { Button b = (Button) sender; (int, string, Color) chip = chipInfo[int.Parse(b.Name)]; if(money >= chip.Item1) { deployedMoney += chip.Item1; money -= chip.Item1; } Invalidate(true); } private void BlackJack_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; //default draw Font moneyFont = new Font(BJFont, screen.Width/50, FontStyle.Bold); g.DrawString("Money: " + money.ToString(), moneyFont, Brushes.Black, new PointF(0,0)); /* switch(state) // paint according to the current state { case BJSTATE.Setup: //Setup_Paint(g); break; case BJSTATE.Game: //Game_Paint(g); break; case BJSTATE.Result: //Result_Paint(g); break; }*/ } private void Setup_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; // draw deployd money // Might update this to butiful chipss string s = "Deployd Money: " + deployedMoney.ToString(); Font deplMoneyFont = new Font(BJFont, SetupPanel.Width / 20, FontStyle.Bold); SizeF pf = g.MeasureString(s, deplMoneyFont); PointF p = new PointF(SetupPanel.Width / 2 - pf.Width / 2, SetupPanel.Height / 2); g.DrawString(s, deplMoneyFont, Brushes.Black, p); } private void Game_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; DrawCard(g, new Point(0, 0), 200, "9_of_spades"); } private void Result_Paint(Graphics g) { } private void DrawChip(Graphics g, Color c, int r, Point pos, string value) { // Chip Brush brush = new SolidBrush(c); g.FillEllipse(brush, pos.X - r, pos.Y - r, r * 2, r * 2); // White Squares int squareSize = r / 2; Rectangle rect = new Rectangle(pos.X - squareSize/2, pos.Y - r, squareSize, squareSize); g.FillRectangle(Brushes.White, rect); rect.Offset(new Point(0, r*2-squareSize)); g.FillRectangle(Brushes.White, rect); rect = new Rectangle(pos.X - r, pos.Y - squareSize/2, squareSize, squareSize); g.FillRectangle(Brushes.White, rect); rect.Offset(new Point(r * 2 - squareSize, 0)); g.FillRectangle(Brushes.White, rect); //text Font f = new Font(BJFont, r/2); SizeF fontSize = g.MeasureString(value.ToString(), f); g.DrawString(value.ToString(), f, Brushes.Black, new PointF(pos.X-fontSize.Width/2, pos.Y-fontSize.Height/2)); } private void DrawCard(Graphics g, Point pos, int width, string cardName) //cardName needs to be in format: num_of_kind { Image img = SettingForm.GetEmbeddedImage("BlackJack.cards." + cardName + ".png"); g.DrawImage(img, pos.X, pos.Y, width, (float)(width * 1.4)); //img is 500x726 } } }