Автор работы: Пользователь скрыл имя, 12 Ноября 2009 в 17:46, Не определен
Игра кости на Delphi
//Процедура защиты
от ввода недопустимых
begin
//если введен символ "1", то следующим может быть только "0", "1" или "2"
if edit1.Text='1' then
begin
edit1.MaxLength:=2;
case key of
'0'..'2',#8:
else key:=chr(0); //иначе символ не отображать
end
end
else //Пока ничего не введено (ноль не отображается).
case key of
'1'..'9',#8: //отображать
только цифры. Разрешено
else key:=chr(0);
end;
//Если введена цифра 2,3,4,5,6,7,8 или 9 максимальная длинна строки 1 символ.
if (edit1.Text='2') or (edit1.Text='3') or (edit1.Text='4')
or(edit1.Text='5') or (edit1.Text='6') or (edit1.Text='7')
or(edit1.Text='8') or (edit1.Text='9') then
edit1.MaxLength:=1
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
// Для поля ввода ставки запрет ненужных символов анологичен.
begin
edit2.MaxLength:=3;
if (edit2.Text='')
or (strtoint(edit2.text)>
case key of
'1'..'9',#8:
else key:=chr(0)
end
else
case key of
'0'..'9',#8:
else key:=chr(0)
end
end;
//Основная часть программы. Клик на кнопке 'Играть'.
procedure TForm1.Button1Click(Sender: TObject);
//Используемые переменные.
// St - ставка игрока.
// bank- переменная отвечающая за кол-во очков.
// Sum - сумма цифр двух костей.
// Chislo - число загаданное игроком.
// K1,k2 - выпавшие кости.
var sum,chislo,k1,k2:byte;st,bank:
// "Перехват" возможных ошибок.
//////////////////////////////
begin
// Если не введены ни число ни ставка.
if (edit1.Text='') and (edit2.Text='') then
begin
// Выводится соответствующее
messagedlg('Введите число и
edit1.SetFocus;
exit;
end;
// Если не введено число.
if edit1.Text='' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Введите число',mterror,[mbok],0);
edit1.SetFocus;
exit;
end;
// Если не введена ставка.
if edit2.Text='' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Сделайте ставку',mterror,[mbok],0);
edit2.SetFocus;
exit;
end;
// Если ставка равна нолю
if edit2.Text='0' then
begin
// Выводится соответствующее сообщение и программа выходит из процедуры.
messagedlg('Ноль это не
edit2.SetFocus;
exit;
end;
//
Преобразовываем строковые
//
заносим в соответствующие
st:=strtoint(edit2.text);
chislo:=strtoint(edit1.text);
// Если игрок загадал единицу.
if chislo=1 then
begin
// Выводится соответствующее
messagedlg('Сумма цифр двух
'не может быть равна - 1.',mterror,[mbok],0);
edit1.Text:='';
edit1.SetFocus;
exit;
end;
//
Если игрок сделал ствку
if st>strtoint(l4.caption) then
begin
// Выводится соответствующее
messagedlg('В долг играть
edit2.SetFocus;
exit;
end;
//////////////////////////////
// "Прячем" компоненты для вывода иллюстраций.
image1.Visible:=false;
image2.Visible:=false;
// "Показываем" компоненты (экраны) для вывода AVI-файлов.
panel1.Visible:=true;
panel2.Visible:=true;
// Открываем медиаплейеры и проигрываем AVI-файлы.
// Не предусматриваем исключения т.к. предусмотрели при закрытии
// формы для ввода путей к AVI - файлам.
mp1.Open;
// Задаём размеры области вывода AVI-файла.
mp1.DisplayRect:=rect(0,0,105,
// Воспроизведение
mp1.Play;
mp2.Open;
// Задаём размеры области вывода AVI-файла.
mp2.DisplayRect:=rect(0,0,105,
// Воспроизведение
mp2.Play;
// Устанавливаем задержку выполнения программы.
// Что-бы проиграть AVI-файл.
sleep(700);
// "Прячем" компоненты (экраны) для вывода AVI-файлов.
panel1.Visible:=false;
panel2.Visible:=false;
// "Показываем" компоненты для вывода иллюстраций.
image1.Visible:=true;
image2.Visible:=true;
// Включаем генератор случайных чисел.
randomize;
// "Бросаем" кубики.
//
Присваеваем соответствующим
k1:=random(6)+1;
k2:=random(6)+1;
// Заносим в переменную сумму цифр костей.
sum:=k1+k2;
// Создаём битовый образ для вывода изображения первого кубика.
r1:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
//
Имя рисунка указываем с
r1.LoadFromResourceName(
// Выводим картинку.
image1.Canvas.Draw(0,0,r1);
//
Создаём битовый образ для
вывода изображения второго
r2:=tbitmap.Create;
// Загружаем картинку из файла ресурсов.
//
Имя рисунка указываем с
r2.LoadFromResourceName(
// Выводим картинку.
image2.Canvas.Draw(0,0,r2);
{=============================
// Следующая
часть программы определяет
// А так же
величину выигрыша или
// Если загаданное число равно сумме выпавших костей.
if sum=chislo then
begin
// Ставку увеличиваем в 4 раза, прибавляем к имеющимся очкам в банке.
bank:=strtoint(l4.caption)+4*
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о выигрыше и его кол-во.
l5.Caption:='Невероятно!!! Вы угадали!!!'+#13+
'Выигрыш - '+inttostr(4*st);
end
else
// Следуюшее условие. Если и загаданное число и сумма цифр двух
// костей одновременно больше или меньше семи.
if (chislo<7) and (sum<7) or (chislo>7) and (sum>7) then
begin
// Ставку прибавляем к имеющимся очкам в банке.
bank:=strtoint(l4.caption)+st;
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о выигрыше и его кол-во.
l5.Caption:='Вы выиграли - '+inttostr(st)+#13+
'Вам определённо везёт!';
end
else
// Все остальные ситуации - проигрышные.
begin
// От имеющихся очей в банке отнимаем ставку.
bank:=strtoint(l4.caption)-st;
// В поле для вывода кол-ва очей заносим теперешнее значение.
l4.Caption:=inttostr(bank);
// В метку для вывода информации
// выводим сообщение о проигрыше и его кол-во.
l5.Caption:='Вы проиграли - '+inttostr(st)+#13+
'Попробуйте ещё!';
end;
//
Определение победы или
// Если кол-во очей в банке игрока превышает 1000, игрок победил.
if strtoint(l4.caption)>=1000 then
// С помощью диалогового окна с одной кнопкой
// выводим сообщение о победе в игре.
begin
messagedlg(' Вы обанкротили казино!!!'+#13+
'Вы можете начать заново.',mtcustom,[mbok],0);
// Свойству "доступность" кнопки и пункту меню 'Играть'
// присваеваем значение False.
n3.Enabled:=false;
button1.Enabled:=false;
end;
// Если кол-во очей в банке игрока равно 0, игрок проиграл.
//
Заметим, что кол-во очей в
банке не может быть
// т.к. игрок не может поставить больше чем есть в банке,
// поэтому не используем знак '<='.
if strtoint(l4.caption)=0 then
// выводим сообщение о поражении в игре.