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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2012, 22:22   #1
zhenka619
Дурачок
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 33
Злость Люди проблема со змейкой ужасно долго старался но не получилось в одном месте, хотя вроде бы все правильно написал!

Код:
uses crt;
var
  x,y:integer;
  mx,my,xe,ye,eochki:array [0..1000] of byte;
  ch : char;
  st : string;
  ima : string;
  echet,index,dlina,dlinamax,l,vx,vy,proverka,z,k:integer;
  records: text;
begin
  clrscr;
  Randomize;
  index:=0;
  y:=6;
  x:=3;
  dlina:=1;
  echet:=1;
  xe[echet]:=12;
  ye[echet]:=12;
  gotoxy(xe[echet],ye[echet]);
  eochki[echet]:=random(8)+1;
  write (eochki[echet]);
      while (x>=1) and (x<=80) and (y>=1) and (y<=25)  do begin
     	index:=index+1;
  	GoTOXY(x,y); mx[index]:=x; my[index]:=y;
  	write(#176);
    	
    		if keypressed then begin
    			ch:=readkey;
    			case ch of
      			    'd':begin vx:=1; vy:=0 end;
      			    'a':begin vx:=-1; vy:=0 end;
   			    'w':begin vx:=0; vy:=-1 end;
      			    's':begin vx:=0; vy:=1 end;
      			end;
   	           end;{if}
            x:=x+vx;
            y:=y+vy;
            gotoxy(x,y);
            write(#1);
            delay(100);
    	gotoxy(mx[index-dlina],my[index-dlina]);
    	write(' ');
                        for l:=1 to 10 do
                        begin
    		            if (x=xe[l]) and (y=ye[l])  then begin
      			    dlinamax:=dlinamax+eochki[l]+1;
     			    xe[l]:=random(70);
     			    ye[l]:=random(20);
      			    eochki[l]:=random(8)+1;
      			    gotoXY(xe[l],ye[l]);
     			    write(eochki[l]);
    		            end;
	            end;
    		if (dlina<dlinamax) then begin
   			 dlina:=dlina+1;
    		end;

   		
                        if (proverka>30) and (echet<10) then
                        begin
                     	proverka:=0;
                        echet:=echet+1;
                        eochki[echet]:=random(8)+1;
                        xe[echet]:=random(70)+1;
                        ye[echet]:=random(20)+1;
                        gotoxy(xe[echet],ye[echet]);
                        write(eochki[echet]);
                        end;
  
                       if (index=dlinamax+1)then begin
   		 	 l:=1;
    				repeat
    					mx[l]:=mx[l+1];
    					my[l]:=my[l+1];
    					l:=l+1;
    				until l=dlinamax+2;
    			index:=dlinamax+1;
    		end;
                        
                        for l:=0 to dlina do begin
                        if (x=mx[l]) and (y=my[l]) and ((ch='a') or (ch='d' )or (ch='s' )or (ch='w' ))  then begin
                         x:=-100000000;
                        end; 
                        end;
                        
                        
 l:=random(5);
 proverka:=proverka+l;

     end;{while}
clrscr;
readln;		
end.


Код:
 if (x=mx[l]) and (y=my[l]) and ((ch='a') or (ch='d' )or (ch='s' )or (ch='w' ))  then begin
                         x:=-100000000;
                        end; 
                        end;
Вот этот момент почему то не получился, заранее благодарю!
"Никогда программы не содержат так мало ошибок, как при отсутствии каких-либо средств отладки."
Никлаус Вирт... Помог нажми на весы
zhenka619 вне форума Ответить с цитированием
Старый 20.01.2012, 22:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А чего не получилось-то? Что там происходить должно?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.01.2012, 22:32   #3
zhenka619
Дурачок
Пользователь
 
Регистрация: 29.12.2011
Сообщений: 33
По умолчанию Змейка

Змейка должна при врезании в себя "умирать" ну то есть цикл должен закончиться!
"Никогда программы не содержат так мало ошибок, как при отсутствии каких-либо средств отладки."
Никлаус Вирт... Помог нажми на весы
zhenka619 вне форума Ответить с цитированием
Старый 24.01.2012, 16:27   #4
VektorAB
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 29
По умолчанию

Код:
 ((ch='a') or (ch='d' )or (ch='s' )or (ch='w' ))
зачем это?
"Сегодня, в завтрашний день не все могут смотреть, вернее не только лишь все, мало кто может это сделать"
VektorAB вне форума Ответить с цитированием
Старый 24.01.2012, 16:30   #5
VektorAB
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 29
По умолчанию

Код:
for l:=0 to dlina do 
   if (x=mx[l]) and (y=my[l]) then 
      x:=-10;
Так ведь намного понятнее написано?) Зачем так много бегин эндов
"Сегодня, в завтрашний день не все могут смотреть, вернее не только лишь все, мало кто может это сделать"
VektorAB вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод на одном и том же месте JinYa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.09.2011 22:54
Правильно ли написал программы? Lynsha Общие вопросы C/C++ 8 01.02.2011 23:49
Скока парился ни чё не получилось, а вроде всё просто! Cherni Voron Общие вопросы Delphi 14 07.08.2007 16:25