0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
|
|
Игра Пятнашки17.12.2010, 11:40. Показов 8232. Ответов 1
Метки нет Все метки)
(
Я не очень хорошо знаю Делфи, скопировал с методички код проги, запускаю выдает ошибку, помогите сделать.
Вот сама методичка: Лабораторная работа №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 | |
Ответы с готовыми решениями:
1
Пятнашки игра Пятнашки Игра пятнашки 3х3, оценочная функция |
![]() 324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
|
|
17.12.2010, 16:55 | |
Амангельды, исходник можно скачать здесь
0
|
17.12.2010, 16:55 | |
Помогаю со студенческими работами здесь
2
Игра "Пятнашки" Игра "Пятнашки" Пятнашки Пятнашки Пятнашки))) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
|
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
|
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations
рестрикции доступа на сервер sshd
статья:
https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
|
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
|
Многопоточное программирование в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
|
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
|
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
|
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
|
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
|
Образование и практика
Igor3D 21.03.2025
Добрый день
А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
|