2 способ. Передать управление кораблю.
То есть, стать не "кошкой", а "мышкой". Пусть, например, подлодка тоже движется только с другой скоростью, и стреляет через определенные промежутки, а Вы с помощью клавиш (вправо и влево) замедляете или ускоряете движение корабля...
3 способ. Сделать игру для двоих...

Рис.46. Форма игры для двоих
Суть игры:
При запуске игры на правой панели появляется меню выбора режимов игры:
Игра на двоих,
Игра подлодкой против компьютера корабля,
Игра кораблем против компьютера подлодки. Далее можно просмотреть управление, чтобы скрыть управление надо нажать на кнопку скрыть.
Затем выбрав режим игры нажать кнопку игра.
После этого надо потопить противника.
Количество жизней:
На верхней панели отображаются количество попаданий.
3 попадания в подлодку или 10 попаданий в корабль и кто-то тонет.
Задание 8. Создать игру «Ипподром»
Целью задания является создания игры, которая уже будет похожа на настоящую тем, что в ней будет использована графика и она будет динамическая.
Мы создадим компьютерный вариант скачек. Свой ипподром, но не лошадиный, а морской. И назовем соответственно: Морской ипподром.
Итак, что из себя представляет игра? На игровом поле находится 5 фишек (аналоги лошадей). По команде фишки начинают двигаться по прямой на определенное количество клеток. Побеждает та, которая придет к финишу первой.
Вот и все. При разработке подобных программ разработчики используют массивы и циклы. Попытаемся обойтись без них.
Предварительная подготовка:
1. Скачайте рисунки к игре
2. Поместите рисунки в папку Hippodrome.
Расставляем компоненты.
3. Откройте Delphi.
4. Сохраните свой проект в папке Hippodrome- ту, где находятся картинки.
5. На форму поместите компонент Image и, в его свойство Picture, загрузите рисунок fonippod. jpg.
6. Свойству Stretch (растяжка) присвойте значение True (чтобы рисунок подгонялся под размеры компонента).
7. На рисунок поместите пять кнопок BitBtn (страница Additional) - это наши лодки.
8. В свойство Gryph каждой кнопки поместите изображение соответствующего корабля.

Рис.47. Форма игры
9. На форму поместите компонент Panel. А на нее следующие компоненты:
a. Элемент RadioGroup
b. 5 элементов RadioButton
c. Кнопка «Старт»- элемент Button
d. Элемент GroupBox
e. 5 элементов Label
f. Элемент Label6
g. Таймер
На этом оформление программы пока закончено. Приступаем к программированию.
Что будет делать программа? При нажатии на кнопку Старт, лодки начинают двигаться слева направо. Та, которая первая достигнет отметки 600 пикселов, будет победителем.
Управляет движением лодок таймер. Его и начнем программировать.
10. Сделайте двойной щелчок по таймеру. Откроется процедура обработки события:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
end;
11. Между begin и end пишем код:
randomize; - запускаем процедуру генераций счетчика случайных чисел;
bitbtn1.Left:= bitbtn1.Left+random(10); - перемещаем кнопку на случайное количество точек вправо в диапазоне от 0 до 10.
bitbtn2.Left:= bitbtn2.Left+random(10);- аналогично и со всеми кнопками.
bitbtn3.Left:= bitbtn3.Left+random(10);
bitbtn4.Left:= bitbtn4.Left+random(10);
bitbtn5.Left:= bitbtn5.Left+random(10);
Эти операторы дадут нам видимость движения, а случайный выбор - видимость соревнования.
12. Интервал срабатывания таймера поставьте равный 50.
13. Запустите программу, посмотрите, что получилось. Кнопки скачут не останавливаясь? Правильно. Нужно придумать, как их остановить.
14. Вернитесь в режим проектирования.
Было бы очень просто написать: if bitbtn1.Left> 600 then Timer1.Tnabled:=false.
И все. Но! Как узнать, какая лодка пришла к финишу первой, а какая последней?
Воспользуемся свойством Tag, который есть у всех компонентов, следовательно, у BitBtn тоже. Это свойство Delphi не нужно, сделано оно специально для программистов. Хранить в нем можно любое целое число.
По умолчанию, это свойство равно 0 для всех компонентов. Мы же будем хранить в этом свойстве место, занятое лодкой.
15. Еще раз двойной щелчок по таймеру. Добавьте следующие строки:
if bitbtn1.Left> 600 then
if bitbtn1.Tag=0 then
begin
n:=n+1;
bitbtn1.Tag:=n;
label1.Caption:='Желтая - '+IntToStr (bitbtn1.Tag)+' место';
end;
16. Разберитесь с этим куском кода, здесь должно быть все понятно. Далее аналогично:
if bitbtn2.Left> 600 then
if bitbtn2.Tag=0 then
begin
n:=n+1;
bitbtn2.Tag:=n;
label2.Caption:='Розовая - '+IntToStr (bitbtn2.Tag)+' место';
end;
if bitbtn3.Left> 600 then
if bitbtn3.Tag=0 then
begin
n:=n+1;
bitbtn3.Tag:=n;
label3.Caption:='Фиолетовая - '+IntToStr (bitbtn3.Tag)+' место';
end;
if bitbtn4.Left> 600 then
if bitbtn4.Tag=0 then
begin
n:=n+1;
bitbtn4.Tag:=n;
label4.Caption:='Красная - '+IntToStr (bitbtn4.Tag)+' место';
end;
if bitbtn5.Left> 600 then
if bitbtn5.Tag=0 then
begin
n:=n+1;
bitbtn5.Tag:=n;
label5.Caption:='Голубая - '+IntToStr (bitbtn5.Tag)+' место';
end;
17. Определяем победителя по формуле:
if n>4 then
begin
timer1.Enabled:=false;
groupBox1.visible:=true;
if (radioButton1.Checked) and (bitbtn1.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton2.Checked) and (bitbtn2.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton3.Checked) and (bitbtn3.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton4.Checked) and (bitbtn4.Tag=1) then label6.Caption:='Вы победили!';
if (radioButton5.Checked) and (bitbtn5.Tag=1) then label6.Caption:='Вы победили!';
end
else label6.Caption:='Вы проиграли...';
18. Не забудьте зарегистрировать переменную n, как тип Integer.
implementation
var n:integer;
{$R *.DFM}
19. Проверьте, работают ли кнопки так, как надо. Выскакивает ли надпись 'Вы победили!', если угадан победитель. Появляются ли места, занятые участниками гонки?
Мне не нравится то, что гонка начинается как только произошла загрузка формы. Это не есть хорошо. Поэтому вначале игры таймер должен быть отключен.
20. В инспекторе объектов Таймера выберите свойство Enabled:= False.
21. А в обработчик события кнопки Старт прописываем:
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
22. Далее все просто. Или, как говорят математики, тривиально. Наводим красоту, кое-что до поры до времени прячем, кое-что отключаем. И игра готова.
Самостоятельно: Добейтесь того, чтобы игра выглядела как на рисунке

Рис.48. Форма игры
Тотализатор.
Цель: переоборудовать игру для игры на деньги.
Идея: Дать возможность делать ставки. Тотализатор будет работать следующим образом:
В начале игры у Вас есть 1000 долларов. ВЫ можете ставить любую сумму, не бо`льшую, той, что у Вас есть, на любую лошадь (то есть лодку). Если Ваша лодка приходит первой, то сумма, поставленная на лодку, увеличивается в два раза. Если ваша лодка приходит второй, то Вам возвращаются деньги, если же лодка приходит 3, 4 или 5-ой, то Ваши деньги пропадают.
Необходимо также предусмотреть, чтобы была возможность делать ставки на любое количество лодок.
1. Откройте Delphi и загрузите проект игры
В любом тотализаторе есть возможность поставить не на одну, а на несколько лошадей. У нас эта возможность тоже должна быть. Однако кнопки RadioButton позволяют ставить только на одну лошадь (то есть лодку). Значит, долой их.
2. Удалите все пять радиокнопок.
3. Вместо них поставьте 5 CheckBox-ов. Они находятся на панели Standart.
4. Поставьте на форму компонент GroupBox2. А в него поместите 5 компонентов Edit.
После данных манипуляций фрагмент данной формы должен быть похожий на следующий:

Рис.49. Фрагмент формы приложения
5. Свойства Text всех компонентов Edit я изменил на ----------, а сами свойство Enabled:= False, чтобы отключить их, при начале игры.
6. Программируем работу флажка (CheckBox1):
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If (sender as TCheckBox=CheckBox1) then
begin
If checkbox1.checked=false then //если флажок отключен, то
begin
Edit1.enabled:=false; // отключаем edit1
Edit1.Color:=clBtnFace;
Edit1.Text:='----------------';
end;
If checkbox1.checked=true then //если флажок включен, то
begin
Edit1.enabled:=true; // включаем Edit1.
Edit1.Color:=clWhite;
Edit1.Text:='';
end;
end;
7. Аналогично создайте обработчики событий для всех остальных флажков.
Так как в Edit мы будем вводить только цифры, то пишем обработчик события, чтобы это устранить.
8. Выберите элемент Edit1 и щелкните в Инспекторе объектов по закладке Events.
9. В событии OnKeyPress (при нажатии) введите:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not ((key>='0') and (key<='9') or (key=#8)) - все кнопки, кроме цифр и Backspase
игнорируются.
then key:=chr(0);
end;
Далее, всё остальное Вам известно. Проявляйте творчество. Посмотрите, как сделана моя программа.

Рис.50. Форма приложения
Задание 9. Создать игру «21»
Игры, подобные данной, претендуют на звание интеллектуальных. На данном этапе в соревнование с человеком должна вступить машина. Работу компьютера должны прописать мы сами.
Под искусственным интеллектом мы будем понимать адекватные действия машины на действия человека. Вообще говоря, это слишком сложная задача и ее решением занимается специальная наука - кибернетика.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Основные порталы (построено редакторами)
