PDA

View Full Version : ran san moi



luuhuong18689
21-04-2009, 23:45
em dang co bai tap lon viet tro choi ran san moi tren c++
em muon lam xuat hien moi thuong sau 10 lan an moi nho lien tiep
giong nhu trong dien thoai
em lam mai ma no van chua chay dc
co bac nao biet giup em voi
day la doan code em da viet

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
#include<stdlib.h>
#include<math.h>


int r,n,j; //kich thuoc, so luong dot cua ran
int xm,ym;
int kt,kt1;

unsigned mau_ran,mau_nen,kt_moi,mau_moi;

class ran
{
private:
int x,y;

public:
void ve(ran *p);
void an(ran *p);
void kt(ran *p);
void dc(ran *p);
void moi();
int hc(ran *p);

friend void main();

};
void ran::ve(ran *p)
{
setcolor(mau_ran);
setfillstyle(1,6);
//floodfill(x,y,2);
for(int i=0;i<n;++i)
{
circle(p[i].x,p[i].y,r);
floodfill(p[i].x,p[i].y,mau_ran);
}
}
void ran::an(ran *p)
{
setcolor(getbkcolor());
setfillstyle(1,getbkcolor());
for(int i=0;i<n;++i)
{
circle(p[i].x,p[i].y,r);
floodfill(p[i].x,p[i].y,getbkcolor());
}
}
void ran::moi()
{
setcolor(mau_moi);
xm=random(getmaxx()-110);
ym=random(getmaxy());

circle(xm,ym,kt_moi);

if(xm+kt_moi<=10&&ym+kt_moi<=10) {
setcolor(getbkcolor());
circle(xm,ym,kt_moi);

xm=xm+100; ym=ym+34;
setcolor(mau_moi);
circle(xm,ym,kt_moi);
}
}
void ran::kt(ran *p)
{
if(p[0].x<=xm+kt_moi&&p[0].x>=xm-kt_moi&&p[0].y>=ym-kt_moi&&p[0].y<=ym+kt_moi)//&&p[0].x-r+2<=xm+r&&p[0].x-r+2>=xm-r&&p[0].y-r+2>=ym-r&&p[0].y-r+2<=ym+r)
{
n++;j++;
setcolor(3);
rectangle(550,130,635,180);
gotoxy(71,10);
cout<<"Diem : "<<j;
setcolor(getbkcolor());
circle(xm,ym,kt_moi);
delay(100);
moi();
if(p[0].x==xm) xm=xm+10;
if(p[0].y==ym) ym=ym+10;
}
}
int ran::hc(ran *p)
{
if(p[0].x>=getmaxx()-r-103) return p[0].x=r+6;
if(p[0].y>=getmaxy()-r-5) return p[0].y=r+6;

if(p[0].x<=r+6) return p[0].x=getmaxx()-r-105;
if(p[0].y<=r+5) return p[0].y=getmaxy()-r-6;

return 1;
}
void ktbp()
{
int ch;
if(kbhit())
{ ch=getch();
if(ch==27) kt=0;
if(ch==77) kt=1;
if(ch==75) kt=2;
if(ch==72) kt=3;
if(ch==80) kt=4;
if(kt==1&&kt1==2) kt=2;
else if(kt==2&&kt1==1) kt=1;
else if(kt==3&&kt1==4) kt=4;
else if(kt==4&&kt1==3) kt=3;
else kt1=kt;
}
}

void ktdh()
{
int mh=0,mode=0;
initgraph(&mh,&mode,"..\\BGI");
}
void main()
{
int i;
ran p[50];//char ch;
ktdh();
r=5;n=5;j=0;
delay(100);
cleardevice();
xm=getmaxx()/2;
ym=getmaxy()/2;
mau_ran=4;
mau_moi=5;
kt_moi=5;
kt=kt1=1;
circle(xm,ym,kt_moi);

setcolor(3);
rectangle(550,130,635,180);
gotoxy(71,10);
cout<<"Diem : "<<j;


setcolor(9);
//line(5,0,5,480);

line(getmaxx()-100,0,getmaxx()-100,480);
setcolor(6);
rectangle(5,5,535,475);
while(1)
{
p[0].ve(p);
delay(100);
p[0].an(p);
if(kbhit()) ktbp();
//ch=getch();

if(kt==0) { //p[0].an();
cleardevice();

gotoxy(45,15);
cout<<" SEE YOU AGAIN ! BYE ";
break;
}
if(kt==1) {
//kt=1;
for(i=n;i>0;--i)
{
p[i].x=p[i-1].x;
p[i].y=p[i-1].y;
}
p[0].x=p[0].x+2*r;
}
if(kt==2) {
//kt=2;
for(i=n;i>0;--i)
{
p[i].x=p[i-1].x;
p[i].y=p[i-1].y;
}
p[0].x=p[0].x-2*r;
}
if(kt==3) {
//kt=3;
for(i=n;i>0;--i)
{
p[i].x=p[i-1].x;
p[i].y=p[i-1].y;
}
p[0].y=p[0].y-2*r;
}
if(kt==4) {
//kt=4;
for(i=n;i>0;--i)
{
p[i].x=p[i-1].x;
p[i].y=p[i-1].y;
}
p[0].y=p[0].y+2*r;
}



p[0].kt(p);
p[0].hc(p);
for( i=1;i<=n;i++)
if(p[0].x<p[i].x+r&&p[0].x>p[i].x-r&&p[0].y<p[i].y+r&&p[0].y>p[i].y-r)
//if(p[0].x==p[i].x+r) {
{ //gotoxy(45,15);
//cout<<" game over !";

cleardevice();
//closegraph();
//break;
//p[0].an(p);
gotoxy(30,15);
cout<<" Ket Thuc Tro choi "<<endl;

gotoxy(29,17);
cout<<" Diem cua ban La : "<<j;
gotoxy(30,16);
cout<<" Chuc Vui Ve^.^ ";
break;
}


}

//getch();
closegraph();



}