0 / 0 / 0
Регистрация: 06.04.2009
Сообщений: 36
|
|
1 | |
Игра Пятнашки17.12.2010, 11:40. Показов 8210. Ответов 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 | |
17.12.2010, 11:40 | |
Ответы с готовыми решениями:
1
Пятнашки игра Пятнашки Игра пятнашки 3х3, оценочная функция |
![]() 324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
|
|
17.12.2010, 16:55 | 2 |
Амангельды, исходник можно скачать здесь
0
|
17.12.2010, 16:55 | |
Помогаю со студенческими работами здесь
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-фреймворков, отлично. . .
|