C语言精细绘图及动画

来源:本站
导读:目前正在解读《C语言精细绘图及动画》的相关信息,《C语言精细绘图及动画》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言精细绘图及动画》的详细说明。
简介:制个程序是本人自己编写,所以这里能后做出具体解释。程序运行后会在屏幕上用triplex_font显示“press any key for set off”,下方是用基本的线条画出的发射架(有点粗糙),即程序中的DrawGun()函数,当按下任意键后,将在发射架上方出现一个用横线填充的飞机,同时背景被繁星填充。

此时必须按住任意键不放,否则飞机将不会发射。发射完成后,即飞机坐标小于0,将出现一句话:"successfully!!!,press ESC to quit",若中途按ESC退出,则飞机Y坐标不小于0,将出现"failue,..."这句话。

#include<graphics.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<alloc.h>

#define ESC 0x1b/*ESC的ASCII码,十六进制*/

void InstallGraph(void);/*图形程序加载函数的说名语句*/

void DrawGun(void); /*画发射架函数的说明语句*/

void DrawPlan(void); /*画飞机函数的说明语句*/

void DrawStar(void); /*画星函数的说明语句*/

void *buf; /*全局变量,用于存储飞机的图像*/

int x0=300; /*以下是飞机的位置初始化参数*/

int y0=340;

int width1=5;

int width2=20;

int height=25;

int y1=8;

int y2=15;

int y3=23;

int y4=38;

/*主函数开始*/

main()

{

int size;

int i=0;

int key;

int station;

InstallGraph();

setbkcolor(BLACK);

cleardevice();/*图形驱动程序和屏幕初始化工作完成*/

setcolor(BLUE);/*设置字的颜色*/

settextstyle(TRIPLEX_FONT,0,4);/*设置字体*/

outtextxy(80,100,"Ready!...Any key to SET OFF !!!");

DrawGun(); /*画出发射架*/

getch(); /*if press key,clear the words and start*/

cleardevice();

DrawGun();

DrawPlan();

DrawStar();

setcolor(LIGHTRED);/*define result words color*/

do{ /*程序主循环开始,用于运动飞机,方法是用异或的方式在屏幕上连续画出飞机 的图像,每画一次,新图像和来的位置相差两个像素点。

这个值是可调的,值越大,飞机飞行的速度越快*/

putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);

i+=2;

putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);

key=getch();

if(y0-height-3*width1-i==0)

outtextxy(60,100,"Successfully!!! Press ESC to quit");

if(key==ESC){

if(y0-height-3*width1-i>0){

cleardevice();

outtextxy(100,100,"Failue. What did you do?");

outtextxy(130,300,"Press any key to quit.");

getch();

}

}

}while(key!=ESC);

free(buf);

closegraph();

return 0;

}

/*****************Install the graphics library***********************/

void InstallGraph(void)

{

int grdriver=DETECT;

int grmode;

int errorcode;

char *errormsg;

registerbgidriver(EGAVGA_driver);

registerbgifont(triplex_font);

initgraph(&grdriver,&grmode,"");

errorcode=graphresult();

errormsg=grapherrormsg(errorcode);

if(errorcode!=grOk){

printf("Graphics error: %sn",errormsg);

printf("Press any key to exit.n");

getch();

exit(1);

}

}

/************************Draw the star ********************************/

void DrawStar(void)

{

int seed=2000;

int i,dotx,doty,height,width,color,maxcolor;

maxcolor=getmaxcolor();

width=getmaxx();

height=getmaxy();

srand(seed);

for(i=0;i<250;i++){

dotx=i+random(width-1);

doty=i+random(height-1);

color=random(maxcolor);

setcolor(color);

putpixel(dotx,doty,color);

circle(dotx+1,doty+1,1);

}

srand(seed);

}

/****************Draw the bottom gun********************/

void DrawGun(void)

{

int x0=300;

int y0=430;

int height=45;

int rx=20;

int ry=5;

int rightx,righty,leftx,lefty;

int centery1=30;

rightx=righty=leftx=lefty=12;

setcolor(LIGHTGREEN);

ellipse(x0,y0,180,360,rx,ry);

ellipse(x0,y0-height,0,360,rx,ry);

line(x0+rx,y0,x0+rx,y0-height);

line(x0-rx,y0,x0-rx,y0-height);

moveto(x0+rx,y0);

lineto(x0+rx+rightx,y0+righty);

moveto(x0+rx+rightx,y0+righty);

lineto(x0+rx+rightx+10,y0+righty+10);

circle(x0+rx+rightx+10,y0+righty+10,4);

moveto(x0,y0+ry);

lineto(x0,y0+centery1);

moveto(x0,y0+centery1);

lineto(x0,y0+centery1+10);

circle(x0,y0+centery1+10,4);

moveto(x0-rx,y0);

lineto(x0-rx-leftx,y0+lefty);

moveto(x0-rx-leftx,y0+lefty);

lineto(x0-rx-leftx-10,y0+lefty+10);

circle(x0-rx-leftx-10,y0+lefty+10,4);

line(x0-rx-leftx,y0+lefty,x0,y0+centery1);

line(x0,y0+centery1,x0+rx+rightx,y0+righty);

}

/*****************Draw the plan fly to the sky***********************/

void DrawPlan(void)

{

int size;

setcolor(LIGHTRED);

setfillstyle(1,BLUE);

ellipse(x0,y0-height,0,180,width1,3*width1);

moveto(x0+width1,y0); /*moveto center right side*/

lineto(x0+width1,y0-height);

moveto(x0+width1,y0);

lineto(x0+width2,y0+y2);

moveto(x0-width1,y0); /*moveto center left side*/

lineto(x0-width1,y0-height);

moveto(x0-width1,y0);

lineto(x0-width2,y0+y2);

moveto(x0+width2,y0+y3);/*moveto right bottom side*/

lineto(x0+width2,y0+y1);

moveto(x0+width2,y0+y3);

lineto(x0+width1,y0+y2);

moveto(x0-width2,y0+y3);/*moveto left bottom side*/

lineto(x0-width2,y0+y1);

moveto(x0-width2,y0+y3);

lineto(x0-width1,y0+y2);

moveto(x0,y0+y4); /*moveto the bottomest*/

lineto(x0+width1,y0+y2);

moveto(x0,y0+y4);

lineto(x0-width1,y0+y2);

setfillstyle(2,LIGHTRED); /*fill the plan with a style */

floodfill(x0,y0,LIGHTRED);

size=imagesize(x0-width2-1,y0-height-3*width1,

x0+width2+1,y0+y4);

buf=malloc(size);

if(!buf){

printf("No enough memory!");

exit(0);

}

getimage(x0-width2,y0-height-3*width1,x0+width2,y0+y4,buf);

}

提醒:《C语言精细绘图及动画》最后刷新时间 2024-03-14 01:01:12,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言精细绘图及动画》该内容的真实性请自行鉴别。