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

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

17.12.2010, 11:40. Показов 7859. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2010, 11:40
Ответы с готовыми решениями:

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

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

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

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

1
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
17.12.2010, 16:55 2
Амангельды, исходник можно скачать здесь
0
17.12.2010, 16:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2010, 16:55
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru