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

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


Новичок
*

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

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


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

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


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

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


В общем вот примерная реализация того, что я имел в виду:

uses
CRT;

const
sLeft = #17;
sRight = #16;
sUp = #30;
sDown = #31;
sHead = '%';
sApple = '@';

kUp = #72;
kLeft = #75;
kDown = #80;
kRight = #77;

type
TScreenSymbol = record
Symbol: char;
Color: byte;
end;

var
Key, ScanKey: char;
Time: longint absolute $0040: $006C;
T: longint;
HeadX, HeadY, TailX, TailY: integer;
Direction: (dUp, dLeft, dDown, dRight);
Screen: array [0 .. 49, 0 .. 79] of TScreenSymbol absolute $B800: $0000;
Lost, Win: boolean;
oldTail: char;
x, y, c: integer;

begin
randomize;
TextMode(259);
ClrScr;
HeadX := 40;
HeadY := 40;
TailX := 40;
TailY := 41;
Direction := dUp;
Screen[HeadY, HeadX].Symbol := sHead;
Screen[HeadY, HeadX].Color := 14;
Screen[TailY, TailX].Symbol := sUp;
Screen[TailY, TailX].Color := 2;
Screen[HeadY - 10, HeadX].Symbol := sApple;
Screen[HeadY - 10, HeadX].Color := 4;
Lost := false;
repeat
if KeyPressed then begin
Key := ReadKey;
if Key = #0 then ScanKey := ReadKey
else ScanKey := #0;
end else begin
Key := #0;
ScanKey := #0;
end;
while T = Time do;
T := Time;
case ScanKey of
kUp: if Direction <> dDown then Direction := dUp;
kLeft: if Direction <> dRight then Direction := dLeft;
kDown: if Direction <> dUp then Direction := dDown;
kRight: if Direction <> dLeft then Direction := dRight;
end;
case Direction of
dUp: begin
Screen[HeadY, HeadX].Symbol := sUp;
Screen[HeadY, HeadX].Color := 2;
dec(HeadY);
if HeadY < 0 then Lost := True;
end;
dLeft: begin
Screen[HeadY, HeadX].Symbol := sLeft;
Screen[HeadY, HeadX].Color := 2;
dec(HeadX);
if HeadX < 0 then Lost := True;
end;
dDown: begin
Screen[HeadY, HeadX].Symbol := sDown;
Screen[HeadY, HeadX].Color := 2;
inc(HeadY);
if HeadY >= 50 then Lost := True;
end;
dRight: begin
Screen[HeadY, HeadX].Symbol := sRight;
Screen[HeadY, HeadX].Color := 2;
inc(HeadX);
if HeadX >= 80 then Lost := True;
end;
end;
case Screen[HeadY, HeadX].Symbol of
sUp, sLeft, sDown, sRight: Lost := True;
sApple: begin
c := 0;
repeat
inc©;
if c = 1000 then Win := True;
x := random(80);
y := random(50);
until (Screen[y, x].Symbol = ' ') or (c >= 1000);
Screen[y, x].Symbol := sApple;
Screen[y, x].Color := 4;
end;
else begin
oldTail := Screen[TailY, TailX].Symbol;
Screen[TailY, TailX].Symbol := ' ';
case oldTail of
sUp: dec(TailY);
sLeft: dec(TailX);
sDown: inc(TailY);
sRight: inc(TailX);
end;
end;
end;
Screen[HeadY, HeadX].Symbol := sHead;
Screen[HeadY, HeadX].Color := 14;
until (Key = #27) or Lost or Win;
if Lost then WriteLn('You have lost!');
if Win then WriteLn('You win!!!');
end.


В этом коде вы можете не знать слово Textmode - оно принудительно переводит экран в режим 80 на 50 символов, и слово absolute - оно указывает переменной, какой именно адрес ей занимать. Некоторые адреса обладают специальными свойствами, например адрес $0040: $006C содержит системное время (нужно для того, чтобы корректно задавать темп игры), а адрес $B800: $0000 содержит видеопамять, поэтому любое обращение к массиву Screen эквивалентно обращению к видеопамяти. Обратите внимание, что тут приходиться в индексе сначала писать Y, а потом X.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 5.05.2024 6:59
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name