用c语言编的射箭游戏代码18
ó?có???±àμ?é??yó??·′ú??18.txtà?×óo?ó?o¢×ó?D?ìóy£?o¢×óo?ó?à?×ó?D???-£??¥?ào?ó??D′ú1μ?£?? ?Dè? ?a?¨?¨êà??£??òòaó?ê2?′??é?à′?üòy???£
#include
#include
#include
#include
#include
#include
#define G 9.8 /*??á|?ó?ù?è*/
#define PI 3.141593 /*?2?ü?ê*/
#define L1 60 /*D??Y???ˉμ?·??§*/
#define T1 100
#define R1 200
#define B1 450
#define AMD1 7.8 /*DT??êy7.8*/
#define AMD2 1.78 /*DT??êy*/
/*êó±êD??¢oê?¨ò?*/
#define WAITING 0xff00
#define LEFTPRESS 0xff01
#define LEFTCLICK 0xff10
#define LEFTDRAG 0xff19
#define RIGHTPRESS 0xff02
#define RIGHTCLICK 0xff20
#define RIGHTDRAG 0xff2a
#define MIDDLEPRESS 0xff04
#define MIDDLECLICK 0xff40
#define MIDDLEDRAG 0xff4c
#define MOUSEMOVE 0xff08
int Keystate;
int MouseExist;
int MouseButton;
int MouseX;
int MouseY;
int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];
void MouseMath()/*????êó±êμ??ù×ó*/
{
int i,j,jj,k;
long UpNum[16]={
0x3fff,0x1fff,0x0fff,0x07ff,
0x03ff,0x01ff,0x00ff,0x007f,
0x003f,0x00ff,0x01ff,0x10ff,
0x30ff,0xf87f,0xf87f,0xfc3f
};
long DownNum[16]={
0x0000,0x7c00,0x6000,0x7000,
0x7800,0x7c00,0x7e00,0x7f00,
0x7f80,0x7e00,0x7c00,0x4600,
0x0600,0x0300,0x0300,0x0180
};
for(i=0;i<16;i++)
{
j=jj=15;
while(UpNum[i]!=0)
{
up[i][j]=UpNum[i]%2;
j--;
UpNum[i]/=2;
}
while(DownNum[i]!=0)
{
down[i][jj--]=DownNum[i]%2;
DownNum[i]/=2;
}
for(k=j;k>=0;k--)
up[i][k]=0;
for(k=jj;k>=0;k--)
down[i][k]=0;
for(k=0;k<16;k++)/*????×éo?·?ê?*/
{
if(up[i][k]==0&&down[i][k]==0)
mouse_draw[i][k]=1;
else if(up[i][k]==0&&down[i][k]==1) mouse_draw[i][k]=2;
else if(up[i][k]==1&&down[i][k]==0) mouse_draw[i][k]=3;
else
mouse_draw[i][k]=4;
}
}
mouse_draw[1][2]=4;/*ì?êaμ?*/
}
/*êó±ê1a±ê??ê?*/
void MouseOn()
{
int x=MouseX,y=MouseY;
int i,j;
int color;
for(i=0;i<16;i++)/*?-êó±ê*/
{
for(j=0;j<16;j++)
{
pixel_save[i][j]=getpixel(x+j,y+i);/*±£′??-à′μ???é?*/ if(mouse_draw[i][j]==1)
putpixel(x+j,y+i,0);
else if(mouse_draw[i][j]==2)
putpixel(x+j,y+i,15);
}
}
}
/*òt2?êó±ê*/
void MouseOff()
{
int i,j,x,y,color;
x=MouseX;
y=MouseY;
for(i=0;i<16;i++)/*?-????òì?ò??è¥*/
for(j=0;j<16;j++)
{
if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)
continue;
color=getpixel(x+j,y+i);
putpixel(x+j,y+i,color^color);
putpixel(x+j,y+i,pixel_save[i][j]);
}
}
/*êó±ê×′ì??μ3?ê??ˉ*/
void MouseReset()
{
_AX=0x00;
geninterrupt(0x33);
}
/*éè??êó±ê×óóò±???
lx:×ó±???
rx:óò±??? */
void MouseSetX(int lx,int rx) {
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}
/*éè??êó±êé???±???
uy:é?±???
dy:??±??? */
void MouseSetY(int uy,int dy) {
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}
/*éè??êó±êμ±?°????
x:oá?ò×?±ê
y:×Y?ò×?±ê */
void MouseSetXY(int x,int y) {
_CX=x;
_DX=y;
_AX=0x04;
geninterrupt(0x33);
}
/*??è?êó±ê°′???üμ?D??¢*/
/*ê?·?°′??×ó?ü
·μ???μ: 1=°′?? 0=êí·?*/
int LeftPress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
/*ê?·?°′???D?ü
·μ???μí?é? */
int MiddlePress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&4);
}
/*ê?·?°′??óò?ü
·μ???μí?é? */
int RightPress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&2);
}
/*??è?êó±êμ±?°????*/
void MouseGetXY()
{
_AX=0x03;
geninterrupt(0x33);
MouseX=_CX;
MouseY=_DX;
}
/*êó±ê°′?ü?é??,·μ??0±íê???ò??ˉ£?·μ??1±íê?×óóò?üí?ê±°′??£?2±íê???°′á?×ó?ü£?3±íê???°′á?óò?ü*/
int MouseStatus()
{
int x,y;
int status;
int press=0;
int i,j,color;
status=0;/*??è?êó±ê??óDò??ˉ*/
x=MouseX;
y=MouseY;
while(x==MouseX&&y==MouseY&&status==0&&press==0)
{
if(LeftPress()&&RightPress())
press=1;
else if(LeftPress())
press=2;
else if(RightPress())
press=3;
MouseGetXY();
if(MouseX!=x||MouseY!=y)
status=1;
}
if(status)/*ò??ˉ?é??2???D???ê?êó±ê*/
{
for(i=0;i<16;i++)/*?-????òì?ò??è¥*/
for(j=0;j<16;j++)
{
if(mouse_draw[i][j]==3||mouse_draw[i][j]==4) continue;
color=getpixel(x+j,y+i);
putpixel(x+j,y+i,color^color);
putpixel(x+j,y+i,pixel_save[i][j]);
}
MouseOn();/*D???????ê?*/
}
if(press!=0)/*óD°′?üμ??é??*/
return press;
return 0;/*??ò??ˉμ??é??*/
}
/*?¨ò?í??òμ??á11ì?*/
struct Ren{
int x,y;
int life;
int color;
int lr;/*1±íê?×ó£?2±íê?óò?£*/
};
/*????ó??·????*/
void Desktop()
{
setcolor(14);
line(320,0,320,480);
rectangle(L1-20,T1-40,R1+20,B1+10);
rectangle(640-(R1+20),(T1-40),640-(L1-20),B1+10);
outtextxy(25,20,"P1");
outtextxy(345,20,"P2");
}
/*?D??μ?(x,y)ê?·??úò?(cx,cy)?a?2D?£?ò?r?a°???μ??2?ú*/
/*int PointCircle(int cx,int cy,int r,int *x,int *y)
{
double g;
if((cx-(*x))*(cx-(*x))+(cy-(*y))*(cy-(*y))<=r*r)
return 1;
else
{
g=sqrt((double)((*x-cx)*(*x-cx)+(*y-cy)*(*y-cy)))/(double)(r);
*x=(int)((double)(*x-cx)/g)+cx;
*y=(int)((double)(*y-cy)/g)+cy;
return 0;
}
} */
/*°?ò???êy×?n×a??3é×?·?′?£?2¢′?′¢?úa?D£?′?·?o?+-*/
void numtostr(int n,char a[5])
{
int w,e;
e=n;
n=abs(n);
a[3]=(n%10)+'0';
w=n/10;
a[2]=(w%10)+'0';
w=w/10;
a[1]=(w%10)+'0';
a[4]='\0';
if(e<0)
a[0]='-';
else
a[0]='+';
}
/*°??ù?èoí???è×°??3é×?·?′?ê?3?*/
void AngleSpeed(double s,double angle)
{
int ss,aa;
char zzs[5],zza[5];
int left,top,right,bottom;
left=275;
top=50;
right=left+90;
bottom=top+10;
ss=(int)(s);
aa=(int)((angle)*180/PI);
numtostr(ss,zzs);
numtostr(aa,zza);
setfillstyle(1,15);
setcolor(10);
bar(left,top,right,bottom);
outtextxy(left+5,top+3,zzs);
outtextxy((left+right)/2+5,top+3,zza);
circle(right-6,top+3,2);
}
/*êμ??è??ú???1μ?oˉêy*/
void Fire (int a[4],double *v,double *angle,int n)/*aêy×é′?·???é?μ?á?μ?£?voíangle′?·??ú?÷é??÷μ????èoí?ù?è£?n±íê??ú?÷é??÷μ?×?è·?è*/
{
int t;
double vx,vy;
double sx,sy;
int m;
m=12*4/n;
randomize();
m=random(m)-m/2;
t=20;
sx=(double)(a[2]-a[0]);
sy=(double)(a[3]-a[1]);
vx=sx/(double)(t);
vy=(sy-0.5*PI*(double)(t*t))/(double)(t);
*angle=atan((-vy)/vx);
*v=sqrt(vx*vx+vy*vy);
*v=(*v)*(AMD2+0.01*(double)(m));
AngleSpeed(*v,*angle);
}
/*????éú?ü??μ?oˉêy*/
void LifePicture(int life,int color,int location)
{
char lm[5];
int l,t,r,b;
l=50;
t=20;
r=l+200;
b=t+10;
numtostr(life,lm);
setfillstyle(1,color);
setcolor(15);
if(location==1||location==3)
{
bar(l,t,r,b);
setfillstyle(1,4);
bar(l,t+(b-t)/4,l+life,t+3*(b-t)/4);
setfillstyle(1,color);
bar(r+10,t,r+50,b);
outtextxy(r+10+5,t+2,lm);
}
else
{ l=320+50;
r=l+200;
bar(l,t,r,b);
setfillstyle(1,4);
bar(l,t+(b-t)/4,l+life,t+3*(b-t)/4);
setfillstyle(1,color);
bar(r+10,t,r+50,b);
outtextxy(r+10+5,t+2,lm);
}
}
/*????D??Yμ?oˉêy*/
void RenPicture(int x,int y,int color)
{
setcolor(color);
setwritemode(1);
line(x,y-40,x-10,y-30);/*?-í·*/
line(x,y-40,x+10,y-30);
line(x-10,y-30,x+10,y-30);
line(x-5,y-30,x-5,y-10);/*?-2±×ó*/
line(x+5,y-30,x+5,y-10);
line(x-20,y-10,x+20,y-10);/*?-éí×ó*/
line(x-20,y+10,x+20,y+10);
line(x-20,y-10,x-20,y+10);
line(x+20,y-10,x+20,y+10);
}
/*?????yμ?oˉêy*/
void PictureBullets (int wx,int wy,int tx,int ty) {
setcolor(RED);
line(wx,wy,tx,ty);
line(wx-1,wy-1,tx,ty);
line(wx+1,wy+1,tx,ty);
}
/*????D??Yé??yμ?oˉêy*/
void InitialArrow (int x,int y,int c[4])
{
int addx=0,addy=0;
int a[2],b[2];
int bowb=7;
int bowx=2;
double bow=80.0;
bow=bow/2;
a[0]=x;
a[1]=y;
b[0]=x;
b[1]=y;
if((c[0]==c[2])&&(c[1]==c[3]))
{
addx=(c[2]-c[0])/6;
addy=(c[3]-c[1])/6;
PictureBullets(x+addx,y+addy,x-addx/4,y-addy/4);
setcolor(bowb);
line(a[0],a[1],b[0],b[1]);
setcolor(bowx);
line(a[0],a[1],x+addx,y+addy);
line(b[0],b[1],x+addx,y+addy);
}
else
{
addx=(c[2]-c[0])/6;
addy=(c[3]-c[1])/6;
PictureBullets(x+addx,y+addy,x-addx/4,y-addy/4);
if(addx==0&&addy!=0)
{
a[0]=b[0]=x;
a[1]=y-(int)(bow);
b[1]=y+(int)(bow);
}
if(addx!=0&&addy==0)
{
a[1]=b[1]=y;
a[0]=x-(int)(bow);
b[0]=x+(int)(bow);
}
if(addx!=0&&addy!=0)
{
a[0]=x+(int)(bow*sqrt((double)(addy)*(double)(addy)/((double)(addx)*(double)(add x)+(double)(addy)*(double)(addy))));
a[1]=y-(a[0]-x)*(addx)/addy;
b[0]=x-(int)(bow*sqrt((double)(addy)*(double)(addy)/((double)(addx)*(double)(add x)+(double)(addy)*(double)(addy))));
b[1]=y-(b[0]-x)*(addx)/addy;
}
setcolor(bowb);
line(a[0],a[1],b[0],b[1]);
setcolor(bowx);
line(a[0],a[1],x+addx,y+addy);
line(b[0],b[1],x+addx,y+addy);
}
}
/*?D??μ?qx£?qy?ú?±??μ?ê2?′????*/
int PointPlace(int qx,int qy,int x1,int y1,int x2,int y2)/*·μ??0±íê??ú?±??é?£?μ±D±?ê′??úê±£o1±íê??ú?±??μ?é???£?2±íê??ú?±??μ?????£?μ±D±?ê2?′??úê±£o3±íê??ú×ó??£?4±íê??úóò??*/
{
int s;
if(x1==x2)
{
if(qx return 3; else if(qx>x1) return 4; else return 0; } else { s=(int)(((double)(y1-y2))/((double)(x1-x2))*((double)(qx-x1))+(double)(y1)); if(qy return 1; else if(qy>s) return 2; else return 0; } } /*?ù?Yá?μ?×?±ê????3?á?μ??àà?oí?òá?(twoxy[0]-twoxy[2],twoxy[1]-twoxy[3])ó?(vector x,vectory)μ??D???£*/ void DistanceAngle (int twoxy[4],int vectorx,int vectory,double *distance,double *angle) { double a,b; double s; if((twoxy[0]==twoxy[2])&&twoxy[1]==twoxy[3]) { *distance=0; *angle=0; } else { b=(double)((double)(twoxy[3]-twoxy[1])*(double)(twoxy[3]-twoxy[1])+(double)( twoxy[2]-twoxy[0])*(double)(twoxy[2]-twoxy[0])); b=sqrt(b); *distance=b; s=(double)((double)(vectorx)*(double)(vectorx)+(double)(vectory)*(double)(ve ctory)); s=sqrt(s); a=(double)(((double)(twoxy[0]-twoxy[2])*(double)(vectorx)+(double)(twoxy[1]-twoxy[3])*(double)(vectory))); a=a/(b*s); a=acos(a); if(twoxy[3]>=twoxy[1]) { *angle=a; } else { *angle=a+(PI-a)*2; } } } /*óé?ù?è???è??sx£?sy??ê±??μ?±??ˉ*/ void RelativePosition(int *sx,int *sy,double v,double angle,double t) { *sx=(int)((v*cos(angle))*t); *sy=(int)((v*sin(angle))*t-0.5*G*t*t); } /*ó?êó±ê?-ò?ì??±??£?°??±??μ?á?μ?×?±ê·??útwoxyêy×é?ú?£*/ void TwoPoints(int twoxy[4],int dx,int dy) { int i,q=1; double speed=0.0,angle=0.0; twoxy[0]=0; twoxy[1]=0; setcolor(13); line(0,dy,640,dy); setcolor(4); MouseOn();/*??ê?êó±ê*/ setwritemode(1); i=0; while(q) { if(i==1) { MouseOff(); DistanceAngle(twoxy,1,0,&speed,&angle); AngleSpeed(speed/AMD1,angle); InitialArrow (dx,dy,twoxy); setcolor(4); line(twoxy[0],twoxy[1],twoxy[2],twoxy[3]); MouseOn(); if((twoxy[2]!=MouseX)||(twoxy[3]!=MouseY)) { twoxy[2]=MouseX; twoxy[3]=MouseY; /*PointCircle(twoxy[0],twoxy[1],50,&(twoxy[2]),&(twoxy[3]));*/ MouseOff(); DistanceAngle(twoxy,1,0,&speed,&angle); AngleSpeed(speed/AMD1,angle); InitialArrow (dx,dy,twoxy); setcolor(4); line(twoxy[0],twoxy[1],twoxy[2],twoxy[3]); MouseOn(); } } if(MouseStatus()) { sound(1000);/*?ìéùoˉêy*/ delay(10000); nosound(); delay(1000000); delay(1000000); delay(1000000); delay(1000000); if(i==0) { twoxy[0]=MouseX; twoxy[1]=MouseY; twoxy[2]=MouseX; twoxy[3]=MouseY; i=1; } else { MouseOff(); DistanceAngle(twoxy,1,0,&speed,&angle); AngleSpeed(speed/AMD1,angle); InitialArrow (dx,dy,twoxy); setcolor(4); line(twoxy[0],twoxy[1],twoxy[2],twoxy[3]); setcolor(13); line(0,dy,640,dy); q=0; i=0; } } } } /*·¢é??y£?speed1oíspeed2?????ù?è£?·μ???Dμˉ????*/ int Launch(int lx,int ly,int tx,int ty,int hm,int grade) { double speed1=0.01; int speed2=1000; int a[4]; int xx[2],xy[2]; double s=0.0,angle=0.0,t=0.0; lx=lx;ly=ly-40; if(hm==3) { a[0]=lx; a[1]=ly; a[2]=tx; a[3]=ty; Fire (a,&s,&angle,grade); } else { TwoPoints(a,lx,ly); DistanceAngle(a,1,0,&s,&angle); s=s/AMD1; } RelativePosition(&xx[0],&xy[0],s,angle,t-1); RelativePosition(&xx[1],&xy[1],s,angle,t); for(t=0.0;ly-xy[1]<480;t=t+speed1) { RelativePosition(&xx[0],&xy[0],s,angle,t-1); RelativePosition(&xx[1],&xy[1],s,angle,t); if(PointPlace(lx+xx[1],ly-xy[1],tx,ty-40,tx+10,ty-30)==2&&PointPlace(lx+xx[1],ly -xy[1],tx,ty-40,tx-10,ty-30)==2&&PointPlace(lx+xx[1],ly-xy[1],tx-10,ty-30,tx+10, ty-30)==1) { sound(4000);/*?ìéùoˉêy*/ delay(10000); nosound(); return 1; } if(PointPlace(lx+xx[1],ly-xy[1],tx-5,ty-30,tx+5,ty-30)==2&&PointPlace(lx+xx[1],l y-xy[1],tx-5,ty-10,tx+5,ty-10)==1&&PointPlace(lx+xx[1],ly-xy[1],tx-5,ty-30,tx-5, ty-10)==4&&PointPlace(lx+xx[1],ly-xy[1],tx+5,ty-30,tx+5,ty-10)==3) { sound(3000);/*?ìéùoˉêy*/ delay(10000); nosound(); return 2; } if(PointPlace(lx+xx[1],ly-xy[1],tx-20,ty-10,tx-20,ty+10)==4&&PointPlace(lx+xx[1] ,ly-xy[1],tx+20,ty-10,tx+20,ty+10)==3&&PointPlace(lx+xx[1],ly-xy[1],tx-20,ty-10, tx+20,ty-10)==2&&PointPlace(lx+xx[1],ly-xy[1],tx-20,ty+10,tx+20,ty+10)==1) { sound(2000);/*?ìéùoˉêy*/ delay(10000); nosound(); return 3; } if(ly-xy[1]<1) { delay(speed2); continue; } if(lx+xx[1]<1||lx+xx[1]>640-1) { return 0; } PictureBullets (lx+xx[0],ly-xy[0],lx+xx[1],ly-xy[1]); delay(speed2); PictureBullets (lx+xx[0],ly-xy[0],lx+xx[1],ly-xy[1]); } return 0; } /*D??Yò??ˉμ?oˉêy*/ int MoveRen(struct Ren *p) { int a,k=19200,b=0,d; int q=1; randomize(); for(;q;) { if(b==1) { p->lr=3; } RenPicture(p->x,p->y,p->color); if(p->lr==3) { b=1; delay(10000); delay(10000); delay(10000); delay(10000); delay(10000); delay(10000); //sleep(1); d=random(10); if(d==0) k=19200; if(d==1) k=19712; if(d==2) k=18432; if(d==3) k=20480; if(d==4) k=7181; p->lr=1; } else { k=bioskey(0); } RenPicture(p->x,p->y,p->color); switch(k){ case 19200: /*°′?ò×ó?ü*/ a=(p->x)-5; if(p->lr==1) { if(a>L1&&a { p->x=a; break; } } else { if(a>640-R1&&a<640-L1) { p->x=a; break; } } break; case 19712: /*°′?òóò?ü*/ a=(p->x)+5; if(p->lr==1) { if(a>L1&&a { p->x=a; break; } } else { if(a>640-R1&&a<640-L1) { p->x=a; break; } } break; case 18432: /*°′?òé??ü*/ a=(p->y)-5; if(p->lr==1) { if(a>T1&&a { p->y=a; break; } } else { if(a>T1&&a { p->y=a; break; } } break; case 20480: /*°′?ò???ü*/ a=(p->y)+5; if(a>T1&&a { p->y=a; } break; case 7181: /*enter?üμ?é¨?è??*/ if(b==1) p->lr=3; q=0; break; case 283: return 0; } } RenPicture(p->x,p->y,p->color); return 1; } /*ó??·?aê??°?-??*/ int GameStar()/*·μ??1±íê?μ¥è?ó??·3???£?2±íê?μ¥è?ó??·?D??£?3±íê?μ¥è?ó??·????£?4±íê?á?è?????£?5±íê?í?3?ó??·*/ { int q,k,h=0; for(;1;) { q=1; cleardevice();/*???áoˉêy*/ setcolor(15); settextstyle(0,0,5); outtextxy(100,100,"Start Game!"); settextstyle(0,0,1); outtextxy(20,300,"keys used:"); outtextxy(20,300," Arrow keys"); outtextxy(20,310," The left mouse button"); outtextxy(20,320," Enter"); outtextxy(20,330," Esc to Quit!"); setcolor(5); outtextxy(250,400,"One player!"); outtextxy(250,420,"Two players!"); outtextxy(250,440,"Quit!"); setwritemode(1); setcolor(6); rectangle(245,395+h*20,345,415+h*20); for(;q;) { setcolor(6); k=bioskey(0); sound(1000);/*?ìéùoˉêy*/ delay(10000); nosound(); if(k==20480) { rectangle(245,395+h*20,345,415+h*20); h=(h+1)%3; rectangle(245,395+h*20,345,415+h*20); }else if(k==7181) { if(h==0)/*μ¥è?ó??·,????μè??*/ { cleardevice();/*???áoˉêy*/ setcolor(2); outtextxy(20,30," Esc to back!"); outtextxy(250,240,"Lower"); outtextxy(250,260,"Middle"); outtextxy(250,280,"Higher"); setcolor(4); rectangle(245,235+h*20,300,255+h*20); for(;q;) { k=bioskey(0); sound(1000);/*?ìéùoˉêy*/ delay(10000); nosound(); if(k==20480) { rectangle(245,235+h*20,300,255+h*20); h=(h+1)%3; rectangle(245,235+h*20,300,255+h*20); }else if(k==7181) { return h+1; }else if(k==283) { h=0; k=1; q=0; break; }else{} } } if(h==1)/*á?è????1*/ return 4; if(h==2)/*í?3?ó??·*/ 程序设计实践 大作业 学号:20100302XXXX 姓名:XXX 班级:信息10-3班 实验题目:射击类飞机游戏 页脚内容1 成绩: 一.实验题目: 射击类飞机游戏 二.实验目的: 通过c语言编写一个射击类的打飞机小游戏,可以通过键盘来进行游戏,操作方法是“a”“d”“w”或者“←”“↑”“→”来控制,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次生还机会,游戏结束后可选择是否重新开始游戏…… 三.对游戏的改进: 这个游戏是我对一个小游戏进行的改造升级版,添加了颜色函数、终止函数,选择类函数,使游戏实现了可以终止,不再是分数、死亡数一直增加但是没有结束的情况;增加了颜色函数,使得游戏看起来更加的舒适;增加了终止函数,使游戏在死亡三次后自动结束游戏,并且可以选择是否重新开始游戏;另外增添了设置函数,使得可以对游戏进行设置,改变游戏大小,调整飞机运行速度等等,是游戏更加的人性化…… 四.实验内容 页脚内容2 编写出c语言代码,运行程序,并调试程序,最终实现游戏的功能。本程序主要包含游戏控制函数、设置是否继续游戏函数、输出函数、子弹移动函数、敌机移动函数、设置函数、菜单函数等7个主要函数,包含了不同的功能,对原来的程序作出了很大的改进,用到的主要语句有getche语句、for语句、while语句、printf语句、switch语句等等,添加了颜色函数,实现了诸多功能。可以在页面上显示制作人的主要信息等等…… 【流程图见打印版】 五.源程序: #include #include #include C编写的小游戏 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289- #i n c l u d e usingnamespacestd; constcharMOUSE='*'; constcharWAY=''; constcharWALL='@'; constcharPASS='.'; constcharIMPASS='X'; classGame{ public: Game(size_tuWidth,size_tuHeight):m_uWidth(uWidth),m_uHeigh t(uHeight),m_pcMaze(newchar[uWidth*uHeight]),m_mouse(0,1){ srand(time(NULL)); char(*pcMaze)[m_uWidth]=reinterpret_cast elseif(i==0||i==m_uHeight- 1||j==0||j==m_uWidth-1) pcMaze[i][j]=WALL; else pcMaze[i][j]=rand()%4WAY:WALL; } ~Game(void){ if(m_pcMaze){ delete[]m_pcMaze; m_pcMaze=NULL; } } voidRun(void){ for(Show();!Quit()&&Step();); } private: classMouse{ public: Mouse(size_tx,size_ty):m_x(x),m_y(y){} size_tGetX(void){returnm_x;} size_tGetY(void){returnm_y;} voidStepRight(void){ 程序设计实验 大作业 学院: 班级: 学号: 指导老师: 姓名: 实验项目名称:猜数字游戏成绩: 一、实验要求 根据所学知识编写一个小游戏--猜数字游戏 二、实验目的 为了加深对编程课程的基本知识的理解和掌握,并且掌握编程和程序调试的技巧通过程序的设计训练和提高学生的基本技能,掌握字符串的表示方法和字符串函数的功能、编程软件操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高解决实际问题的能力,巩固语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。 三、功能模块分析 1.系统能够随机产生一个1到1000的数字 2.比较输入数字与随机产生数字的大小 3.选择是否继续游戏 四、修改处 1.将输出内容由英文变为汉字 2.改变背景及输出字体的颜色 3将随机产生的数值范围由1-100变为1-1000 四、设计思路 # include 1: C语言游戏设计 1.1:课程设计目标 C语言编写一款打飞机游戏,掌握函数的使用和编程的整体思路。 1.2:整体设计思路 总体设想:运行游戏时显示游戏的界面,允许用户选择个性化设置,A、D、W分别控制飞机的左右移动和发射子弹,不同的敌机飞行和攻击,并不时伴有奖励。游行运行时播放音效,同时记录飞机的生命和得分,达到一定的分数进入下一关。 需要构建的函数:位图调用模块、界面输出函数、主菜单函数、设置函数、速度选择函数、游戏控制函数、敌机移动函数、子弹移动函数、boss 函数、计时函数。 1.3: 需调用的头文件:include 1.5:显示效果如下图所示: 初始设置界面:游戏界面 2 算法实现 2.1需要了解的知识点: Main函数和menu函数编写比较顺利,在bmp函数中遇到如何显示窗口和调用图片的问题,看了一些例子和网上的资料,逐渐掌握了一下知识点: ○1设备上下文:设备,显示器,打印机,数码相机,扫描仪这些类似的设备, 上下文,就是上面设备的相关信息,比如屏幕分辨率等 ○2 HANDLE 通用句柄,实际上是一个指向指针的指针,在Windows操作系统中, 内存操作器经常移动对象,来满足各种程序的内存需要,为了解决寻找对象问题,内存管理器开辟出一块专门的内存储存空间,把移动后的地址存储在该空间,这样就可以通过该地址间接寻找到对象。 ○3 HDC设备描述句柄,实现对窗口操作区域的GDI(图形设备接口, 负责系统 与绘图程序之间的信息交换,处理所有Windows程序的图形输出)操作,如画线、写文本、绘画制图等。 ○4 BITMAP 用于处理有像素数据定义的图像的对象。 C编写的小游戏集团档案编码:[YTTR-YTPT28-YTNTL98-UYTYNN08] #i n c l u d e usingnamespacestd; constcharMOUSE='*'; constcharWAY=''; constcharWALL='@'; constcharPASS='.'; constcharIMPASS='X'; classGame{ public: Game(size_tuWidth,size_tuHeight):m_uWidth(uWidth),m_uHeight(uHe ight),m_pcMaze(newchar[uWidth*uHeight]),m_mouse(0,1){ srand(time(NULL)); char(*pcMaze)[m_uWidth]=reinterpret_cast /* A simple game*/ /*CopyRight: Guanlin*/ #include 纯真童趣的《泡泡堂》,还有武林情仇,笑傲江湖的《剑侠情缘on line》.它是e 时代常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣. 1,总是从Hello,world开始学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude <> /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们还希望屏幕输出一个笑脸来欢迎我们. 让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结束.2,在printf语句前用clrscr函数清屏,要使用这个函数和getch函数,需要在程序开头再包含头文件码也有许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可以用printf("%c", 2)来输出一个笑脸. 现在我们把Hello,world程序改成一个更好看的Hello,world了.下面让我们开始做游戏吧! 2,心动的开始,一个运动中的笑脸大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来.先在程序定义一个在屏幕中运动的点的结构: struct move_point { int x, y;/*该点的位置,包括x坐标和y坐标*/ int xv, yv;/*该点在x轴,y轴的速度*/ }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: gotoxy, ;/*把光标移到指定的坐标*/ printf(" ");/*输出一个空格,把先前的字符擦去*/ 然后我们让物体按其速度运动: += ;/*水平方向按x轴的速度运动*/ += ;/*垂直方向按y轴的速度运动*/ 运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数.最后打印出这个笑脸: gotoxy, ; printf("%c\b", 2); /*输出ASCII码值为2的"笑脸"字符*/ 怎么样?是不是很有趣呢?不过这个笑脸一直是自己运动,能不能让我们来控制它运动呢?答案是肯定的,让我们继续往下学吧! 3,交互的实现——让我们来控制笑脸运动 这个程序的主要功能是接受按键,如果接收的是方向键,就让笑脸顺着方向移动,如果接收的是ESC键就退出程序,其他按键则忽略处理.接受按键我们用以下两条语句: while (bioskey(1) == 0);/*等待按键*/ key = bioskey(0);/*把接收的按键的键盘码赋给变量key*/ 然后用switch语句来判断按键以及执行相关操作,如下: switch (key) /*对变量key的值进行判断*/ { case UP: /*如果按的是向上键*/ … break; /*让物体向上运动,并退出switch*/ 用vc6.0新建一个Win32 Application工程,把附件代码拷贝进去即可。上下左右键控制蛇的方向,空格键用于启动或者停止游戏。 上下左右空格键 #include unsigned char food_state; unsigned char score; unsigned char snake_state; } Snake_Data,*Snake_Data_handle; Snake_Data snk_1; #define MAP_X 64 #define MAP_Y 64 unsigned char game_map[MAP_Y][MAP_X]; LRESULT CALLBACK Win_tetris_Proc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ); int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state ) { snk_1.Head_X = 0x01;//head x snk_1.Head_Y = 0x00;//head y snk_1.Tail_X = 0x00;//tail x snk_1.Tail_Y = 0x00;//tail y snk_1.h_index=0; snk_1.t_index=0; snk_1.food_state=0; snk_1.score=0; snk_1.snake_state = 1; s_count[snk_1.h_index].cnt=2; s_count[snk_1.h_index].direction=GO_RIGHT; s_count[snk_1.t_index].cnt=2; s_count[snk_1.t_index].direction=GO_RIGHT; WNDCLASS wndcls; wndcls.cbClsExtra=0; 如何用c语言编写小游戏 ----------------------------精品word文档值得下载值得拥有---------------------------------------------- 纯真童趣的《泡泡堂》,还有武林情仇, 笑傲江湖的《剑侠情缘on line》.它是e时代常谈的话题,是交互 式娱乐的主力军,是一种 高层次的综合艺术,更是一个民族的文 化,世界观的全新传播方式 .作为游戏玩家的我们,是不是想设计一 个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机 专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我 们能不能通过编一些小 游戏来提高它的趣味性呢?这样学习程 序设计,就不会是一件艰苦 ----------------------------精品word文档值得下载值得拥有---------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------- ----------------------------精品word文档值得下载值得拥有---------------------------------------------- ,枯燥的事,它变得象电脑游戏一样充满 好奇,富有乐趣.这正是 我发贴的目的. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印 一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的 C程序: #incolude C语言编程题及答案(三) 猜数游戏 在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,…… 程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。 程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。 程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。 程序4 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。 【思考题】如果用scanf输入用户猜测的数据时,如果用户不小心输入了非法字符,如字符a,那么程序运行就会出错,用什么方法可以避免这样的错误发生呢?请读者编写程序验证方法的有效性。 C语言编写的迷宫小游戏源代码 #include 设为首页收藏本站 快捷导航论坛视频教程c/c++PHP 问答平台编程文章 个人空间搜索QQ 群 热搜:c 语言java 编程教程自学去 学 论坛 编程语言 C/C++ c 语言编写小游戏系列教程之推动箱子 返回列表 电梯直达 楼主admin 在线 |每日签到 |我的 |设置 |消息 |提醒(2) |门户管理 |管理中心 |退出积分: 9681 | 用户组: 管理员请输入搜索内容帖子 索删除主题|升降|置顶|直播|高亮|精华|图章|图标|关闭|移动|分类|复制|合并|分割|修复|警告|屏蔽|标签|生成文章 查看: 519|回复: 1[精品文章] c语言编写小游戏系列教程之推动箱子 [复制链接] admin 790主题3975帖子9681积分 管理员 发表于 2015-1-4 18:47:19 | 只看该作者 上节课:https://www.360docs.net/doc/c12524728.html,/thread-15448-1-1.html 上节课中 我们已经实现了人物的移动,大家的可以发现,人物可以移动,但是却不能推动箱子,还能穿过障碍物和箱子。 这节课,我们的人物,就是解决这两个问题,推动箱子,还有障碍物检测。 在这之前不得不先说一个问题,随着程序代码越来越多,我们一个文件中代码已经很长了,这样不利于代码的阅读和维护,所以这节课我们决定将代码 按照功能来分成不同的文件,类似模块化编程,每个功能就是一个模块。如何把代码放到多个文件呢? 把代码的申明部分放到,头文件中,实现部分 放到源文件中。 消息 新听众(3)坛友互动(1) 我的帖子(1) 积分 9681 IP 编辑禁止帖子清理 比如,关于箱子操作的函数以及箱子的结构体定义,我们就放在 box.h 中 函数的具体功能实现就放在 box.c 中。人物操作 就放在 person.h 和 person.c 中。其他的也是 类似。 头文件如何写? 我们看看例子,下面是 box.h 的所有内容 01. #ifndef _BOX_H_02. #define _BOX_H_ 03. 04. #include 纯C语言写的一个小型游戏-源代码 /* A simple game*/ /*CopyRight: Guanlin*/ #include C语言编程2048小游戏 /*By Reason*/ #include cout< 如何用 c 语言编写小游戏 ------------------ 精品word 文档值得下载值得拥有---------------- 纯真童趣的《泡泡堂》, 还有武林情仇, 笑傲江湖的《剑侠情缘on line 》. 它是e 时代常谈的话题, 是交互式娱乐的主力军, 是一种高层次的综合艺术, 更是一个民族的文化, 世界观的全新传播方式 . 作为游戏玩家的我们, 是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础 学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件艰苦 ------------------ 精品word 文档值得下载值得拥有---------------- 精品word 文档值得下载值得拥有 , 枯燥的事, 它变得象电脑游戏一样充满 好奇, 富有乐趣. 这正是我发贴的目的. 1, 总是从Hello,world 开始学习编程的第一个程序, 一般就是打印一个亲切 的词语——"Hell o,world!". 让我们来看看这个最简单的 C程序: #incolude /* A sim ple gam e*/ /*CopyRight: Guanlin*/ #include 如何用C语言编写游戏公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N] 如何用C语言编写游戏 网络游戏是常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢 爱玩是人的天性,而C语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小 游戏来提高它的趣味性呢这样学习程序设计,就不会是一件艰苦 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是 我要写这文档目的. 1, 总是从Hello,world开始 学习编程的第一个程序,一般就是打印一个亲切的词语——"Hell o,world!".让我们来看看这个最简单的C程序: #incolude <> /*把输入输出函数的头文件包含进来*/ int main() { printf("Hello, world!");/*在屏幕上输出字符串"Hello,world!"*/ return 0;/*退出main函数,并返回0*/ } 下面我们发现几个值得改进的地方,1,程序的运行结果一闪而过 .2,每执行这个程序一次都能看见上次运行留下的字符.3,我们 还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸 曾经有人发贴专门问呢)让我们来改进一下这个程序吧! 1,在return语句的前面加一句:getch ();,表示按任意键结 束.2,在printf语句前用clrscr函数清屏,要使用这个函数和get ch函数,需要在程序开头再包含头文件码也有 许多非常好玩的字符,比如ASCII码值为2的就是一个笑脸,我们可 C语言程序设计报告题目: 扫雷小游戏设计 电子通信与物理学院 日期: 2018 年 7 月 12 日指导教师评语 目录 1. 课程设计容 (1) 2. 课程设计目的 (1) 3. 背景知识 (1) 4. 工具/准备工作 (3) 5. 设计步骤、方法 (3) 5.1 (3) 5.2定义全局变量 (4) 5.3挖雷部分函数的分析 (5) 6. 设计结果及分析 (11) 7. 设计结论 (16) 8. 参考文献 (17) 附录 (17) 1. 课程设计容 在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。 扫雷游戏是Windows操作系统自带的一款小游戏,在过去的几年里,Windows操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。我利用C-free编写了与它功能相仿的挖地雷游戏,寓学于乐。 即:设计一个功能与Windows中的挖雷游戏相同的小游戏。 2. 课程设计目的 1.培养学生综合运用所学知识独立完成课题的能力。 2.试学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。3.提高对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 4.培养勇于探索、严谨推理、实事、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 5.培养从资料文献、科学实验中获得知识的能力,提高从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核c语言小游戏编程
C语言编程游戏代码
C编写的小游戏
C语言小游戏程序设计
c语言游戏讲解
C编写的小游戏
纯C语言写的一个小型游戏-源代码
使用C语言编写简单小游戏
c语言编写的小游戏代码
如何用c语言编写小游戏
c语言编程题及答案
C语言编写的迷宫小游戏_源代码
c语言编写小游戏系列教程之推动箱子,C_C++,自学去
纯C语言写的一个小型游戏-源代码
C语言编程2048小游戏
如何用c语言编写小游戏
纯C语言写的一个小型游戏 源代码
如何用C语言编写游戏
C语言程序设计扫雷游戏