IPB
ЛогинПароль:

> Игрушка змейка., Курсавая работа. Срок месяц.Спасайте :)
DarkMoonSide
сообщение 17.02.2009 19:50
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Женский
Реальное имя: Дианка

Репутация: -  0  +


Меня сегодня убили sad.gif С помощью Вольвы сдала программку с графикой на 5 ^_^
Но сегодня дали курсавик. Змейка. Полистала тут форум, одни исходники.
Хочется написать самой, ну или кусочки кодов украсть.
Объекты еще не проходили, но без них думаю неполучится написать. Если не трудно.
Можете помочь сделать игрушку... Объяснить с чего начать, привести парочку примеров ( Я НЕ КОГО НЕ ЗАСТАВЛЯЮ НИЧЕГО ДЕЛАТЬ, ПРОСТО ПРОШУ ПОМОЧЬ, КОМУ НЕ ТЯЖЕЛО) кусочков кодов и для чего они служат, просто совести не хватит взять чужое, и впихнуть, да и сама должна понять, как такое делается...

Сообщение отредактировано: DarkMoonSide - 18.02.2009 0:53
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 18.02.2009 15:38
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


На самом деле, FIFO не обязательно. Если не жалко памяти и есть возможность хранить состояния всех точек поля (экрана), то может быть даже проще.

Вот простенькая реализация змейки с FIFO, я сейчас набросал с учетом твоих требований (юниты, текст с возможностью подключения графики). Управление на стрелочках, конец игры при ударе в стенку, самопересечения допускаются пока. Поиграйся и попробуй разобраться. А потом можно будет и без фифы сделать - кстати, так даже проще отлавливать самопересечения.

Файл FIFO.pas
unit FIFO;

interface

const
lMax=$1000;

procedure Put(x,y: integer);
procedure Get(var x,y: integer);

implementation

var
u,v: array[0..lMax-1]of integer;
i,j,h,t,l: integer;


procedure Put(x,y: integer);
begin
if l<lMax then begin
Inc(l);
h:=(h+1) mod lMax;
u[h]:=x;
v[h]:=y
end
end;


procedure Get(var x,y: integer);
begin
if l>0 then begin
Dec(l);
x:=u[t];
y:=v[t];
t:=(t+1) mod lMax
end
end;


begin
h:=0;
t:=1;
l:=0
end.


Файл Board.pas
unit Board;

interface

uses CRT;

type
tMode=(No,Gr,Tx);
tPict=(Noth,Head,Bond,Rabb);

const
TxPict: array[tPict]of char=(' ','%','0','@');

var
Mode: tMode;

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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
DarkMoonSide   Игрушка змейка.   17.02.2009 19:50
Lapp   Пожалуйста, измени заголовок (Правила, п.8) Тебе ...   18.02.2009 0:14
DarkMoonSide   graph+crt режимы. Добавлено через 1 мин. Что-...   18.02.2009 0:54
Lapp   Спасибо Для змейки тебе понадобится FIFO. Реализ...   18.02.2009 1:04
DarkMoonSide   Что есть фифо?.. Учу паскаль, да и вообще програм...   18.02.2009 1:07
Lapp   Что есть фифо?.. Буфер типа "первым вошел - п...   18.02.2009 1:25
TarasBer   Называется Очередь.   18.02.2009 13:15
Lapp   На самом деле, FIFO не обязательно. Если не жалко...   18.02.2009 15:38
DarkMoonSide   Спасибо, пойду разбираться потихоньку. Приболела :...   19.02.2009 21:33
TarasBer   Если рисовать змейку в текстовом режиме, то я бы р...   19.02.2009 21:54
DarkMoonSide   Ребят я конечно понимаю, что вы тут все уже профи,...   19.02.2009 22:00
TarasBer   Какое конкретно слово если непонятно - спрашивайте...   19.02.2009 22:05
TarasBer   В общем вот примерная реализация того, что я имел ...   19.02.2009 22:59
DarkMoonSide   Ага, спасибо. А можно я немного обнаглею? мне очен...   20.02.2009 19:33
TarasBer   Ага, спасибо. А можно я немного обнаглею? мне оче...   20.02.2009 20:22
DarkMoonSide   Ну тогда можеш коменты к своей програмке написать ...   20.02.2009 20:57
TarasBer   Коментарии попробую, но только после оптимизации, ...   20.02.2009 21:16
DarkMoonSide   Коментарии попробую, но только после оптимизации,...   20.02.2009 21:29
TarasBer   Счётчик делается простым выводом на экран процедур...   20.02.2009 21:43
Lapp   TarasBer, на мой взгляд неправильно учить новичка ...   21.02.2009 7:20
TarasBer   TarasBer, на мой взгляд неправильно учить новичка...   21.02.2009 14:35
DarkMoonSide   Поправилась. Вроде и силы появились. Я хочу задать...   21.02.2009 22:25
TarasBer   Ну игровое поле так и делаешь. Просто принудительн...   21.02.2009 22:40
DarkMoonSide   TarasBer а можеш написать примерную реализацию код...   21.02.2009 22:45
Lapp   TarasBer а можеш написать примерную реализацию ко...   22.02.2009 17:06
TarasBer   Ты бы все-таки хоть что-то свое тут привела.. Хо...   22.02.2009 20:27
DarkMoonSide   Было, и сама пыталась сделать что то, хотя бы что ...   23.02.2009 15:17
Lapp   Буду сегодня вечером дома- напишу что не понятно и...   23.02.2009 15:21
TarasBer   Мне всё-таки непонятно, что в моём коде непонятно.   23.02.2009 15:25
RathaR   эм... задам вопрос: для замедления змейки использо...   6.07.2009 17:54
Lapp   для замедления змейки использовать gettime и подкл...   7.07.2009 1:10


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 25.06.2025 2:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"