Игра "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("ПОБЕДА!");
};