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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2009, 14:57   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
Радость как заставить шарик прыгать?

написал код для передвижения шарика, но не могу сделать что бы при нажатии клавиши пробел шарик подпрыгивал на какоето расстояние.
кто знает помогите.
вот код
Код:
uses graph, crt;
var   d,r:integer;
       klavisha:=char;

procedure shar(x,y:integer);
begin
setcolor(magenta);
circle(x,y,30);
setfillstyle(1,red);
floodfill(x,y,magenta);
repeat
setcolor(0);
circle(x,y,30);
setfillstyle(1,0);
floodfill(x,y,0);
klavisha:=' ';
if keypressed then klavisha:=readkey;
if (klavisha='a') and (x>50) then x:=x-10;
if (klavisha='d') and (x<580) then x:=x+10;
setcolor(magenta);
circle(x,y,30);
setfill style(1,red);
floodfill(x,y,magenta);
until klavisha=#27;
end;

begin
d:=detect; initgraph(d,r,'');
line(0,432,640,432);
shar(500,400);
closegraph;
end.
alex(21) вне форума Ответить с цитированием
Старый 31.07.2009, 15:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

т.е. шарик в состоянии покоя. При нажатии на пробел он подпрыгивает и возвращается назад?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 15:30   #3
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

Цитата:
т.е. шарик в состоянии покоя. При нажатии на пробел он подпрыгивает и возвращается назад?
вы правильно поняли!
alex(21) вне форума Ответить с цитированием
Старый 31.07.2009, 16:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну вот смотри. НАпример так:
Код:
uses graph,crt;
var d,r,x,y:integer;s:string;
c:char;gogo:byte;
begin
 d:=detect; initgraph(d,r,'');
 gogo:=0;d:=200;x:=GetMaxX div 2;y:=getMaxY-20;
 repeat
  if keypressed then c:=readkey;
  if c=#32 then gogo:=1;
  if gogo=1 then begin
   y:=y-d;d:=d div 2;
   if d<=1 then gogo:=2;
   x:=x+1;
  end;
  if gogo=2 then begin
   y:=y+10;
   x:=x+1;
   if y>=getmaxy-20 then gogo:=0;
  end;
  clearDevice;
  delay(1);
  circle(x,y,50);
until c=#27;
 closegraph;
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2009, 22:40   #5
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Stilet Твой код не работаетЮ сейчас попробую че нить соорудить
Gapro вне форума Ответить с цитированием
Старый 31.07.2009, 22:56   #6
Gapro
Форумчанин
 
Регистрация: 30.07.2009
Сообщений: 256
По умолчанию

Вернее работает, но шарик внизу не останавливается и продолжает дальше падать
Gapro вне форума Ответить с цитированием
Старый 01.08.2009, 09:45   #7
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

я хотел сделать так: линия, по ней с помощью клавиш "А" и "D" можно передвигать шар вправо и влево. при нажатии на клавишу пробел шар подпрыгивает и обратно падает на линию, после этого шаром вновь можно управлять
alex(21) вне форума Ответить с цитированием
Старый 01.08.2009, 14:25   #8
sheka
Босс
Форумчанин
 
Аватар для sheka
 
Регистрация: 03.06.2009
Сообщений: 125
Стрелка

Цитата:
Сообщение от alex(21) Посмотреть сообщение
я хотел сделать так: линия, по ней с помощью клавиш "А" и "D" можно передвигать шар вправо и влево. при нажатии на клавишу пробел шар подпрыгивает и обратно падает на линию, после этого шаром вновь можно управлять
с учетом гравитации?

Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.
Ася 255507394. Отзывы здесь.
sheka вне форума Ответить с цитированием
Старый 01.08.2009, 16:00   #9
sheka
Босс
Форумчанин
 
Аватар для sheka
 
Регистрация: 03.06.2009
Сообщений: 125
По умолчанию

Код:
uses crt,graph;

const
     yl=350;
     Radius=20;
     step=5;
     zaderzhka=12;
     h=200;

var mem_shar:integer;
    shar:pointer;
    x,y:integer;

procedure init;
var GDriver,GMode:integer;
begin
     GDriver:=Detect;
     InitGraph(GDriver,GMode,'');
end;

procedure buff;
begin
     SetColor(Yellow);
     SetFillStyle(1,Yellow);
     PiesLice(Radius,Radius,0,360,Radius);
     mem_shar:=ImageSize(0,0,2*Radius,2*Radius);
     GetMem(shar,mem_shar);
     GetImage(0,0,2*Radius,2*Radius,shar^);
     ClearDevice;
end;

procedure draw(x,y:integer);
begin
     PutImage(x,y,shar^,XorPut);
end;

procedure jump;
begin
     for y:=yl-radius downto yl-radius-h do
         begin
         draw(x,y);
         draw(x,y-1);
         delay(((yl-radius)-y)*zaderzhka);
         end;
     for y:=yl-radius-h to  yl-radius do
         begin
         draw(x,y-1);
         draw(x,y);
         delay(((yl-radius)-y)*zaderzhka);
         end;
end;



begin
     init;
     buff;
     SetColor(White);
     SetLineStyle(0,0,1);
     line(0,yl,GetMaxX,yl);
     x:=round(GetMaxX/2);
     y:=yl-Radius;
     draw(x,y);
     repeat
           if KeyPressed then
              begin
              case readkey of
                   'a':if x-step>=0 then
                          begin
                          draw(x,y);
                          dec(x,step);
                          draw(x,y);
                          end;
                   'd':if x+step<=GetMaxX-2*Radius then
                          begin
                          draw(x,y);
                          inc(x,step);
                          draw(x,y);
                          end;
                   #32: jump;
                   #27: begin
                        CloseGraph;
                        halt;
                        end;
                   end;
              end;
     until False;
end.

Две одинаковые вложенные ошибки называются четной ошибкой и ошибкой не являются.
Ася 255507394. Отзывы здесь.

Последний раз редактировалось sheka; 01.08.2009 в 16:06.
sheka вне форума Ответить с цитированием
Старый 03.08.2009, 12:26   #10
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
По умолчанию

sheka, это не совсем то что я хотел. запустив эту программу на экране появился шар, нажав на клавишу пробел шар поднимается вертикально вверх и остаётся там. после нажатия клавиши "А" шар двигается влево, а при нажатии на пробел от линии поднимается новый шар. на прыжок это не похоже!
alex(21) вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить работать CheckBox? ridmal Microsoft Office Word 1 21.05.2009 09:47
2D шарик по лестнице New_Yurok Общие вопросы C/C++ 9 02.01.2009 16:21
Как заставить Memo?? Lencom Общие вопросы Delphi 6 03.07.2008 15:01
Как заставить работать php? yourself Помощь студентам 9 20.05.2008 08:08
ШАрик двигается по петли jomix Помощь студентам 3 01.06.2007 12:46