Игра "21" Нужна помощь - C#

Узнай цену своей работы

Формулировка задачи:

Здаствуйте! Помогите с программой. Игра "21", все работает, но два нюанса, первый это при одинаковом кол-ве очков, победа засчитывается мне, должно выводить сообщение о ничье. И 2-ое самое важное что программа закрывается сама после одной партии. Помогите пожалуйста исправить.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace _21
{
    public partial class Form1 : Form
    {
        List<int> cardpack_small = new List<int>()
    {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
        30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52};
        int handofPl = 0, handofCom = 0, firstcard =0,aceP=0,aceC=0;
       int ctabl = 3;
 
     Random randomizer = new Random();

        public Form1()
        {
            InitializeComponent();
           
        }
        /// <summary>
        /// первая выдача карт игрокам
        /// (по две карты)
        /// </summary>
        public void go_on()
        {
            firstcard = randomizer.Next(1,cardpack_small.Count);
            card1c.Image = imageList1.Images[0];
            cardpack_small.RemoveAt(firstcard);
 
            takingcard(card1c,false,firstcard);

            int number = randomizer.Next(1,cardpack_small.Count);
            card1p.Image = imageList1.Images[number];
            cardpack_small.RemoveAt(number);
            takingcard(card1p,true,number);
            
            number = randomizer.Next(1,cardpack_small.Count);
            card2c.Image = imageList1.Images[number];
            cardpack_small.RemoveAt(number);
            takingcard(card2c,false,number);
           
            number = randomizer.Next(1,cardpack_small.Count);
            card2p.Image = imageList1.Images[number];
           cardpack_small.RemoveAt(number);
           takingcard(card2p,true, number);
 
           if (aceC==1&&handofCom==10)
           {
               MessageBox.Show("У крупье 21!"); this.Close();
           }else
    {
               if (aceP==1&&handofPl==10)
    {
        MessageBox.Show("ОЧКО!"); this.Close();
    }
    }

        }
        /// <summary>
        /// Показ раздач
        /// </summary>
        /// <param name="sender"></param>
        public void takingcard(object sender,bool PL, int nn)
        { 
            PictureBox animate = sender as PictureBox;
 
            animate.Height = 190;
 
            if (nn >= 40 || nn == 10 || nn == 20 || nn == 30)
            {
                if (PL)
                {
                    handofPl = handofPl + 10;
                }
                else handofCom = handofCom + 10;
                
            }
            else
            {
                if (nn % 10 != 1)
                {
                    if (PL)
                    {
                        handofPl = handofPl + (nn % 10);
                    }
                    else handofCom = handofCom + (nn % 10);
                }
                else
                {
                    if (PL)
                    {
                        if (aceP == 1)
                        { handofPl = handofPl + 1; }
                        else
                        {
                            aceP = 1; 
                        }
                    }
                    else
                    {
                        if (aceC == 1)
                        { handofCom = handofCom + 1; }
                        else
                        {
                            aceC = 1; 
                        }
 
                    }
                }
            } if (PL&&!cach())
            {
                MessageBox.Show("ПЕРЕБОР"); this.Close();
            }
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            go_on();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            List<PictureBox> tabl = new List<PictureBox>() { card1c, card1p, card2c, card2p, card3c, card3p, card4c, card4p, card5c, card5p, card6c, card6p, card7c, card7p, card8c, card8p };
            ctabl = ctabl + 2;
            int number = randomizer.Next(1,cardpack_small.Count);
            tabl[ctabl].Image = imageList1.Images[number];
            cardpack_small.RemoveAt(number);
            takingcard(tabl[ctabl], true, number); 
            
        }
        public bool cach()
        {
            if (handofPl+aceP>21)
            {
                return false;
            }
            else
            {
                if (handofPl+aceP*11>21)
                {
                    label1.Text = (handofPl+aceP).ToString();
                    label2.Text = (handofPl+aceP).ToString();
                    
                    return true;
                }
                else
                {
                    label2.Text = (handofPl + aceP*11).ToString();
                    label1.Text = (handofPl+aceP).ToString();
                    return true;
                }
            }
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            ctabl = 2;
            card1c.Image = imageList1.Images[firstcard];
            if ((handofCom + 11 * aceC) <= 21 && (handofCom + 11 * aceC) > 16 || (handofCom + aceC) <= 21 && (handofCom + aceC) > 16)
            {
                endgame();
            }
            while ((handofCom+aceC<=21)&&!((handofCom + 11 * aceC) <= 21 && (handofCom + 11 * aceC) > 16 || (handofCom + aceC) <= 21 && (handofCom + aceC) > 16))
            {
                List<PictureBox> tabl = new List<PictureBox>() { card1c, card1p, card2c, card2p, card3c, card3p, card4c, card4p, card5c, card5p, card6c, card6p, card7c, card7p, card8c, card8p };
                ctabl = ctabl + 2;
                int number = randomizer.Next(1,cardpack_small.Count);
                tabl[ctabl].Image = imageList1.Images[number];
                cardpack_small.RemoveAt(number);
                takingcard(tabl[ctabl], false, number);
            };
            if (handofCom+aceC>21)
            {
                MessageBox.Show("ПОБЕДА!"); this.Close();
            }
            else
            {
                endgame();
            }
        }
 
        private void endgame()
        {
            if (handofCom+11*aceC < 21)
            {
                handofCom = 11 * aceC + handofCom;
            }
            else
            {
                handofCom = handofCom + aceC;
            }
            if (handofPl + 11 * aceP < 21)
            {
                handofPl  = 11 * aceP + handofPl;
            }
            else
            {
                handofPl = handofPl + aceP;
            }
            if (handofCom>handofPl)
            {
                MessageBox.Show("Компьютер выиграл");
            }
            else
            {
                MessageBox.Show("ПОБЕДА!");
            };
            this.Close(); 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            int dn; string named;
            timer1.Interval = 1000;
            timer1.Enabled = true;
            label4.Text =
"Сегодня: " + DateTime.Now.Date.ToShortDateString();
// вывести день недели
dn = (int)DateTime.Now.DayOfWeek;
switch (dn)
{case 0: named = "воскресенье"; break;
case 1: named = "понедельник"; break;
case 2: named = "вторник"; break;
case 3: named = "среда"; break;
 
case 4: named = "четверг"; break;
case 5: named = "пятница"; break;
case 6: named = "суббота"; break;
default: named = " нетути"; break;
} ;
label4.Text += "\n" + named ;
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            // получить системное время
            label5.Text = DateTime.Now.ToLongTimeString();
        }

    }
}
Что помочь никто не может?
Что помочь никто не может?

Решение задачи: «Игра "21" Нужна помощь»

textual
Листинг программы
            if (handofCom>handofPl)
            {
                MessageBox.Show("Компьютер выиграл");
            }
            else if (handofCom == handofPl)
            {
                MessageBox.Show("Ничья");
            }
            else
            {
                MessageBox.Show("ПОБЕДА!");
            };

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы