Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Написание игр _ пытаюсь кое чего написать....

Автор: maklir 27.01.2008 22:19

нужно, чтоб символ, например '*' перемещался по экрану при управлении с клавиатуры(не двигался постоянно, как в змейке, а делал шаг при нажатии и удержании клавиши) подскажите с чего начать

Автор: мисс_граффити 27.01.2008 23:16

считываешь нажатый символ.
определяешь, какая это стрелка
затираешь старую *
выводишь новую * в месте в соответствии с тем, какую стрелку нажали

что из этого вызывает затруднения?

Автор: maklir 27.01.2008 23:41

какого типа переменная, имеющаяя значение клавиши?
и можно ли попробовать оформить через 'case'

Автор: volvo 27.01.2008 23:50

Не "имеющая значение клавиши", а хранящая ее код. Char, разумеется. И обрабатывать ее удобнее именно через Case. Посмотри в поиске по поводу совместного использования Case и ReadKey, я думаю ты найдешь много примеров, которые тебе помогут решить задачу...

Автор: maklir 27.01.2008 23:55

большое спасибо, когда закончу, поделюсь творчеством)))))

Автор: Yevgeny 28.01.2008 0:01

Ты спрашивал с чего начать, но это тебе уже подсказали... Я похожую задачу решал, и если нужно, то вот прикреплённый файл:
Прикрепленный файл  KR_kv.PAS ( 857 байт ) Кол-во скачиваний: 694

Тока тут не звёздочка, а прямоугольник!!! smile.gif

Автор: maklir 30.01.2008 0:01


uses crt;

type har=record
sila:integer;
zawnog:integer;
zawgol:integer;
zawjiv:integer;
zawpoyas:integer;
end;
const
hero=#1;
zombie=#2;
zdr=#3;
gold=#36;
var udar,spase,snap:char;zx,zy,Y,ud,X,n:integer;s,hero_damage,zombie_healse,zombie_d
amage,hero_healse:integer;
i,j,hx,hy,mx,my,money:integer;Fh, Fz:file of har; rec:har ;
{-----------------------------------------------------------------------}
{ procedure sozdanie;
begin
assign(fz,'zombie');
rewrite(fz);
with rec do
begin
write('sila');
readln(sila);
write(fz,rec);
write('zawnog');
readln(zawnog);
write(fz,rec);
write('zawgol');
readln(zawgol);
write(fz,rec);
write('zawjiv');
readln(zawjiv);
write(fz,rec);
write('zawpoyas');
readln(zawpoyas);
write(fz,rec);
end;
end;}


procedure life;
begin
gotoxy(hx,hy);
write(zdr);
if(x=hx) and (y=hy) then
begin
write('healse');
hero_healse:=hero_healse+15;
hx:=random(10)+1;
hy:=random(10)+1;
end;
mx:=hx+10;
my:=hy+10;
begin
gotoxy(mx,my);
write(gold);
if(x=mx) and (y=my) then
begin
write('gold');
money:=money+random(10)+1;
hx:=random(10)+1;
hy:=random(10)+1;
end;
end;
end;
{----------------------------------------------------}
procedure fight;
begin

repeat udar:= readkey;
clrscr;
writeln('udary: w-golova,s-nogi,a-jivot.d-poyas');
write('zombie healse',zombie_healse,'/',hero_healse,'hero_healse');
ud:=0;
case udar of
#119: ud:=1;
#115: ud:=2;
#97: ud:=3;
#100: ud:=4;
end;
if (ud=1)or(ud=2)or(ud=3)or(ud=4) then
begin
hero_healse:=hero_healse-random(zombie_damage);
zombie_healse:=zombie_healse-random(hero_damage);
ud:=0;
end;
until(hero_healse<=0) or (zombie_healse<=0);
if hero_healse>0 then
begin
clrscr;
gotoxy(2,40);
write('you win');
n:=n+1;
zx:=random(70)+1;
zy:=random(20)+1;
zombie_healse:=30;
zombie_damage:=10;
s:=0;
end;
if hero_healse<=0 then
begin
clrscr;
gotoxy(40,10);
write('game over press enter');
readln;
snap:=#27;
s:=2;
end;
end;
procedure map;
begin
if (x=zx) and (y=zy) then
begin
gotoxy(10,40);
writeln;
writeln('est zombie press spase to fight');
spase:=readkey;
case spase of
#32: s:=2
end;
if s=2 then
begin
clrscr;
fight;
end;
end;
end;

{---------------------------------------------------------}

begin
{ sozdanie;}
clrscr;
money:=0;
n:=0;
hero_healse:=55;
zombie_healse:=30;
zombie_damage:=10;
hero_damage:=15;
my:=10;
my:=15;
zx:=10;
zy:=20;
hx:=10;
hy:=10;
y:=5;
x:=5;
textbackground(2);
GoToXY(X,Y);
textcolor(1);
writeln(hero);
snap:=readkey;
Repeat snap:=readkey;

textbackground(2);
clrscr;
gotoxy(60,1);
write('chislo pobed=',n);
gotoxy(1,1);
write('health=',hero_healse);
gotoxy(15,1);
write('gold=',money);
gotoxy(Zx,Zy);
write(zombie);
case snap of
#72: y:=y-1;
#80: y:=y+1;
#75: x:=x-1;
#77: x:=x+1;
#102: s:=1;
end;
life;
map;
GoToXY(X,Y);
writeln(hero);


Until snap=#27;
clrscr;

end.
.

минусов много, но в перспективе создание и использование файлов с характеристиками юнитов, возможность игры на разных модулях(картах), может даже возможност выполнения квестов.

Автор: Yevgeny 30.01.2008 2:34

Может для начала лучше заняться созданием движущихся zombie? да и не одного, и чтоб они тоже нападали, возможно даже плодились чтоб, а то так не интересно играть, проиграть неподдаваясь невозможно! smile.gif
Тогда и необходимость в картах отпадёт, просто играть будет интересней!!!

Автор: maklir 30.01.2008 12:44

приму к сведению, хорошая идея)))