Меня сегодня убили С помощью Вольвы сдала программку с графикой на 5 ^_^ Но сегодня дали курсавик. Змейка. Полистала тут форум, одни исходники. Хочется написать самой, ну или кусочки кодов украсть. Объекты еще не проходили, но без них думаю неполучится написать. Если не трудно. Можете помочь сделать игрушку... Объяснить с чего начать, привести парочку примеров ( Я НЕ КОГО НЕ ЗАСТАВЛЯЮ НИЧЕГО ДЕЛАТЬ, ПРОСТО ПРОШУ ПОМОЧЬ, КОМУ НЕ ТЯЖЕЛО) кусочков кодов и для чего они служат, просто совести не хватит взять чужое, и впихнуть, да и сама должна понять, как такое делается...
На самом деле, FIFO не обязательно. Если не жалко памяти и есть возможность хранить состояния всех точек поля (экрана), то может быть даже проще.
Вот простенькая реализация змейки с FIFO, я сейчас набросал с учетом твоих требований (юниты, текст с возможностью подключения графики). Управление на стрелочках, конец игры при ударе в стенку, самопересечения допускаются пока. Поиграйся и попробуй разобраться. А потом можно будет и без фифы сделать - кстати, так даже проще отлавливать самопересечения.
procedure SetMode(m: tMode); function MinX: integer; function MaxX: integer; function MinY: integer; function MaxY: integer; procedure ShowBoard; procedure Show(p: tPict; x,y:integer);
implementation
procedure SetMode(m: tMode); begin Mode:=m end;
function MinX: integer; begin case Mode of Gr: ; Tx: MinX:=Lo(WindMin)+1; end end;
function MaxX: integer; begin case Mode of Gr: ; Tx: MaxX:=Lo(WindMax)+1; end end;
function MinY: integer; begin case Mode of Gr: ; Tx: MinY:=Hi(WindMin)+1; end end;
function MaxY: integer; begin case Mode of Gr: ; Tx: MaxY:=Hi(WindMax)+1; end end;
procedure ShowBoard; begin case Mode of Gr: ; Tx: ClrScr; end end;
procedure Show(p: tPict; x,y: integer); begin case Mode of Gr: ; Tx: begin GoToXY(x,y); Write(TxPict[p]) end end end;
begin Mode:=No end.
Файл Viper.pas
uses FIFO,Board,Dos,CRT;
var i,x,y,u,v,x1,Rx,Ry,y1,x2,y2,sx,sy: integer; t,dt: LongInt; c: char; e: boolean;
function Time: LongInt; var m,d,h,mi,s,s1:word; l:LongInt; begin GetDate(h,m,d,mi);GetTime(h,mi,s,s1);l:=d; Time:=(((l*24+h)*60+mi)*60+s)*100+s1 end;
begin SetMode(Tx); ShowBoard; x1:=MinX; x2:=MaxX; y1:=MinY; y2:=MaxY; for i:=x1 to x2 do begin GoToXY(i,y1); Write('*'); GoToXY(i,y2); Write('*'); end; Inc(y1); Dec(y2); for i:=y1 to y2 do begin GoToXY(x1,i); Write('*'); GoToXY(x2,i); Write('*'); end; Inc(x1); Dec(x2);
x:=x1; y:=(y1+y2) div 2+1; Show(Head,x,y); Put(x,y); sx:=1; sy:=0; Rx:=10; Ry:=y; t:=Time; dt:=15; e:=true; repeat if e then begin Show(Rabb,Rx,Ry); e:=false end; t:=t+dt; Show(Bond,x,y); x:=x+sx; y:=y+sy; Show(Head,x,y); Put(x,y); if (x<>Rx)or(y<>Ry) then begin Get(u,v); Show(Noth,u,v) end else begin Rx:=Random(x2-x1-1)+x1+1; Ry:=Random(y2-y1-1)+y1+1; e:=true end; repeat until Time>t; if KeyPressed then begin c:=ReadKey; if c=#0 then begin c:=ReadKey; case c of #72: if sy<>1 then begin sx:=0; sy:=-1 end; #75: if sx<>1 then begin sx:=-1; sy:=0 end; #77: if sx<>-1 then begin sx:=1; sy:=0 end; #80: if sy<>-1 then begin sx:=0; sy:=1 end end end end until (x<x1)or(y<y1)or(x>x2)or(y>y2) end.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой