0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
1

Игра Пятнашки

17.12.2010, 11:40. Показов 8210. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я не очень хорошо знаю Делфи, скопировал с методички код проги, запускаю выдает ошибку, помогите сделать.
Вот сама методичка:
Лабораторная работа №4. Разработка игровых проектов

6.1. Создать игру “Пятнашки”. Привила игры стандартны – распределить 15 фишек с номерами по порядку

Методика выполнения работы.

1. Откройте новый проект.
2. Установите для Form1 свойства из Таблицы 10:
Таблица 10.
Свойство Значение
Caption Пятнашки
Width 263
Height 281
3. Опишем переменные, и константы которые будут необходимы нам для работы программы.
const
H = 4; W = 4; // размер поля - 4х4
CH = 64; CW = 64; // размер клеток - 16х16
var
// правильное расположение фишек
stp : array[1..H, 1..W] of byte =
(( 1, 2, 3, 4),
( 5, 6, 7, 8),
( 9,10,11,12),
(13,14,15, 0));
// игровое поле
pole: array[1..H, 1..W] of byte;
ex, ey: integer; // координаты пустой клетки
4. Вначале надо нарисовать вертикальные и горизонтальные линии. Создадим процедуру DrawPole, которая будет рисовать эти линии. Объявите процедуру DrawPole в объявлении TForm. После этого опишем тело процедуры.
procedure TForm1.DrawPole;
var
i,j: integer;
x,y: integer; // x,y - координаты вывода текста в клетке
begin
// вертикальные линии
for i:= 1 to W - 1 do
begin
Canvas.MoveTo(i*CW,0);
Canvas.LineTo(i*CW,ClientHeight);
end;
// горизонтальные линии
for i:= 1 to H - 1 do
begin
Canvas.MoveTo(0,i*CH);
Canvas.LineTo(ClientWidth,i*CH);
end;
// содержимое клеток
// x,y - координаты вывода текста
for i:= 1 to H do
begin
y:=(i-1)*CH + 15;
for j:=1 to W do
begin
x:= (j-1)*CW + 15;
case Pole[i,j] of
0: Canvas.TextOut(x,y,' ');
1..9: Canvas.TextOut(x,y,
' '+IntToStr(Pole[i,j])+' ');
10..15: Canvas.TextOut(x,y,IntToStr(Pole[i,j]));
end;
end;
end;
end;
5. Напишем процедуру Mix, она будем перемешивать фишки и записывать в массив pole нужные значения. Эту процедуру нужно описать там же где и процедуру DrawPole.
procedure TForm1.Mix;
var
x1,y1: integer; // пустая клетка
x2,y2: integer; // переместить в пустую
d: integer; // направление, относительно
// пустой клетки
i: integer;
begin
x1:=4;
y1:=4;
randomize;
for i:= 1 to 150 do
begin
repeat
x2:=x1;
y2:=y1;
//генерируем случайное число
d:=random(4)+1;
case d of
1: dec(x2);
2: inc(x2);
3: dec(y2);
4: inc(y2);
end;
until (x2>=1) and (x2<=4) and (y2>=1) and (y2<=4);
// здесь определили фишку, которую
// надо переместить в пустую клетку
Pole[y1,x1] := Pole[y2,x2];
Pole[y2,x2] := 0;
x1:=x2;
y1:=y2;
end;
// запомним координаты пустой клетки
ex:= x1;
ey:= y1;
end;
6. Напишем обработчик события OnMouseDown для формы и запрограммируем процедуру которая будет обменивать местами две указанные фишки.
procedure TForm1.FormMouseDown(Sender: TObject;Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
cx,cy: integer; // координаты клетки
begin
// преобразуем координаты мыши в координаты клетки
cx := Trunc(X / CW) + 1;
cy := Trunc(Y / CH) + 1;
Move(cx,cy);
end;

procedure Move(cx,cy: integer);
// cx,cy - клетка, в которой игрок
// сделал щелчок мышью
var
r: integer; // выбор игрока на запрос о
// новой игре
begin
// проверим, возможен ли обмен
if not (( abs(cx-ex) = 1) and (cy-ey = 0) or
( abs(cy-ey) = 1) and (cx-ex = 0))
then exit;
// Переместим фишку из x,y в ex,ey
Pole[ey,ex] := Pole[cy,cx];
Pole[cy,cx] := 0;
ex:=cx;
ey:=cy;
// нарисовать поле
Form1.DrawPole;
// если игра окончена вывести предложение о
// новой игре
if Finish then
begin
r := MessageDlg('Цель достигнута!'+ #13+
'Еще раз?',mtInformation,[mbYes,mbNo],0);
// завершить работу программы
if r = mrNo then Form1.Close;
end;
end;
7. Опишем процедуру для начала новой игры и функцию проверки правильности выставления всех фишек.
var
cx,cy: integer; // координаты клетки
begin
// преобразуем координаты мыши в координаты клетки
cx := Trunc(X / CW) + 1;
cy := Trunc(Y / CH) + 1;
Move(cx,cy);
end;

procedure Move(cx,cy: integer);
// cx,cy - клетка, в которой игрок
// сделал щелчок мышью
var
r: integer; // выбор игрока на запрос о
// новой игре
begin
// проверим, возможен ли обмен
if not (( abs(cx-ex) = 1) and (cy-ey = 0) or
( abs(cy-ey) = 1) and (cx-ex = 0))
then exit;
// Переместим фишку из x,y в ex,ey
Pole[ey,ex] := Pole[cy,cx];
Pole[cy,cx] := 0;
ex:=cx;
ey:=cy;
// нарисовать поле
Form1.DrawPole;
// если игра окончена вывести предложение о
// новой игре
if Finish then
begin
r := MessageDlg('Цель достигнута!'+ #13+
'Еще раз?',mtInformation,[mbYes,mbNo],0);
// завершить работу программы
if r = mrNo then Form1.Close;
end;
end;
8. Опишем процедуру для начала новой игры и функцию проверки правильности выставления всех фишек.
begin
ClientWidth := CW * W;
ClientHeight := CH * H;
Canvas.Font.Name := 'Times New Roman';
Canvas.Font.Color:=clNavy;
Canvas.Font.Size := 22;
NewGame;
end;
1. В обработчике события OnPaint формы запишите.
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.DrawPole;
end;
2. Запустите программу.
0
17.12.2010, 11:40
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.12.2010, 11:40
Ответы с готовыми решениями:

Пятнашки
Есть программа пятнашки, нужно что бы можно было менять размер поля. Сделала кнопки которые меняют константы, но что бы изменить форму,...

игра Пятнашки
Здравствуйте!Подскажите пожалуйста как сделать игру 'Пятнашки' с помощью stringgrid.Заранее спасибо)

Игра пятнашки 3х3, оценочная функция
Пользователь вводит начальную матрицу 3Х3 и конечную, и программа с помощью оценочной функции выводит количество раскрытых ветвей, и...

1
 Аватар для Romantik_FM
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
17.12.2010, 16:55 2
Амангельды, исходник можно скачать здесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2010, 16:55
Помогаю со студенческими работами здесь

Игра "Пятнашки"
Бессоница - злая тётка... На AlphaSkin игруха.

Игра "Пятнашки"
Вот создал игру «Пятнашки» И хочу доработать в игре следующее: Пункты в главное меню, позволяющие: * выполнять настройку...

Пятнашки
Вот у меня такой вопрос. На форме 15 кнопок, одну из них можно передвинуть. Как узнать что соседняя клетка пустая???

Пятнашки
Доброго времени суток! Помогите решить следующую задачу: Нужно написать программу наподобие игры пятнашки... Суть проблемы в следующем:...

Пятнашки)))
подскажите пожалуйста как это делается)))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru