Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 22:32   #11
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Лет 13 назад тоже писал змейку. Кстати как щаз помню, вся оконная-кнопочная библиотека в игрушке была реализована только с помощью стандартной Graph, без всяких там турбовиженов и прочего УГ

Там внизу на скриншотах полоска типа как в винде, просто по приколу делал. Программа для ДОС ессно, но у меня запустилась сейчас без всякого досбокса в Win XP. Поиграл.

Выкладываю отдельно релиз и отдельно весь проект, может кому-то пригодится, хотя код конечно более чем страшен. Даже я сейчас пойму не более 1% )) Прямо поражаюсь как я раньше кодил ))
Изображения
Тип файла: jpg nibb1.jpg (39.7 Кб, 128 просмотров)
Тип файла: jpg nibbles_001.jpg (41.4 Кб, 116 просмотров)
Тип файла: jpg nibbles_002.jpg (31.6 Кб, 126 просмотров)
Вложения
Тип файла: zip NIBBLES.zip (33.6 Кб, 21 просмотров)
Тип файла: zip N_SOURCE.zip (101.6 Кб, 15 просмотров)
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 04.03.2011, 15:59   #12
Deniska_777
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 19
По умолчанию

Tronix

да круто, молодец.

Блин чего то опять я стал тормозить, не получается.
Код:
procedure paint(x,y,cl : integer);
begin
setcolor(cl);
circle(x,y,5);
setfillstyle(1,green);
floodfill(x,y,cl);
if (edax=x)and(eday=y) then eda:=0;
end;
procedure lol(var edax,eday,eda:integer);
begin
if eda=0 then begin
setcolor(blue);
edax:=random(64)*10;
eday:=random(48)*10;
circle(edax,eday,5);
setfillstyle(1,yellow);
floodfill(x,y,blue);
eda:=1;
end;
end;
begin
randomize;
gd:=detect;
initgraph(gd,gm,'c:\tp\bgi');
x:=315;
y:=200;
repeat
lol(edax,eday,eda);
paint(x,y,red);
setfillstyle(1,blue);
floodfill(x,y,red);
c:=readkey;
if c=chr(0) then begin
paint(x,y,black);
c:=readkey;
if c=chr(72) then y:=y-5;{vverx}
if c=chr(75) then x:=x-5;{vlevo}
if c=chr(77) then x:=x+5;{vpravo}
if c=chr(80) then y:=y+5;{vniz}
if x<0 then x:=640;
if x>640 then x:=0;
if y<0 then y:=480;
if y>480 then y:=1;
paint(x,y,green);
end;
until c=chr(27);
closegraph;
end;
можите плз написать, где написать это нужно.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
или, если вы ручками пишете - теги пишутся в квадратных скобках...
Не забывайте об этом!
Модератор.


да..
я написал рекорды, всё выводит но только цифры не видно, они закрашиваются.
как исправить ?

может кто нибудь помочь ?
в среду уже надо нести готовый проект.

Последний раз редактировалось Stilet; 06.03.2011 в 13:20.
Deniska_777 вне форума Ответить с цитированием
Старый 04.03.2011, 20:08   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) не пишите несколько коротких сообщений подряд, друг за другом! Это запрещено правилами форума!

для того, чтобы через минуту/другую дописать сообщение,
не надо создавать ещё один новый пост.
нажимайте на предыдущем кнопку "Правка"
и дописывайте в своё сообщение, что Вы хотели добавить!

2) Ни в коем случае не пишите личные обращения, да ещё и в разных чужих темах. Это двойное нарушение! Для личных обращений есть "Личные сообщения"


3)
Цитата:
может кто нибудь помочь ?
чем помочь? Советом? Ну сделайте так, чтобы цифры выводились после отрисовки змейки. Тогда они не будут "закрашиваться"..

А вообще, я не вижу Вашего кода, соответственно, не вижу проблем в его работе...

Цитата:
в среду уже надо нести готовый проект.
не надо нас запугивать, не надо!...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.03.2011, 22:28   #14
Deniska_777
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 19
По умолчанию

1)Просто я не могу нигде найти отправить сообщение.
2)Можите подправить ,что бы рекорды друг на друга не налеплялись
3)когда первый раз идёт игра, то там надо съесть черный кружочек,когда вы его идите, то он становится прозрачным.
можно тоже подправить.
спасибо.
4) вот код :
Код:
program igrashe;
uses crt,graph;
var
s:string;
num : integer;
x,y,dx,eda,edax,eday,score : integer;
gd,gm :integer;
c,key : char;
procedure nachalo;
procedure paint(x,y,cl : integer);
begin
setcolor(cl);
circle(x,y,5);
setfillstyle(1,yellow);
floodfill(x,y,cl);
if (edax=x)and(eday=y) then eda:=0;
end;
procedure lol(var edax,eday,eda:integer);
begin
if eda=0 then begin
setcolor(blue);
edax:=random(64)*10;
eday:=random(48)*10;
circle(edax,eday,5);
setfillstyle(1,yellow);
floodfill(x,y,blue);
eda:=1;
end;
end;
begin
randomize;
gd:=detect;
initgraph(gd,gm,'c:\tp\bgi');
x:=340;
y:=200;
repeat
str(score,s);
s:='YOUR SCORE IS:'+s;
outtextxy(20,20,s);
lol(edax,eday,eda);
paint(x,y,red);
setfillstyle(1,blue);
floodfill(x,y,red);
c:=readkey;
if c=chr(0) then begin
paint(x,y,yellow);
c:=readkey;
if c=chr(72) then y:=y-5;{vverx}
if c=chr(75) then x:=x-5;{vlevo}
if c=chr(77) then x:=x+5;{vpravo}
if c=chr(80) then y:=y+5;{vniz}
if x<0 then x:=640;
if x>640 then x:=0;
if y<0 then y:=480;
if y>480 then y:=1;
end;
begin
setcolor(4);
str(score,s);
s:='YOUR SCORE IS:' +s;
score:=score+5;
end;
until c=chr(27);
closegraph;
end;
procedure helpro;
begin
initgraph(gd,gm,'c:\tp\bgi');
SetBkColor(yellow);
Setcolor(red);
SETTEXTSTYLE(7,0,1);
Outtextxy(20,160,'PRAVILO GAME:');
outtextxy(20,200,'1.VASHA CEL EST KRYSHOCHKI,NABRAT BOLSHOI RECORD.');
outtextxy(20,220,'2.YPRAVLENIE STRELOCHKAMI S KLAVIATYRI.');
outtextxy(20,240,'3.YDACHNOI GAME.');
readkey;
closegraph;
end;
procedure conec;
begin
textbackground(yellow);
textcolor(white);
clrscr;
gotoxy(30,10);
writeln('Thanks for game!!!');
readkey;
end;
function menu : integer;
const ss : array [1..3] of string = ('1.IGRAT','2.Pomoch','3.Vixod');
var
m : integer;
cf,cb : byte;
x,y : integer;
c : char;
procedure out(s : string; x,y : integer; cf,cb : integer);
begin
textcolor(cf);
textbackground(cb);
gotoxy(x+25,y);
write(s);
end;
begin
cb :=yellow;
cf :=black;
x :=10;
textcolor(cf);
textbackground(cb);
clrscr;
m :=0;
for y := 11 to 13 do begin
gotoxy(x,y);
out(ss[y-10] ,x,y,cf,cb);
end;
y :=13;
out(ss[y-10] ,x,y,cb,cf);
repeat
c :=readkey;{ write (c,' ', ord(c)); readln;}
if (c>=' 1' ) and (c <=' 3' ) then begin
out(ss[y-10] ,x,y,cb,cf);
y :=10 + ord(c) - ord('0');
out(ss[y-10] ,x,y,cb,cf);
end
else if ord(c) = 0 then begin
c :=readkey;
out(ss[y-10] ,x,y,cf,cb);
case ord(c) of
72 : begin
if y=11 then y:=13 else y:=y-1;
end;
77 : ;{ rigth}
80 :begin
if y=13 then y:=11 else y:=y+1;
end;
75 : ;{left}
end; {case}
out(ss[y-10] ,x,y,cb,cf);
end;
if ord(c) = 13 then m:=y-10;
until ( m > 0) and (m <= 3);
menu:=m;
end;
begin
repeat
num := menu;
case num of
1: nachalo;
2: helpro;
3: conec;
end;
until num = 3;
end.

Последний раз редактировалось Deniska_777; 04.03.2011 в 22:30. Причина: не правильно оформил.
Deniska_777 вне форума Ответить с цитированием
Старый 04.03.2011, 23:40   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1)
Код:
  repeat
    str(score, s);
    setfillstyle(1, green);
    bar(10,10,200,30);
    s := 'YOUR SCORE IS: ' + s;
разумеется, вместо зелёного цвета можете поставить любой, в том числе и цвет фона (игрового поля)

2)
наращивание очков должно происходить только после "съедания" кружочка
А не на каждое нажатие клавиши!

3) код преобразования счёта в строку дублируется.
Внизу он никакого смысла не имеет. Удалите его там!
достаточно одной команды:
Код:
    begin
      score := score + 5;
    end;
begin и end я оставил чтобы показать, что всё остально не нужно!

4) теперь самое неприятное.. Почему Ваша змейка не растёт?! И почему она не движется (без нажатий)?! В классической игре она всё время непрерывно движется (возможно, для увеличения сложности, постепенно ускоряясь). Нажатия на клавиши изменяют направление, но двигаться змейка НЕ ПЕРЕСТАЁТ!

5) и последнее. Старайтесь не смешивать русские и английские слова: Правила game, Удачной game - это же жуть!
Или по английски всё пишите. Или по русски!

удачи.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.03.2011, 02:31   #16
Deniska_777
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 19
По умолчанию

1)сделал
2) а как сделать помогите.
3)сделал
4)на половино.

а как сделать что бы она сама двигалась и что бы я её управлял?
5)сделал
спасибо .
Deniska_777 вне форума Ответить с цитированием
Старый 06.03.2011, 05:19   #17
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
а как сделать что бы она сама двигалась и что бы я её управлял?
да очень просто!, поставь безконечный цикл;скажим к примеру repeat until #ch=27; изменяй свои x и y с задержкой; скажем delay(5000) зависит от процессора соответсвенно.

Последний раз редактировалось Летучий_СкилетиК; 06.03.2011 в 10:00.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 06.03.2011, 12:16   #18
Deniska_777
Пользователь
 
Регистрация: 01.03.2011
Сообщений: 19
По умолчанию

Код:
repeat
until c=chr(27);
delay(3000);
if (edax=x) and (eday=x) then eda=0;
/

так что ли ?
объясните или напишите, если не трудно, а то я только не давно с графикой не давно познакомился.
Цитата:
Сообщение от Летучий_СкилетиК Посмотреть сообщение
Пусть Скажем голова белого цвета след белого цвета, фон синий, как только фрагмент головы попадает на свой след, то цвет опр. пикселя меняется с цвета фона на цвет следа. Как только это произошло, то все конец игры.
можите написать
а то я не знаю как.

Последний раз редактировалось Stilet; 06.03.2011 в 13:21.
Deniska_777 вне форума Ответить с цитированием
Старый 07.03.2011, 11:21   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот пример с движением змейки.
Вложения
Тип файла: rar zmeika.rar (1.4 Кб, 23 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра змейка, меню konstahntin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 30.11.2010 18:41
Assembler.Игра "змейка". Пупкин Помощь студентам 0 27.05.2010 00:08
Игра змейка на С++ Duran- Помощь студентам 2 10.08.2009 12:14
Ещё одна игра "Змейка" Simply-Art Софт 17 05.07.2007 04:10