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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2013, 12:33   #1
yzen
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 37
Восклицание Арканоид

Курсовая работа Арканоид.
Накатал такой код.
В нем не чего такого пока нет.
Но почему то после запуска, через секунды 3 или чуть более программа завершается ссылаясь на выход из массива.Который просто рисует блоки, нет не одной совподающей переменой.ХЗ что ему нужно.
Было выражение окай. Убрал рисовку блоков.Запускаю по началу все норм. Потом ОПА и пропадает шарик или платформа.
И в итоге прога работает нормально когда оставлю описание шарика
он прыгает просто от стенки к стенке и все.
Ниже код где с прорисовкой блоков и платформой.
Нужно в Pascal ABC.
Кто поможет, или вдруг сделает готов оплатить труды))
Код:
uses graphabc,events;
type matr=array[1..8,1..13] of integer;
var dx,dy,x,y,x1,y1,x2,y2:integer;
    a:matr;
    w:boolean;
    
procedure block(var ai:matr);
var i,j:integer;
begin
for i:=1 to 8 do
    for j:=1 to 13 do ai[i,j]:=random(2);
end;

procedure risblock(ai:matr);
var i,j,x1,y1:integer;
begin
x1:=5;y1:=10;
for i:=1 to 8 do begin
    for j:=1 to 13 do if a[i,j]=0 then begin
                                       rectangle(x1,y1,x1+50,y1+10);
                                       x1:=x1+53;
                                       end
                                       else x1:=x1+53;
                  x1:=5;
                  y1:=y1+13;
                  end;
                  textout(20,270,IntToStr(x));
    textout(20,290,IntToStr(y));
end;

procedure dvig(key:integer);
begin
  case key of
    vk_left: if x1>=5 then begin x1:=x1-10; x2:=x2-10 end;
    vk_right: if x2<=695 then begin x1:=x1+10; x2:=x2+10 end;
  end;
end;
begin
  setwindowsize(700,400);
  x:=350;
  y:=382;
  w:=false;
  dx:=5;
  dy:=-7;
  block(a);
  x1:=310; y1:=387; x2:=390; y2:=400;
  rectangle(310,387,390,400);
  repeat
    sleep(20);
    clearwindow;
    lockdrawing;
    rectangle(x1,y1,x2,y2);
    circle(x,y,5);
    risblock(a);
    if (x>=695) or (x<=5) then dx:=-dx;
    if (y<=5) or ((abs(x-x1-40)<=40) and (abs(y-395)<=6))  then dy:=-dy;
    if y>=405 then w:=true;
    x:=dx+x;
    y:=y+dy;
    redraw;
    onkeydown:=dvig;
  until w

end.
yzen вне форума Ответить с цитированием
Старый 24.04.2013, 13:25   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
if y>=405 then w:=true;
и
Цитата:
Код:
until w
ни о чем не говорят?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 24.04.2013, 14:07   #3
yzen
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
и

ни о чем не говорят?
Это когда шарик оказывается ниже платформы, то останавливается.
640 на 400
Так что по сути это не должно влиять. Или я что то не так понял.
yzen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арканоид Kostia Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 03.04.2021 21:50
Арканоид borisn70 C# (си шарп) 3 14.12.2012 23:23
Арканоид jasonfuck Помощь студентам 6 29.05.2011 18:49
арканоид GaLiof Помощь студентам 1 18.01.2010 11:25
арканоид aruy Помощь студентам 4 30.07.2009 11:37