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

 
 Ответить  Открыть новую тему 
> Арканойд, Описание темы
сообщение
Сообщение #1


Гость






Вот вздумалось мне писать арканойд. Вроде все получается, но как сделать, чтобы шарик менял угол полета в зависимости от попадания в разные части доски?

Код

uses dos,crt,graph;
type
 Coords = record
   x,y:real;
end;
const
 step = 50;
 l = 100; {lenght}
 h = 10;  {height}
 size = 5;
 spd_ = 0.1;
 k = 1;


var
 pos,spd:Coords;
 angle,gd,gm,i,x,y:integer;

procedure Draw(x,y,color:integer);
begin
 SetColor(color);
 Rectangle(x,y,x+l,y+h);
end;

procedure DrawBall(color:byte);
begin
 SetColor(color);
 Circle(trunc(pos.x),trunc(pos.y),size);
end;

procedure RecalcBall;

 procedure ChX;
 begin
   pos.x := pos.x - spd.x * spd_;
   spd.x := - spd.x * k;
 end;

 procedure ChY;
 begin
   pos.y := pos.y - spd.y * spd_;
   spd.y := - spd.y * k;
 end;

begin
 DrawBall(black);
 pos.x := pos.x + spd.x * spd_;
 if (pos.x >= GetMaxX - size) or (pos.x <= size) then
   ChX;
 pos.y := pos.y + spd.y * spd_;
 if (pos.y <= size) then
   ChY;
 if (pos.Y = GetMaxY-(size+h)) and (pos.X >= x) and (pos.X <= X+l) then
   ChY;
 if (pos.y >= GetMaxY) then
   begin
   pos.x := Random(640);
   pos.y := Random(480)-10;
   end;
 DrawBall(white);
end;

var
 scancod:word;


begin
 gd := Detect;
 InitGraph(gd,gm,'');
 x := 0;
 y := 469;
 Draw(x,y,white);
 spd.x := random(7) + 4;
 spd.y := 10;
 pos.x := GetMaxX div 2;
 pos.y := GetMaxY div 2;
 repeat
  RecalcBall;
   delay(500);
  if port[$60]<$80 then
    begin
      scancod:=port[$60];
      mem[0:$41C]:=mem[0:$41A];
      case scancod of
        77:begin{right}
             Draw(x,y,black);
             inc(x,step);
             if x >= (GetMaxX - l) then
               x := GetMaxX - l;
             Draw(x,y,white);
           end;
        75:begin{left}
             Draw(x,y,black);
             dec(x,step);
             if x <= 0 then
               x := 0;
             Draw(x,y,white);
           end;
       end;
      port[$60]:=$80;
    end;
  if (scancod<>1) and (scancod<>0) then begin port[$60]:=$80; scancod:=0 end;
 until scancod=1;
 CloseGraph;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

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

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


Прибавляй к горизонтальной компоненте скорости шарика горизонтальную компоненту скорости доски.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Вопрос.

Вот эта строчка:

mem[0:$41C]:=mem[0:$41A];

Зачем?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


Цитата(xds @ 31.12.04 0:37)
Прибавляй к горизонтальной компоненте скорости шарика горизонтальную компоненту скорости доски.

Как можно еще изменить скорость шарика:

1) Сделай ветер. На заднем плане падает что-нибудь типа снега, которое указывает, куда он дует. К горизонтальной скорости шарика, тогда добавь скорость ветра. А ветер пусть меняется RANDOMом.

2) Сотвори подобие силы тяжести. В процедуре RECALCBALL добавь строчку


dec(pos.y,1);


В результате, у тебя шарик будет летать по параболе...
Я такую штуку в арканоиде BreakOut нашел...Реально...
Арканоид тоже неплохой :-)

[quote]
Programmers don't die/ They just GOSUB without RETURN...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


N337
****

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

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


Цитата(Echelone @ 7.01.05 6:39)
Вопрос.

Вот эта строчка:

mem[0:$41C]:=mem[0:$41A];

Зачем?

Очистка буфера клавиатуры. Работа с последней здесь организована несколько странным образом: изнасиловали BIOS. :D Я бы посоветовал воспользоваться классическим методом - перехватывать IRQ1.

...Только заметил: истезанию подвергся и контроллер клавиатуры - ему в порт данных затолкали $80.

Сообщение отредактировано: xds -


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


N337
****

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

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


Цитата
Как можно еще изменить скорость шарика

Добавь гравиконцентраты (области повышенной гравитации) ;)


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

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

 





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