- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
//Unit1.h
const float RADIAN=0.01744444444;
TForm1 *Form1;
Graphics::TBitmap*ZadniyBuffer;
float ShipPosX,ShipPosY;
float ShipAngle;
float ShipSpeed;
bool LEFT,RIGHT,UP;
TList*Bullets;
TList*Asteroids;
class Bullet
{
public:
float x,y,dx,dy;
void CreateBullet()
{
x=ShipPosX;y=ShipPosY;
dx=10*cos(RADIAN*ShipAngle);
dy=10*sin(RADIAN*ShipAngle);
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->Color=clRed;
ZadniyBuffer->Canvas->MoveTo(x,y);
ZadniyBuffer->Canvas->LineTo(x+dx,y+dy);
}
};
class CRock
{
public:
float x,y;
int Figure[50];
float Angle;
float Spin;
float XSpeed,YSpeed;
int Tip;
void CreateAsteroid(int t)
{
Tip=t;
XSpeed=random(4)+(random(9)/10.0)-2;
YSpeed=random(4)+(random(9)/10.0)-2;
Spin=random(10)-5;
for(int i=0;i<20;i++)
{
if(Tip==1)Figure[i]=random(10)+25;
if(Tip==2)Figure[i]=random(10)+10;
if(Tip==3)Figure[i]=random(5)+5;
}
}
void Move()
{
x+=XSpeed;y+=YSpeed;
Angle+=Spin;
if(x>440)x=-40;if(x<-40)x=440;
if(y>440)y=-40;if(y<-40)y=440;
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->Color=clRed;
float tAng=0;
int tx=cos(RADIAN*(Angle+tAng))*Figure[0]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[0]+y;
ZadniyBuffer->Canvas->MoveTo(tx,ty);
for(int i=0;i<20;i++,tAng+=19)
{
int tx=cos(RADIAN*(Angle+tAng))*Figure[i]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[i]+y;
ZadniyBuffer->Canvas->LineTo(tx,ty);
}
}
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
randomize();
ZadniyBuffer=new Graphics::TBitmap();
ZadniyBuffer->Width =400;
ZadniyBuffer->Height=400;
ZadniyBuffer->Canvas->Pen->Color=clWhite;
Bullets =new TList();
Asteroids=new TList();
LEFT=false;RIGHT=false;
ShipPosX=200;ShipPosY=200;
ShipAngle=0;
ShipSpeed=0;
for(int i=0;i<4;i++)
{
CRock*a=new CRock();
a->x=random(400);
a->y=40;
a->CreateAsteroid(1);
Asteroids->Add((void*)a);
}
}
//---------------------------------------------------------------------------
void TForm1::CLS()
{
ZadniyBuffer->Canvas->Brush->Color=clBlack;
ZadniyBuffer->Canvas->FillRect(Rect(0,0,400,400));
Привет. Вот, украл, вернее, скачал с розришения автора код для курсача. На учебу билдера тупо времени нет, ибо есть много хвостов. Можете ли вы мне обьяснить весь код? Буду благодарен.
kolybasov 12.12.2012 13:40 # −7
}
void __fastcall TForm1::CopyToScreen()
{
Canvas->Draw(0,0,ZadniyBuffer);
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(LEFT)ShipAngle-=3;
if(RIGHT)ShipAngle+=3;
MoveShip();
CLS();
DrawShip();
MoveAndDrawBullets();
MoveAndDrawAsteroids();
ZadniyBuffer->Canvas->Font->Color=clWhite;
ZadniyBuffer->Canvas->TextOutA(5,5,"Àñòåðî¿ä³â çàëèøèëîñü : "+IntToStr(Asteroids->Count));
CopyToScreen();
if(IsShipBreaked())
{
Timer1->Enabled=false;
ShowMessage("Êîðàáåëü ðîç³ðâàëî! Âñÿ êîìàíäà ïîìåðëà!");
StartNew();
Timer1->Enabled=true;
}
if(Asteroids->Count==0)
{
Timer1->Enabled=false;
ShowMessage("гâåíü ïðîéäåíî");
StartNew();
Timer1->Enabled=true;
}
}
//---------------------------------------------------------------------------
kolybasov 12.12.2012 13:43 # −7
{
ZadniyBuffer->Canvas->Pen->Color=clWhite;
int tA=0;
int tx=cos(RADIAN*(ShipAngle+tA))*10+ShipPos X;
int ty=sin(RADIAN*(ShipAngle+tA))*10+ShipPos Y;
ZadniyBuffer->Canvas->MoveTo(tx,ty);
int l;
for(int i=0;i<4;i++,tA+=120)
{
if((i==0)||(i==3))l=15;else l=10;
int tx=cos(RADIAN*(ShipAngle+tA))*l+ShipPosX ;
int ty=sin(RADIAN*(ShipAngle+tA))*l+ShipPosY ;
ZadniyBuffer->Canvas->LineTo(tx,ty);
}
}
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) LEFT=true;
if(Key==VK_RIGHT)RIGHT=true;
if(Key==VK_UP)UP=true;
if(Key==VK_SPACE)
{
Bullet*b=new Bullet();
b->CreateBullet();
Bullets->Add((void*)b);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Key==VK_LEFT) LEFT=false;
if(Key==VK_RIGHT)RIGHT=false;
if(Key==VK_UP)UP=false;
}
//---------------------------------------------
kolybasov 12.12.2012 13:45 # −7
{
if(UP)
{
ShipSpeed+=0.01;
if(ShipSpeed>2)ShipSpeed=4;
}
else
{
ShipSpeed-=0.01;
if(ShipSpeed<0)ShipSpeed=0;
}
ShipPosX+=cos(RADIAN*ShipAngle)*ShipSpee d;
ShipPosY+=sin(RADIAN*ShipAngle)*ShipSpee d;
if(ShipPosX>410)ShipPosX=-10;
if(ShipPosX<-10)ShipPosX=410;
if(ShipPosY>408)ShipPosY=-10;
if(ShipPosY<-10)ShipPosY=410;
}
void __fastcall TForm1::MoveAndDrawBullets()
{
Bullet*b;
for(int i=0;i<Bullets->Count;i++)
{
b=(Bullet*)Bullets->Items[i];
b->x += b->dx;
b->y += b->dy;
if((b->x>410)||(b->x<-10)||(b->y>410)||(b->y<-10))
{
delete b;
Bullets->Delete(i);
b=NULL;
}
if(b!=NULL)b->Draw();
}
}
kolybasov 12.12.2012 13:45 # −7
{
CRock*r,*r2;
Bullet*b;
for(int i=0;i<Asteroids->Count;i++)
{
r=(CRock*)Asteroids->Items[i];
if(r!=NULL)
for(int j=0;j<Bullets->Count;j++)
{
b=(Bullet*)Bullets->Items[j];
int distance=sqrt( (r->x-b->x)*(r->x-b->x) + (r->y-b->y)*(r->y-b->y));
if(((r->Tip==1)&&(distance<30))||((r->Tip==2)&&(distance<15))||((r->Tip==3)&&(distance<5)))
{
Asteroids->Delete(i);
Bullets->Delete(j);
if(r->Tip<3)
{
r2=new CRock();
r2->x=r->x;
r2->y=r->y;
r2->CreateAsteroid(r->Tip+1);
Asteroids->Add((void*)r2);
r2=new CRock();
r2->x=r->x;
r2->y=r->y;
r2->CreateAsteroid(r->Tip+1);
Asteroids->Add((void*)r2);
delete r;
r=NULL;
}
}
}
if(r!=NULL)
{
r->Move();
r->Draw();
}
}
return 0;
}
bool __fastcall TForm1::IsShipBreaked()
{
CRock*r,*r2;
for(int i=0;i<Asteroids->Count;i++)
{
r=(CRock*)Asteroids->Items[i];
int distance=sqrt((r->x-ShipPosX)*(r->x-ShipPosX)+(r->y-ShipPosY)*(r->y-ShipPosY));
if(((r->Tip==1)&&(distance<30))||((r->Tip==2)&&(distance<25))||((r->Tip==3)&&(distance<15)))
return true;
}
return false;
}
void __fastcall TForm1::StartNew()
{
LEFT=false;RIGHT=false;
ShipPosX=200;ShipPosY=200;
ShipAngle=0;
ShipSpeed=1;
Asteroids->Clear();
Bullets->Clear();
for(int i=0;i<4;i++)
{
CRock*a=new CRock();
a->x=random(400);
a->y=40;
a->CreateAsteroid(1);
Asteroids->Add((void*)a);
}
}
tirinox 12.12.2012 15:46 # +5
kolybasov 12.12.2012 13:47 # −7
defecate-plusplus 12.12.2012 14:20 # +7
у тебя программа - что то про графику, астероиды, корованы корабли
явно игра какая-то
сходи на форум gamedev.ru, там обязательно помогут
только обязательно напиши, что ты от Тараса
иначе будут подозрительно относиться к новичку
3.14159265 12.12.2012 14:22 # +1
>VK_UP
Не. лучше на vk.com
kolybasov 12.12.2012 14:24 # −6
bormand 12.12.2012 14:40 # +1
kolybasov 12.12.2012 15:11 # −6
kolybasov 12.12.2012 14:23 # −6
kolybasov 12.12.2012 16:38 # −6
LispGovno 12.12.2012 17:10 # −1
kolybasov 12.12.2012 18:34 # −5
defecate-plusplus 12.12.2012 13:47 # +4
kolybasov 12.12.2012 13:49 # −5
defecate-plusplus 12.12.2012 14:13 # +3
служить сейчас всего-то год
kolybasov 12.12.2012 14:29 # −3
3.14159265 12.12.2012 14:13 # 0
Как ты посмел? Округлил называется.
kolybasov 12.12.2012 14:14 # −4
3.14159265 12.12.2012 14:15 # +1
kolybasov 12.12.2012 14:16 # −4
bormand 12.12.2012 15:07 # −1
bormand 12.12.2012 15:05 # +1
> Как ты посмел?
Нанес личное оскорбление 3.14159265, округлив его ник до 3х значащиз цифр и поделив на 180. Повинен смерти.
kolybasov 12.12.2012 15:06 # −6
bormand 12.12.2012 15:08 # −1
bormand 12.12.2012 15:21 # +3
Вот пожалуй и все, что можно сказать, посмотрев на этот код, и не пытаясь его скомпилировать и запустить.
kolybasov 12.12.2012 15:27 # −6
{
ZadniyBuffer->Canvas->Pen->Color=clRed;
float tAng=0;
int tx=cos(RADIAN*(Angle+tAng))*Figure[0]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[0]+y;
ZadniyBuffer->Canvas->MoveTo(tx,ty);
for(int i=0;i<20;i++,tAng+=19)
{
int tx=cos(RADIAN*(Angle+tAng))*Figure[i]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[i]+y;
ZadniyBuffer->Canvas->LineTo(tx,ty);
}
}
Вот это росспиши
bormand 12.12.2012 15:36 # −1
Простите, но вы ошиблись дверью, тут кабинет информатики, учитель русского языка находится в соседнем.
Ну а чего тут расписывать... Красной ручкой рисуем хуёвину в полярных координатах, с центром в точке (x,y), изображающую астероид. 19 отрезков с шагом по 19 градусов, (нулевой не рисуется, т.к. автор чертит его из нулевой точки в нее же саму), один градус получается лишний, но всем похуй, т.к. π тоже округлено как попало.
kolybasov 12.12.2012 15:40 # −5
Ну, это не та помощь, на которую я рассчитывал. Спасибо.
bormand 12.12.2012 16:03 # 0
Что такое полярные координаты, и зачем там синус и косинус думаю понимаешь.
bormand 12.12.2012 16:11 # −1
kolybasov 12.12.2012 18:06 # 0
bormand 12.12.2012 14:55 # +3
Борланд такой борланд ;) Если не ошибаюсь - ни в одной проге кроме тех, что написаны на старых делфах и билдерах этого бага с копипастой нет.
> ZadniyBuffer
Дэвушка, дэвушка, стойте! Вах, какой у вас красивый ZadniyBuffer!
> Можете ли вы мне обьяснить весь код?
Тут любой может это сделать, но не будет. Ведь для объяснения лаб и курсачей есть платные репетиторы, зачем нам у них хлеб отбирать? Тем более код простой и скучный, поэтому объяснять его лень.
P.P.S. Для кода есть pastebin.com, а в коментах есть тег [code]...[/code]
kolybasov 12.12.2012 15:09 # −6
Спасибо, попробую.
"ShowMessage("Êîðàáåëü ðîç³ðâàëî! Âñÿ êîìàíäà ïîìåðëà!");
Борланд такой борланд ;) Если не ошибаюсь - ни в одной проге кроме тех, что написаны на старых делфах и билдерах этого бага с копипастой нет."
Да, это IDE 2002-го года.
"Можете ли вы мне обьяснить весь код?
Тут любой может это сделать, но не будет. Ведь для объяснения лаб и курсачей есть платные репетиторы, зачем нам у них хлеб отбирать? Тем более код простой и скучный, поэтому объяснять его лень."
Очень оплохо "