# Đề tài: [C] QuẢn LÝ NhiỀu ChuyỂn ĐỘng?

1. Nhuan_Trang_Only_Love Khách

## [C] QuẢn LÝ NhiỀu ChuyỂn ĐỘng?

Mình vừa làm xong bài đua ô tô,không hay lắm.
đây là code của mình

//dua o to design by nhuan
#include "graphics.h"
#include "dos.h"
#include "stdio.h"
#include "conio.h"
#include "alloc.h"
#include "iostream.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"

#define gx getmaxx()/2
#define gy getmaxy()/2

void msg_hd()//huong dan
{
setcolor(RED);
rectangle(0,0,gx-84,2*gy);
setfillstyle(7,BLUE);
floodfill(1,1,RED);
char *text[]={" "," __!__HUONG DAN CHOI__!__", "_Ban co gang di chuyen xe",
"'mau trang' tu noi co ten","cua ban den noi co ten cua","nguoi ay...Bang cac phim",
"mui ten,ban co the Tien,Lui","Sang Trai hoac Phai.Tuy","nhien ban khong nen bam liet",
"mot nut nhat dinh,ma tung", " nhat mot de de dieu khien ","Sau do ban phai",
"quay tro ve vi tri co ten","cua ban sau do lai tiep tuc.","_Moi lan nhu vay ban","duoc cong 10% vao 'ty le%'",
"____________________________"," !CHUC BAN THANH CONG!",
"____________________________","Ban co the bam ESC de thoat",
"Khi ban bi dem xe ,bam ENTER","de thu lai , hoac phim",
" 'N' de nhap lai ten","____________________________"};
//llllllllllllllllll
for(int i=0;i<=23;i++)
{
if(i==1||i==16||i==17||i==18||i==23) setcolor(WHITE);
else setcolor(LIGHTRED);
outtextxy(6,i*15,text[i]);
}
outtextxy(14,2*gy-100,"_______CHINH PHUC_______");
outtextxy(14,2*gy-20,"DESIGN BY NHUAN _ K46 CNTT");
}
void oto_vc()
{
setcolor(GREEN);
rectangle(15,0,30,60);
rectangle(0,0,45,15);
rectangle(0,30,45,45);
}
void oto_kc()
{
setcolor(YELLOW);
rectangle(115,0,130,60);
rectangle(100,15,145,30);
rectangle(100,45,145,60);
}
struct toa_do //toa do put
{
int x;
int y;
int DT;
};
void xuat(toa_do ot[3],void *tranh,int &DL)//vat can
{
putimage(ot[0].x,ot[0].y,tranh,XOR_PUT);
putimage(ot[1].x,ot[1].y,tranh,XOR_PUT);
putimage(ot[2].x,ot[2].y,tranh,XOR_PUT);

delay(DL);

putimage(ot[0].x,ot[0].y,tranh,XOR_PUT);
putimage(ot[1].x,ot[1].y,tranh,XOR_PUT);
putimage(ot[2].x,ot[2].y,tranh,XOR_PUT);
}
void put_my_car(int my_car_x,int my_car_y,void*my_car)
{
putimage(my_car_x,my_car_y,my_car,XOR_PUT);//my_car
}
void put(void *tranh,void *my_car)//ham put vi tri
{
toa_do oto[3];
randomize();
int tf=random(2);//true false
int my_car_x=gx+1,my_car_y=2*gy-61;
int game_over=0;//dieu kien dam nhau
int lan_chinh_phuc=0;
int DL=70;
char ch;
char *ty_le[11]={"0","10","20","30","40","50","60","70","80","90" ,"100"};
oto[0].x=gx-46;
oto[0].y=0;
oto[0].DT=5;
oto[1].x=gx+1;
oto[1].y=-61;
oto[1].DT=5;
oto[2].y=-122;
oto[2].DT=5;
put_my_car(my_car_x,my_car_y,my_car);
setcolor(11);
circle(2*gx-120,gy,20);
setfillstyle(1,12);
floodfill(2*gx-120,gy,11);
setcolor(WHITE);
outtextxy(2*gx-124,gy-5,ty_le[lan_chinh_phuc]);//ty le
while(ch!=27&&lan_chinh_phuc!=11)
{
if(tf) oto[2].x=oto[0].x;
else oto[2].x=oto[1].x;
if(oto[0].y>2*gy) oto[0].y=-abs(oto[1].y-2*gy)+60 ; //oto 1 ben trai
if(oto[1].y>2*gy) oto[1].y=-abs(oto[2].y-2*gy)+60 ; //oto 2 ben phai
if(oto[2].y>2*gy) {oto[2].y=-abs(oto[0].y-2*gy)+60;if(tf) tf=0 ;else tf++; } //oto 3 trai or phai
//_____________________________
oto[0].y+=oto[0].DT;
oto[1].y+=oto[1].DT;
oto[2].y+=oto[2].DT;
//_____________________________
if(oto[0].y-oto[1].y<61){if(oto[0].DT>1)oto[0].DT--;if(oto[1].DT<9)oto[1].DT++;}
if(oto[0].y-oto[2].y<61){if(oto[0].DT>1)oto[0].DT--;if(oto[2].DT<9)oto[2].DT++;}
if(oto[1].y-oto[2].y<61){if(oto[1].DT>1)oto[1].DT--;if(oto[2].DT<9)oto[2].DT++;}
if(oto[1].y-oto[0].y<61){if(oto[1].DT>1)oto[1].DT--;if(oto[0].DT<9)oto[0].DT++;}
if(oto[2].y-oto[0].y<61){if(oto[2].DT>1)oto[2].DT--;if(oto[0].DT<9)oto[0].DT++;}
if(oto[2].y-oto[1].y<61){if(oto[2].DT>1)oto[2].DT--;if(oto[1].DT<9)oto[1].DT++;}
//_____________________________
if(oto[0].y+122<oto[1].y){if(oto[0].DT<9)oto[0].DT++;if(oto[1].DT>1)oto[1].DT--;}
if(oto[0].y+122<oto[2].y){if(oto[0].DT<9)oto[0].DT++;if(oto[2].DT>1)oto[2].DT--;}
if(oto[1].y+122<oto[2].y){if(oto[1].DT<9)oto[1].DT++;if(oto[2].DT>1)oto[2].DT--;}
if(oto[1].y+122<oto[0].y){if(oto[1].DT<9)oto[1].DT++;if(oto[0].DT>1)oto[0].DT--;}
if(oto[2].y+122<oto[0].y){if(oto[2].DT<9)oto[2].DT++;if(oto[0].DT>1)oto[0].DT--;}
if(oto[2].y+122<oto[1].y){if(oto[2].DT<9)oto[2].DT++;if(oto[1].DT>1)oto[1].DT--;}
//_____________________________
xuat(oto,tranh,DL);//cac vat can
if(kbhit())//dieu kien bam phim cua oto
{
ch=getch();
switch(ch)
{
//up
case 72:if(my_car_y>10&&my_car_x<gx+47)
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_y-=10;
put_my_car(my_car_x,my_car_y,my_car);
}
break;
//down
case 80:if(my_car_y<2*gy-70&&my_car_x<gx+47)
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_y+=10;
put_my_car(my_car_x,my_car_y,my_car);
}
break;
//left
case 75:if(my_car_x>gx-46)
if(my_car_y==8||my_car_y==2*gy-71)
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_x-=48;
put_my_car(my_car_x,my_car_y,my_car);
}
else
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_x=gx-46;
put_my_car(my_car_x,my_car_y,my_car);
}
break;
//righ
case 77:if(my_car_x<gx+47)
{
if(my_car_y==2*gy-71||my_car_y==8)
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_x+=48;
put_my_car(my_car_x,my_car_y,my_car);
}
else
{
put_my_car(my_car_x,my_car_y,my_car);
my_car_x=gx+1;
put_my_car(my_car_x,my_car_y,my_car);
}
}
break;
//thoat
case 27:exit(1);
}
}
if(abs(my_car_x-oto[0].x)<5&&abs(my_car_y-oto[0].y)<60) game_over=1;
if(abs(my_car_x-oto[1].x)<5&&abs(my_car_y-oto[1].y)<60) game_over=1;
if(abs(my_car_x-oto[2].x)<5&&abs(my_car_y-oto[2].y)<60) game_over=1;

if(game_over) {put_my_car(my_car_x,my_car_y,my_car);return;}

}//end while
}
main()//chuong trinh chinh
{
NT:
char ch,ng1[27],ng2[27];
cout<<"\nHay nhap ten cua ban: ";
gets(ng1);
cout<<"\nHay nhap ten cua nguoi yeu: ";
gets(ng2);
int mh=DETECT,kieu;
void *tranh,*my_car;
initgraph(&mh,&kieu,"c:\\C_P_T_Y\\bgi");
oto_vc();
tranh=malloc(imagesize(0,0,45,60));
getimage(0,0,45,60,tranh);
oto_kc();
my_car=malloc(imagesize(100,0,145,60));
getimage(100,0,145,60,my_car);
cleardevice();
setcolor(YELLOW);//------------------
outtextxy(gx+100,2*gy-45,ng1);
outtextxy(gx+100,32,ng2);//--------------
setcolor(WHITE);
line(gx+102+strlen(ng1)*8,2*gy-41,2*gx,2*gy-41);
line(gx+102+strlen(ng2)*8,36,2*gx,36);
line(2*gx,36,2*gx,2*gy-41);
line(2*gx,gy,2*gx-100,gy);
line(2*gx-120,gy-20,2*gx-120,gy-50);
line(2*gx-185,gy-50,2*gx-120,gy-50);
outtextxy(2*gx-180,gy-60,"Ty Le %");
setcolor(8);
rectangle(gx-48,0,gx+48,2*gy);//khung bao ngoai
rectangle(gx+48,6,gx+97,70);
rectangle(gx+48,2*gy-9,gx+97,2*gy-74);
setcolor(BLACK);
line(gx+48,6,gx+48,70);
line(gx+48,2*gy-9,gx+48,2*gy-74);
setfillstyle(9,1);
floodfill(gx,gy,8);
//msg huong dan
msg_hd();
loop://play again
put(tranh,my_car);//fun put cac vi tri o to
while(ch!=27)
{
ch=getch();
if(ch==13) goto loop;
if(ch=='n'||ch=='N') goto NT;
}
closegraph();
}
//xem xong cho mình ý kiến nha
/*Mình đang dự định đi làm bài bắn đĩa bay ,với lượng đĩa bay nhiều nhất trên màn hình khoảng 10 đến 15 cái.Tuy nhiên mình chưa nghĩ ra cách quản lý chúng để làm sao chúng cũng chuyển động riêng biệt giống bài trên.
Ai có ý tưởng hay góp ý cho tôi với......
thank!
*/

2. Chịu thoai, mấy cái đồ họa trên C mình ko có mê nên ko học, đọc ko hiểu
Học OpenGL đi you, vẽ đẹp hơn mà lại vẽ được cả 3d.

3. Làm trên dos ah, sao ko học lập trình trong win đê, đảm bảo ko bao giờ bị nháy hình.

4. Nhuan_Trang_Only_Love Khách
Thông cảm nha vì mình mới được học một chút về lập trình thui mà
Với lại là học C, ngoài ra mình không biết chút gì về các ngôn ngữ khác à
À OpenGL là gì vậy?down nó ở đâu?cho mình chút hướng dẫn về nó được hổng à?
Với lại mình quan niệm rằng học gì cũng phải nắm được bản chất của nó, và phải nắm vững những cái cơ bản nhất
Mong nhận được giúp đỡ và chia sẻ

5. Nhuan_Trang_Only_Love Khách
À quên mất tôi cần nhận được sự chia sẻ về thuật giải của bài này.
Còn tren win hay dos thì vẫn phải là thuật giải đúng mà?
Mong nhận được chỉ giáo nha
THANK!

6. ## [C] QuẢn LÝ NhiỀu ChuyỂn ĐỘng?

Nếu muốn làm trên Windows hay một hệ điều hành 32bit nào đó cần thiết phải nghiên cứu đến một trong 2 thứ là: DirectX hoặc OpenLG. Những vấn đề về đồ họa là khá khó, và trừu tượng. Nếu xử lý đồ họa trên Windows thì mọi người khuyến cáo sử dụng DirectX, ngược lại thì sử dụng OpenLG.

@...
Lưu ý cách viết tên đề tài nhé. cảm ơn

#### Quyền hạn của bạn

• Bạn không thể gửi đề tài mới
• Bạn không thể gửi bài trả lời
• Bạn không thể gửi các đính kèm
• Bạn không thể chỉnh sửa bài viết của bạn