Пользователь |
Сообщение: Паскаль (Тема#46227) |
-ReaL-
генерал
: Днепр
С нами с 20.10.09
Посты: 8523
|
по подробней опиши как должна изменяться переменная? цикл или просто типа
y:=y+1;
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
У меня есть класс Животное, которое идентифицируется как лицо(face) и его положение(position). В свою очередь позиция делится на Х и У. Так вот мне надо:
при нажатии D животное перемещается вправо, тоесть на позицию X+1 в массиве. Ну и так далее по другим кнопкам (WASD). Пока что я прописал процедуры по такому типу:
Code:
Procedure Jivotnoe.MoveUp();
begin
y:=y+1;
end;
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
Забил на обьекты и пошел обратно в паскаль. И йопта дописал!!! Теперь будем писать левелы(лабиринты)
жмакаем
Code:
Program game;
Uses crt;
Const
m=20;
n=10;
Wkey = #119;
Akey = #97;
Skey = #115;
Dkey = #100;
Esckey = #27;
Procedure output_mas(var mas:array [1..m,1..n] of char);
var
k,l:integer;
begin
for l:=1 to n do
begin
for k:=1 to m do
begin
write(mas[k,l]);
end;
writeln;
end;
end;
Procedure A_pressed(var mas:array [1..m,1..n] of char; var i:integer; var j:integer);
begin
if (i-1>=1) and (i-1<=m) then
begin
i:=i-1;
mas[i,j]:='*';
mas[i+1,j]:=' ';
end;
end;
Procedure D_pressed(var mas:array [1..m,1..n] of char; var i:integer; var j:integer);
begin
if (i+1>=1) and (i+1<=m) then
begin
i:=i+1;
mas[i,j]:='*';
mas[i-1,j]:=' ';
end;
end;
Procedure W_pressed(var mas:array [1..m,1..n] of char; var i:integer; var j:integer);
begin
if (j-1>=1) and (j-1<=n) then
begin
j:=j-1;
mas[i,j]:='*';
mas[i,j+1]:=' ';
end;
end;
Procedure S_pressed(var mas:array [1..m,1..n] of char; var i:integer; var j:integer);
begin
if (j+1>=1) and (j+1<=n) then
begin
j:=j+1;
mas[i,j]:='*';
mas[i,j-1]:=' ';
end;
end;
var
mas:array [1..m,1..n] of char;
i,j,k,l:integer;
CH:char;
BEGIN
for k:=1 to n do
begin
for l:=1 to m do
begin
mas[l,k]:=' ';
end;
end;
i:=1;
j:=1;
mas[1,1]:='*';
mas[m,n]:='$';
output_mas(mas);
repeat
if keypressed then
begin
CH := Readkey;
if (CH = #97) then
begin
A_pressed(mas,i,j);
clrscr;
output_mas(mas);
end;
if (CH = #100) then
begin
D_pressed(mas,i,j);
clrscr;
output_mas(mas);
end;
if (CH = #119) then
begin
W_pressed(mas,i,j);
clrscr;
output_mas(mas);
end;
if (CH = #115) then
begin
S_pressed(mas,i,j);
clrscr;
output_mas(mas);
end;
end;
until '*'=mas[m,n];
if '*'=mas[m,n] then
begin
clrscr;
writeln('Congratulations!!!');
end;
end.
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
Чуток переделал код и вуаля прилепил екзешник
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
чотто как-то криво прилепилось
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
а, ну или так
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
а зачем там картинка с кинжальчеГом?
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
Чуток переделал код и вуаля
угу, фурычит
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
я думал, что сервак "не хочет видеть" архивы меньше, чем несколько килобайт, поэтому решил закинуть картинку, что б архив побольше весил) Авось прилепится нормально) Не захотел..
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
Ну что ж На недельке наклепаю пару уровней + буду думать на собственным редактором уровней
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
Щас делаю редактор левелов и возникла проблема - как прописать комбинацию клавиш? Идея такая: у меня есть "собачка", которая бегает по полю(управление wasd), но если нажать пробел, она начинает строить стенку. Так вот проблема в чем - в коде насчет wasd прописываются клавиши на которые реагировать и как. Но если я в процедуру (например передвижения вправо D) пропишу через "if", типа "если нажан пробел, то начать присваивать ''*", что бы строить стенку, он нифига не работает Уже по разному пробовал прописывать и нехочет как надо. Пока что добился результата, что надо нажать пробел, а потом уже wasd и тогда она построить. А надо что бы wasd и пробел были нажаты одновременно и рисовало стенку.
|
|
|
3lnc
подполковник
С нами с 19.02.09
Посты: 2120
|
Обработка пробел+wasd в зажиме - не вариант, совершенно. Еще куда ни шло модульные+wasd. Комбинации немодульных кнопок - нативно виндой не поддерживаются, так что не забивай голову.
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
Хм... я тут прочитал, что можно попробовать сделать через гарячие клавиши... завтра буду смотреть)
|
|
|
NaCl
предатель Родины
С нами с 28.08.08
Посты: 24065
|
SPACE вместо знака " " напиши))) или не то?
if SPACE to...
|
|
|
Franchesko
Пет Рарка
Возраст: 31
: Киев
С нами с 13.05.08
Посты: 15445
|
эм... я не уверен, но это вроде бы в других языках такое. В паскале у каждой клавиши свой код. У пробела #32. Насчет конструкции как ты написал - не работает как надо. Работает так что ты нажимаешь пробел, а затем нажимаешь вбок и оно тогда рисует. Если не нажать пробел, то жмешь вбок, оно не реагирует, жмешь опять, оно перемещает на одну единицу вбок. А надо что бы перемещало постоянно, а если нажать одновременно еще и пробел, то начало рисовать стену
|
|
|
Time2Die4U
капитан
Возраст: 43
С нами с 17.06.09
Посты: 501
|
Ребят а вы кейсы в Паскале не учили или в этом случае они не подходят?
|
|
|