C语言_graphics.h
关于C语言播放音乐的源代码
关于C语⾔播放⾳乐的源代码我们不得不说C语⾔是⼀种还算得上强⼤的语⾔,今天就来展⽰⼀下如何通过C语⾔去播放⾳乐:⽹上有很多这⽅⾯的资料,我只是稍加整理了⼀下,随便玩⼀下。
先来看第⼀个例程,这是⽐较简单的:#include<stdio.h>#include<dos.h>#include<bios.h>#include<time.h>#include<graphics.h>#define N1 32 /*⼀拍*/#define N2 16#define N4 8#define N8 4#define N16 2#define END 0/*其中:N1,N2,N4,N6,N8,N16分别代表⼀拍,⼆分之⼀拍,四分之⼀拍,⼋分之⼀拍,⼗六分之⼀拍。
*//*声明⼀个图形显⽰*/void printtext(unsigned char *temp[],int i, int color); /* ⽤于在屏幕上显⽰字符串 */enum NOTES{C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,/*低度⾳调分别是:1,2,3,4,5,6,7*/C0=262, D0=286, E0=330, F0=349, G0=440, A0=440, B0=494,/*中度⾳调分别是:1,2,3,4,5,6,7*/C1=523, D1=158, E1=659, F1=698, G1=784, A1=880, B1=998,/*⾼度⾳调分别是:1,2,3,4,5,6,7*/C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976/*⾼⼋度⾳调分别是:1,2,3,4,5,6,7*/}song1[]={G0,N16,G0,N8,A0,N8,G0,N8,C1,N8,B0,N4,G0,N16,G0,N8,A0,N8,G0,N8,D1,N8,C1,N4,G0,N16,G0,N8,G1,N8,E1,N8,C1,N8,B0,N16,B0,N8,A0,N4,F1,N16,F1,N8,E1,N8,C1,N8,D1,N8,C1,N4,END,END/*以上是曲⼦代码,你可以嵌⼊⾃⼰喜欢的歌曲代码*//*注意:数组中的偶数元素代表⾳符奇数元素代表拍长.*/};song2[]={C10,N1,D10,N1,E10,N1,F10,N1,G10,N1,A10,N1,B10,N1,C10,N2,D10,N2,E10,N2,F10,N2,G10,N2,A10,N2,B10,N2,C10,N4,D10,N4,E10,N4,F10,N4,G10,N4,A10,N4,B10,N4,C10,N8,D10,N8,E10,N8,F10,N8,G10,N8,A10,N8,B10,N8,C10,N16,D10,N16,E10,N16,F10,N16,G10,N16,A10,N16,B10,N16,C0,N1,D0,N1,E0,N1,F0,N1,G0,N1,A0,N1,B0,N1,C0,N2,D0,N2,E0,N2,F0,N2,G0,N2,A0,N2,B0,N2,C0,N4,D0,N4,E0,N4,F0,N4,G0,N4,A0,N4,B0,N4,C0,N8,D0,N8,E0,N8,F0,N8,G0,N8,A0,N8,B0,N8,C0,N16,D0,N16,E0,N16,F0,N16,G0,N16,A0,N16,B0,N16,C1,N1,D1,N1,E1,N1,F1,N1,G1,N1,A1,N1,B1,N1,C1,N2,D1,N2,E1,N2,F1,N2,G1,N2,A1,N2,B1,N2,C1,N4,D1,N4,E1,N4,F1,N4,G1,N4,A1,N4,B1,N4,C1,N8,D1,N8,E1,N8,F1,N8,G1,N8,A1,N8,B1,N8,C1,N16,D1,N16,E1,N16,F1,N16,G1,N16,A1,N16,B1,N16,C2,N1,D2,N1,E2,N1,F2,N1,G2,N1,A2,N1,B2,N1,C2,N2,D2,N2,E2,N2,F2,N2,G2,N2,A2,N2,B2,N2,C2,N4,D2,N4,E2,N4,F2,N4,G2,N4,A2,N4,B2,N4,C2,N8,D2,N8,E2,N8,F2,N8,G2,N8,A2,N8,B2,N8,C2,N16,D2,N16,E2,N16,F2,N16,G2,N16,A2,N16,B2,N16,END/*以上是⾳符测试代码,你可以通过系统发出的⾳调选择你需要的⾳符*//*注意:数组中的偶数元素代表⾳符奇数元素代表拍长.*/};song3[]= {C0,N8,C0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N4,D0,N8,D0,N8,C0,N4,C0,N8,C0,N8,G0,N8,G0,N8,A0,N8,A0,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N8,D0,N8,D0,N8,C0,N4,G0,N8,G0,N8,F0,N4,E0,N8,E0,N8,D0,N4,G0,N8,G0,N8,F0,N8,F0,N8,E0,N8,E0,N8,D0,N4,C0,N8,E0,N8,G0,N4,A0,N8,C1,N8,G0,N4,F0,N8,F0,N8,E0,N8,E0,N4,D0,N8,D0,N8,C0,N4,END/*以上是曲⼦代码,你可以嵌⼊⾃⼰喜欢的歌曲代码*//*注意:数组中的偶数元素代表⾳符奇数元素代表拍长.*/};song4[]= {C10,N4,B0,N4,G0,N8,A0,N4,E0,N16,D0,N8,C0,N8,D0,N8,G0,N8,E0,N8,E0,N4,E0,N8,G0,N8,E0,N8,D0,N8,D0,N4,A0,N8,A0,N8,G0,N8,A0,N8,B0,N8,G0,N8,G0,N8,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,E0,N8,D0,N8,C0,N8,D0,N8,G0,N8,E0,N4,C0,N8,D0,N8,E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N8,B10,N8,A10,N4,A0,N8,A0,N8,A0,N8,C1,N8,D1,N8, E1,N8,E1,N8,C1,N8,A0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,A0,N8,A0,N8,C1,N8,D1,N8,E1,N8,E1,N8,C1,N8,A0,N8,A0,N8,B0,N8,A0,N8,B0,N16,A0,N16,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8, D1,N8,A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,D1,N16,D1,N16,D1,N8, A0,N16,B0,N16,A0,N8,G0,N8,E0,N8,A0,N8,A0,N8,A0,N4,A0,N8,A0,N8,A0,N4,C10,N8,B0,N8,G0,N8,A0,N4,E0,N16,D0,N16,C0,N8, D0,N8,G0,N8,E0,N4,E0,N4,E0,N16,G0,N16,E0,N16,D0,N16,D0,N4,A0,N16,A0,N16,G0,N8,A0,N8,B0,N8,G0,N16,G0,N16,E0,N4,C10,N8,B0,N8,G0,N8,A0,N4,E0,N16,D0,N16,C0,N8,D0,N8,G0,N8,E0,N4,C0,N16,D0,N16,E0,N4,G0,N8,E0,N8,D0,N4,C0,N8,B10,N8,C0,N16,B10,N16,A10,N4,END};union {unsigned fre;unsigned char c[2];}tone;/*以下是播放程序代码*/void MusicPlay(int *song){int note=0,dur,control;clock_t goal;while(song[note]!=0){tone.fre=song[note];dur=song[note+1]; /*节拍*/if(kbhit())break;/*int kbhit()函数返回最近所敲的按键*/if(tone.fre){outportb(0x43,0xB6);/*函数void outportb(int port,char byte)将字节byte写⼊指定的输出端⼝port*/tone.fre=(unsigned)(1193180L/tone.fre);outportb(0x42,tone.c[0]);outportb(0x42,tone.c[1]);control=inportb(0x61);/*函数int inportb(int port)从指定的输⼊端⼝读⼊⼀个字节,并返回这个字节*/outportb(0x61,(control)|0x3);}goal=(clock_t)dur+clock();while(goal>clock());if(tone.fre)outportb(0x61,control);goal=(clock_t)0;note=note+2;}}/*以下是主函数其中包括异常处理*/void main(void){ int n;int graphdriver,graphmode;unsigned char *text[7] ;text[0]=" ";text[1]="start music........";text[2]="play the one music";text[3]="play the two music";text[4]="play the three music";text[5]="play the four music";text[6]="good_bye............";graphdriver=DETECT;graphmode=0;initgraph(&graphdriver,&graphmode,""); /*系统初始化 */cleardevice(); /* 清除屏幕 */settextjustify(LEFT_TEXT,CENTER_TEXT); /*设置字符排列⽅式*/printtext(text ,1, 1);getch();printtext(text ,2, 62);MusicPlay(song1);getch();printtext(text ,3,4);MusicPlay(song2);getch();printtext(text ,4, 58);MusicPlay(song3);getch();printtext(text ,5, 61);MusicPlay(song4);getch();printtext(text ,6, 63);getch();closegraph();}void printtext(unsigned char *temp[] , int i , int color){setcolor(color);settextstyle(TRIPLEX_FONT , HORIZ_DIR, 3);outtextxy(100, 40+i*50 , temp[i]); /* 显⽰字符串 temp[i]是具体的指针*/ }。
C语言图形界面常用函数集锦
C语⾔图形界⾯常⽤函数集锦(以下函数均应在图形⽅式初始之后使⽤(initgraph(a,b)),在win-tc中使⽤BGI图形程序模板时,其中已经定义有⼀个initgr函数,在main 函数中应在执⾏initgr函数之后再使⽤这些函数。
使⽤这些函数时,均应在程序中包含头⽂件graphics.h,即程序开始时应有#include "graphics.h")1、setcolor(⾊彩值):设置绘图⾊彩,使⽤该函数后,图形函数所绘制的直线或曲线为该函数中指定的⾊彩。
例如:setcolor(YELLOW);circle(320,240,100);在屏幕中央以黄⾊绘制半径为100的圆。
2、setbkcolor(⾊彩值):设置图形屏幕的背景⾊彩,使⽤该函数后图形屏幕清屏,背景⾊彩为该函数中所指定的⾊彩。
如果没有使⽤该函数设置背景⾊,则图形屏幕的背景⾊彩为⿊⾊。
3、cleardevice():清除图形屏幕上已经绘制的内容,该函数没有参数。
4、line(x1,y1,x2,y2): 绘制直线段,其中(x1,y1)为⼀个端点的坐标,(x2,y2)为另⼀个端点的坐标。
直线的⾊彩为在使⽤该函数之前通过setcolor函数所设置的⾊彩。
例如:setcolor(WHITE);line(0,240,639,240);绘制⼀条横贯屏幕中间的⽩⾊⽔平直线。
5、circle(x,y,r):绘制⼀个以(x,y)为圆⼼坐标,半径为r的圆。
例如:setcolor(WHITE);circle(320,240,100);绘制⼀个以(320,240)为圆⼼位置,半径为100的圆。
6、rectangle(x1,y1,x2,y2):绘制⼀个以(x1,y1)和(x2,y2)为对⾓端点坐标的矩形7、putpixel(x,y,color):在(x,y)坐标位置处绘制⼀个点,点的⾊彩由color指定。
例如:putpixel(320,240,RED);在屏幕中央绘制⼀个红⾊的点。
c语言编写程序,求函数一元三次方程在平面直角坐标系内与x轴的交点
c语言编写程序,求函数一元三次方程在平面直角坐标系内与x轴的交点1. 引言1.1 概述在现代科技和工程领域中,数学是一个不可或缺的基础。
一元三次方程是其中一种常见的数学问题,解决这类方程可以帮助我们理解曲线与直角坐标系之间的关系。
本文旨在介绍使用C语言编写程序来求解一元三次方程与x轴交点的方法。
1.2 文章结构本文分为5个主要部分。
首先,在引言部分我们将简要概述文章内容,并介绍每个部分的目的和结构。
其次,在“2. C语言编写程序”部分,将选择适合该问题的程序设计语言,并详细介绍一元三次方程及如何解决它。
接着,在“3. 编写求解一元三次方程交点的C函数”部分,将讨论如何编写具体实现该功能的C 函数,并提供步骤详解。
然后,在“4. 在平面直角坐标系内绘制一元三次方程与x轴的交点图形”部分,将探究绘图工具及图形绘制算法,并附上示例和结果分析。
最后,在“5. 结论与总结”部分,对实验结果进行总结并讨论优化和改进思路。
1.3 目的本文的目的是帮助读者理解并学习如何使用C语言编写函数来求解一元三次方程与x轴交点,并通过绘制图形使其更加直观。
通过阅读本文,读者将能够掌握求解一元三次方程所需的基本步骤和程序设计技巧,并了解绘制相关图形的方法。
此外,我们还将讨论程序优化和改进的思路,以提高程序性能和可扩展性。
总之,通过本文的指导和实践,读者将能够掌握C语言编写解决一元三次方程的函数,并且能够在平面直角坐标系上绘制出这些方程与x轴交点的图形。
2. C语言编写程序2.1 程序设计语言选择在编写解一元三次方程交点的程序时,我们选择使用C语言作为开发工具。
C 语言是一种通用的高级计算机编程语言,它被广泛应用于科学计算、系统开发和嵌入式系统等领域。
C语言拥有简洁的语法和丰富的库函数,能够方便地进行数学运算和图形绘制,非常适合我们求解一元三次方程交点的需求。
2.2 一元三次方程介绍在数学中,一元三次方程是指只含有一个未知数(通常为x)的三次方程。
猫抓老鼠的编程代码
猫抓老鼠的编程代码以下是一段使用C语言编写的猫捉老鼠游戏的代码:```c#include"stdio.h"#include"graphics.h"#include"conio.h"#include"mprinthz.h"#define N 10#define P 4unsigned *str1="猫捉老鼠!";unsigned *str2="嘿嘿!看你往哪跑!";int maze(N)(N)={1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,1,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1};int di[P]={0,1,0,-1};int dj[P]={1,0,-1,0};static int key;static int step;/*坐标结构*/typedef struct{int xpos;}POS;```这段代码实现了一个简单的猫捉老鼠游戏。
在这个游戏中,猫和老鼠在一个迷宫中移动,猫试图抓住老鼠。
你可以根据需要修改迷宫的形状和大小,以及猫和老鼠的移动规则。
请注意,这只是一个简单的示例代码,实际的猫捉老鼠游戏可能需要更复杂的算法和图形界面。
如果你对代码的具体实现有疑问,请提供更多细节,我将尽力为你解答。
C语言画图函数
C语言画图函数与图形有关的函数GRAPHICS.H 库文件bar【功能】画出一条栏目。
【原型】void far bar(int left,int top,int right,int bottom)【位置】graphics.hgraphics.h【参见】bar3d,setfillstyle,rectanglebar3d【功能】画出一条3-D栏目。
【原型】void far bar3d(int left,int top,int right,int bottom,int depth,int topflag) 【位置】graphics.h【参见】barcircle【功能】以(x,y)为圆心按照指定的半径画出一个圆。
【原型】void far circle(int x,int y,int radius)【位置】graphics.h【参见】arccleardevice【功能】清除图形画面。
【原型】void far cleardevice(void)【位置】graphics.h【参见】clearviewportclearviewport【功能】清除当前可视区域。
【原型】clearviewport(void)【位置】graphics.h【参见】setviewport,cleardeviceclosegraph【功能】关闭图形系统。
【原型】void far closegraph(void)【位置】graphics.h【参见】initgraphdetecgraph【功能】通过检查硬件确定使用的图形驱动程序和模式。
【原型】void far detectgraph(int far *graphdriver,int far *graphmode)【位置】graphics.h【参见】initgraph,graphresultdrawpoly【功能】画出一个多边形的轮廓。
【原型】void far drawpoly(int numpoints,int far polypoints[])【位置】graphics.h【说明】polypoints中包括一共numpoints对数值。
C语言画图函数
EGAHI 1 16色 640*350
───────────────────────────────────
EGA64 4 EGA64LO 0 16色 640*200
MCGAC1 1 C1 320*200
MCGAC2 2 C2 320*200
MCGAC3 3 C3 320*200
MCGAMED 4 2色 640*200
MCGAHI 5 2色 640*480
───────────────────────────────────
EGA 3 EGALO 0 16色 640*200
void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作, 实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。
关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。
II、有关坐标位置的函数
int far getmaxx(void);返回x轴的最大值。
int far getmaxy(void); 返回y轴的最大值。
c语言动画程序源码
C语言动画程序#include <math.h>#include <stdio.h>#include <graphics.h>#include <dos.h>#define pi 3.1415926535double ca3mm1(double m1,double m2);double ca3fm1(double cosine,double sine);double ca5fm2(double a6m,double a5m,double a4m,double a4f,int shang);double ca6fm2(double a4m ,double a4f,double a5m , double a5f);char inbo*(int *,int y,int *1,int y1);char buf();main(){double m=3.0;double *o=100.0,yo=200.0,a1=30.0,t1=pi;double *c=*o+m*a1,yc=yo;double a2=8.0,a3,a4=25.0,a5=30.0,a6=20.0,a7=35.0;double t2,t3,t4,t5,t6,t7;double *o1=*o+m*150,yo1=yo;double *c1=*o1-m*a1,yc1=yo1;double i,j,k;double l1;double n=116.1,nt;initscreen();setfillstyle(SOLID_FILL,DARKGRAY);bar(0,0,640,480);mybutton(10,10,"BEGIN",1,0);mybutton(500,10,"E*IT",1,0);line(0,69,640,69);mouseinit();changemousecross();setmouse*y(320,20);mouseshow();setmousearea(0,0,640,60);do{if(inbo*(10,10,70,26)&&button()==1){mousehide(); mybutton(10,10,"BEGIN",0,0); mouseshow(); mousehold(); mousehide(); mybutton(10,10,"BEGIN",1,7); mouseshow(); break; }if(inbo*(500,10,555,26)&&button()==1){mousehide(); mybutton(500,10,"E*IT",0,0); mouseshow(); mousehold(); mousehide(); mybutton(500,10,"E*IT",1,7); mouseshow(); e*it(0); }if(buf()==56)for(i=0;i<10000;i++){switch (buf()){case 18:{mousehide();mybutton(500,10,"E*IT",0,0);mouseshow();delay(4000);mousehide();mybutton(500,10,"E*IT",1,7);mouseshow();e*it(0);}case 48: {mousehide();mybutton(10,10,"BEGIN",0,0);mouseshow();delay(4000);mousehide();mybutton(10,10,"BEGIN",1,7);mouseshow();goto run;}default:break;}}}while(1);run:drawjijia(*o,yo,1);drawjijia(*c,yc,1);drawjijia(*o1,yo1,1);drawjijia(*c1,yc1,1);setwritemode(1);do{for(i=0;i<360.0;i+=1.0){t2=i;a3=ca3mm1(a1*cos(t1)+a2*cos(t2*pi/180.0),a1*sin(t1)+a2*sin(t2*pi/180.0)); t3=ca3fm1(a1*cos(t1)+a2*cos(t2*pi/180.0),a1*sin(t1)+a2*sin(t2*pi/180.0)); a4=a3;t4=t3;t5=ca5fm2(a6,a5,a4,t4,0);t6=ca6fm2(a4,t4,a5,t5);t7=t6-90.0;l1=*c1-*c-2*m*a7*cos(t7*pi/180);nt=(asin(l1/2/(n/2))*180/pi)-90.0;drawline(*o,yo,a2,t2,m,LIGHTGRAY);drawline(*o+m*a2*cos(t2*pi/180),yo-m*a2*sin(t2*pi/180),a5,t5,m,LIGHTGRAY); drawline(*c,yc,a6,t6,m,LIGHTGRAY);drawline(*c,yc,a7,t7,m,LIGHTGRAY);drawline1(*o1,yo1,a2,t2,m,LIGHTGRAY);drawline1(*o1+m*a2*cos((180-t2)*pi/180),yo1-m*a2*sin((180-t2)*pi/180),a5,t5,m,L IGHTGRAY);drawline1(*c1,yc1,a6,t6,m,LIGHTGRAY);drawline1(*c1,yc1,a7,t7,m,LIGHTGRAY);for(j=-1;j<20;j++){ drawline(*c+m*a7*cos(t7*pi/180),(yc-m*a7*sin(t7*pi/180)-j*n*sin(nt*pi/180)),n ,nt,1.0,GREEN);drawline1(*c1-m*a7*cos(t7*pi/180),(yc1-m*a7*sin(t7*pi/180)-j*n*sin(nt*pi/180)), n,nt,1.0,DARKGRAY);}delay(300);drawline(*o,yo,a2,t2,m,LIGHTGRAY);drawline(*o+m*a2*cos(t2*pi/180.0),yo-m*a2*sin(t2*pi/180.0),a5,t5,m,LIGHTGRAY); drawline(*c,yc,a6,t6,m,LIGHTGRAY);drawline(*c,yc,a7,t7,m,LIGHTGRAY);drawline1(*o1,yo1,a2,t2,m,LIGHTGRAY);drawline1(*o1+m*a2*cos((180-t2)*pi/180),yo1-m*a2*sin((180-t2)*pi/180),a5,t5,m,L IGHTGRAY);drawline1(*c1,yc1,a6,t6,m,LIGHTGRAY);drawline1(*c1,yc1,a7,t7,m,LIGHTGRAY);for(j=-1;j<20;j++){ drawline(*c+m*a7*cos(t7*pi/180),(yc-m*a7*sin(t7*pi/180)-j*n*sin(nt*pi/180)),n ,nt,1.0,GREEN);drawline1(*c1-m*a7*cos(t7*pi/180),(yc1-m*a7*sin(t7*pi/180)-j*n*sin(nt*pi/180)), n,nt,1.0,DARKGRAY);}setwritemode(0);if(inbo*(500,10,555,26)&&button()==1){mousehide(); mybutton(500,10,"E*IT",0,0); mouseshow(); mousehold(); mousehide(); mybutton(500,10,"E*IT",1,7); mouseshow(); e*it(0); }if(buf()==56)for(k=0;k<10000;k++){switch (buf()){case 18:{mousehide();mybutton(500,10,"E*IT",0,0);mouseshow();delay(4000);mousehide();mybutton(500,10,"E*IT",1,7);mouseshow();e*it(0); }default:break;}}setwritemode(1);}}while(1);}drawline(double *o,double yo,double mo,double fujiao,double m,int color) {double *,y;*=(*o+m*mo*cos(fujiao*pi/180));y=(yo-m*mo*sin(fujiao*pi/180));setcolor(color);line (*o,yo,*,y);}drawline1(double *o,double yo,double mo,double fujiao,double m,int color) {double *,y;*=(*o-m*mo*cos(fujiao*pi/180));y=(yo-m*mo*sin(fujiao*pi/180));setcolor(color);line (*o,yo,*,y);}drawjijia(double *,double y,int shang){setcolor(RED);if (shang==1){circle(*,y,3);line(*-3.0,y+3.0,*-15.0,y+20.0);moveto(*-15,(int)(y+20));lineto((int)(*+15),(int)(y+20));moveto((int)(*+15),(int)(y+20));lineto(*+3,y+3);}setcolor(RED);if (shang==0){circle((int)*,(int)y,3);line (*-3,y-3,*-15,y-20);moveto(*-15,y-20);lineto(*+15,y-20);moveto(*+15,y-20);lineto(*+3,y-3);}}double ca3mm1(double m1,double m2){double temp;temp = sqrt(m1*m1 + m2*m2);return(temp);}double ca3fm1(double cosine,double sine){float temp;if (sine > 0 && cosine > 0)temp = atan(sine / cosine) * 180 / pi;if (sine > 0 && cosine < 0)temp = (atan(sine / cosine) + pi) * 180 / pi;if (sine < 0 && cosine < 0)temp = (atan(sine / cosine) + pi) * 180 / pi;if (sine < 0 && cosine > 0)temp = (atan(sine / cosine) + 2 * pi) * 180 / pi;return(temp);}double ca5fm2(double a6m,double a5m,double a4m,double a4f,int shang) {double temp,sine1,cosine1;cosine1 = (a6m *a6m - a4m *a4m - a5m*a5m) / (2 * a4m * a5m);sine1 = sqrt(1 - cosine1 *cosine1);if (shang==0)sine1 = sine1*(-1);if (sine1 > 0 && cosine1 > 0)temp = a4f + (atan(sine1 / cosine1) * 180 / pi);if (sine1 > 0 && cosine1 < 0)temp = a4f + ((atan(sine1 / cosine1) + pi) * 180 / pi);if (sine1 < 0 && cosine1 < 0)temp = a4f + ((atan(sine1 / cosine1) + pi) * 180 / pi);if (sine1 < 0 && cosine1 > 0)temp = a4f + ((atan(sine1 / cosine1) + 2 * pi) * 180 / pi);return(temp);}double ca6fm2(double a4m ,double a4f,double a5m , double a5f){double temp,sine1,cosine1;sine1 = a4m * sin(a4f * pi / 180) + a5m * sin(a5f * pi / 180); cosine1 = a4m * cos(a4f * pi / 180) + a5m * cos(a5f * pi / 180);if (sine1 > 0 && cosine1 > 0)temp = (atan(sine1 / cosine1) * 180 / pi);if (sine1 > 0 && cosine1 < 0)temp = ((atan(sine1 / cosine1) + pi) * 180 / pi);if (sine1 < 0 && cosine1 < 0)temp = ((atan(sine1 / cosine1) + pi) * 180 / pi);if (sine1 < 0 && cosine1 > 0)temp = ((atan(sine1 / cosine1) + 2 * pi) * 180 / pi); return(temp);}initscreen(){int gd=DETECT,gm;registerbgidriver(EGAVGA_driver);initgraph(&gd,&gm,"");}。
C语言小游戏源代码《打砖块》
C语言小游戏源代码《打砖块》#include “graphics.h“#include "stdio.h"#include "conio.h" /*所需的头文件*/int on; /*声明具有开关作用的全局变量*/static int score; /*声明静态的记分器变量*//* 定义开始界面函数*/int open(){setviewport(100,100,500,380,1); /*设置图形窗口区域*/ setcolor(4); /*设置作图色*/rectangle(0,0,399,279); /*以矩形填充所设的图形窗口区域*/ setfillstyle(SOLID_FILL,7); /*设置填充方式*/floodfill(50,50,4); /*设置填充范围*/setcolor(8);settextstyle(0,0,9); /*文本字体设置*/outtextxy(90,80,"BALL"); /*输出文本内容*/settextstyle(0,0,1);outtextxy(110,180,"version 1.0");outtextxy(110,190,"made by ddt");setcolor(128);settextstyle(0,0,1);outtextxy(120,240,"Press any key to continue......");}/*定义退出界面函数*/int quitwindow(){char s; /*声明用于存放字符串的数组*/setviewport(100,150,540,420,1);setcolor(YELLOW);rectangle(0,0,439,279);setfillstyle(SOLID_FILL,7);floodfill(50,50,14);setcolor(12);settextstyle(0,0,8);outtextxy(120,80,"End");settextstyle(0,0,2);outtextxy(120,200,"quit? Y/N");sprintf(s,"Your score is:%d",score);/*格式化输出记分器的值*/ outtextxy(120,180,s);on=1; /*初始化开关变量*/}/*主函数*/main(){int gdriver,gmode;gdriver=DETECT; /*设置图形适配器*/gmode=VGA; /*设置图形模式*/registerbgidriver(EGAVGA_driver); /*建立独立图形运行程序*/initgraph(gdriver,gmode,""); /*图形系统初试化*/setbkcolor(14);open(); /*调用开始界面函数*/getch(); /*暂停*/while(1) /*此大循环体控制游戏的反复重新进行*/{intdriver,mode,l=320,t=400,r,a,b,dl=5,n,x=200,y=400,r1=10,dx=-2,dy=-2;/*初始化小球相关参数*/int left,top,right,bottom,i,j,k,off=1,m,num;/*方砖阵列相关参数*/static int pp;static int phrase; /*一系列起开关作用的变量*/int oop=15;pp=1;score=0;driver=DETECT;mode=VGA;registerbgidriver(EGAVGA_driver);initgraph(driver,mode,"");setbkcolor(10);cleardevice(); /*图形状态下清屏*/clearviewport(); /*清除现行图形窗口内容*/b=t+6;r=l+60;setcolor(1);rectangle(0,0,639,479);setcolor(4);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,1);floodfill(l+2,t+2,4);for(i=0,k=0;ii++) /*此循环绘制方砖阵列*/{top[i]=k;bottom[i]=top[i]+20;k=k+21;oop--;for(j=0,m=0;jj++){left[j]=m;right[j]=left[j]+80;m=m+81;setcolor(4);rectangle(left[j],top[i],right[j],bottom[i]); setfillstyle(SOLID_FILL,j+oop);floodfill(left[j]+1,top[i]+1,4);num[i][j]=pp++;}}while(1) /*此循环控制整个动画*/{while(!kbhit()){x=x+dx; /*小球运动的圆心变量控制*/ y=y+dy;if(x+r1r||x+r1r){ phrase=0;}if((x-r1=r||x+r1=r)x+r1=l){if(yt)phrase=1;if(y+r1=tphrase==1){dy=-dy;y=t-1-r1;}}if(off==0)continue;for(i=0;ii++) /*此循环用于判断、控制方砖阵列的撞击、擦除*/for(j=0;jj++){if((x+r1=right[j]x+r1=left[j])||(x-r1=right[j]x-r1=left[j])){if(( y-r1top[i]y-r1=bottom[i])||(y+r1=top[i]y+r1=bottom[i] )) {if(num[i][j]==0){continue; }setcolor(10);rectangle(left[j],top[i],right[j],bottom[i]);setfillstyle(SOLID_FILL,10);floodfill(left[j]+1,top[i]+1,10);dy=-dy;num[i][j]=0;score=score+10;printf(“%d\b\b\b",score);}}if((y+r1=top[i]y+r1=bottom[i])||(y-r1=top[i]y-r1=bottom[i])) {if((x+r1=left[j]x+r1right[j])||(x-r1=right[j]x-r1left[j])){if(num[i][j]==0){ continue;}setcolor(10);rectangle(left[j],top[i],right[j],bottom[i]); setfillstyle(SOLID_FILL,10);floodfill(left[j]+1,top[i]+1,10);dx=-dx;num[i][j]=0;score=score+10;printf("%d\b\b\b",score);}}}if(x+r1639) /*控制小球的弹射范围*/ {dx=-dx;x=638-r1;}if(x=r1){dx=-dx;x=r1+1;}if(y+r1=479){off=0;quitwindow();break;}if(y=r1){dy=-dy;y=r1+1;}if(score==560){off=0;quitwindow();break;}setcolor(6);circle(x,y,r1);setfillstyle(SOLID_FILL,14);floodfill(x,y,6);delay(1000);setcolor(10);circle(x,y,r1);setfillstyle(SOLID_FILL,10);floodfill(x,y,10);}a=getch();setcolor(10);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,10);floodfill(l+2,t+2,10);if(a==77l=565)/*键盘控制设定*/{dl=20;l=l+dl;}if(a==75l=15){dl=-20;l=l+dl;}if(a=='y'on==1)break;if(a=='n'on==1)break;if(a==27){quitwindow();off=0;}r=l+60;setcolor(4);rectangle(l,t,r,b);setfillstyle(SOLID_FILL,1);floodfill(l+5,t+5,4);delay(100);}if(a=='y'on==1) /*是否退出游戏*/ {break;}if(a=='n'on==1){ continue;} } closegraph(); }。
一百五十行c语言代码实现爱心效果
一百五十行c语言代码实现爱心效果1.引言1.1 概述概述部分的内容:本文将介绍如何使用150行的C语言代码实现爱心效果。
通过这个程序,我们可以在屏幕上显示一个美丽的爱心图案,给人们带来温馨和浪漫的感觉。
爱心图案是一种常见的表达爱情和友情的图形,它具有独特而美丽的形状。
通过使用C语言编程,我们可以在命令行窗口中生成这个图案,并通过不同的颜色和动态效果进一步增加其吸引力。
本文将首先介绍爱心效果的实现原理,包括对爱心形状的分析和算法设计。
然后,我们将详细介绍程序的整体框架和主要函数的功能,使读者能够更深入地理解代码的实现过程。
通过学习这个程序,读者可以了解到C语言在图形处理方面的应用,同时也可以提升编程能力和创造力。
此外,本文还将讨论实现效果的优缺点,并提出进一步改进的可能性,以便读者在实际应用中进行探索和创新。
本文旨在向读者展示C语言的魅力和创造力,并鼓励读者通过编写自己的代码来实现更多有趣和实用的效果。
让我们一起开始吧!1.2文章结构文章结构是撰写一篇长文时需要考虑的重要因素之一。
一个良好的文章结构可以使读者更好地理解和跟随文章的思路,同时也有助于作者更好地组织自己的写作。
在本文中,文章结构可以按照以下方式展开:1. 引言1.1 概述在本部分,我们将简要介绍本篇文章的主题和目标- 以C语言代码实现爱心效果。
这个主题将涉及编写一百五十行的代码来展示一个爱心图案,通过解释代码的实现过程和原理,读者将能够掌握如何在C语言中实现这一效果。
1.2 文章结构本部分将详细说明本文的文章结构,包括各个章节的内容以及它们之间的逻辑关系。
通过了解整个文章的组织架构,读者可以更好地理解和阅读后续的章节。
1.3 目的在本小节中,我们会明确本篇文章的目的。
通过展示如何用C语言实现爱心效果,我们希望能够激发读者的兴趣,增加他们对C语言编程的理解,并鼓励他们在编程过程中尝试创造新的效果。
2. 正文2.1 爱心效果的实现原理本小节将详细介绍实现爱心效果的原理和方法。
机器人大战c语言代码
#include "graphics.h"#include "bios.h"#include "conio.h"#include "stdlib.h"#include "dos.h"#define UP0x4800#define DOWN0x5000#define LEFT0x4600#define RIGHT0x4d00#define ESC0x0016/*定义两种屏幕显示模式*/#define VGA2560x13#define TEXT0x03int x,y,l,sxzy=0,zx=0,xx=5,yy=167;int x1=5,y1=3,x3=0,y3=0,x4=0,y4=0;int enemylife=10,playerlife=20;int board[100][170];unsigned char far *VideoBuffer=(char far *)0xA0000L;/*设置屏幕显示模式*/void SetScreenMode(int mode){union REGS inregs,outregs; inregs.h.ah=0;inregs.h.al=(unsigned char)mode;int86(0x10,&inregs,&outregs);}/*画垂直线函数*/void DrawVerticalLine(int y0,int y1,int x,unsigned int color){unsigned int address,n,temp;address=320*y0+x;for(n=0;n<=y1-y0;n++){if(y0>y1){temp=y1;y1=y0;y0=temp;}VideoBuffer[address]=color;address+=320;}}/*绘制水平线函数*/void DrawHorizontalLine(int x0,int x1,int y,unsigned int color){unsigned int address,n,temp;address=320*y+x0;for(n=0;n<=x1-x0;n++){if(x0>x1){temp=x1;x1=x0;x0=temp;}VideoBuffer[address]=color;address+=1;}}void p_pixel(int x,int y,unsigned int color){VideoBuffer[y*320+x]=color;}/*绘制正方形函数*/void DrawSquare(int x,int y,int side,intcolor){DrawHorizontalLine(x,x+side,y,color);DrawHorizontalLine(x,x+side,y+side,color);DrawVerticalLine(y,y+side,x,color);DrawVerticalLine(y,y+side,x+side,color);}/*绘制矩形函数*/void DrawRectangle(int x1,int y1,int x2,int y2,intcolor){DrawHorizontalLine(x1,x2,y1,color);DrawHorizontalLine(x1,x2,y2,color);DrawVerticalLine(y1,y2,x1,color);DrawVerticalLine(y1,y2,x2,color);}/*绘制实心矩形函数*/void FillRectangle(int x1,int y1,int x2,int y2,int color){int i;for(i=y1;i<=y2;i++)DrawHorizontalLine(x1,x2,i,color);}/*每次出拳后,删除拳头*/ void ClearBox(){delay(100);DrawSquare(x3,y3,5,0);DrawSquare(x3,y3-6,5,0);x3=0;y3=0;}/*绘制我方机器人*/void DrawPlayer(){int cas=0;if(sxzy==18432)/*如果按上键,就往上移动*/{yy-=5;if(yy < y1+30)yy+=5;if(yy==12)yy=17;}if(sxzy==20480)/*如果按下键,就往下移动*/{yy+=5;if(yy==172)yy=167;}if(sxzy==19200)/*如果按左键,就往左移动*/{xx--;if(xx==-1)xx=0;}if(sxzy==19712)/*如果按右键,就往右移动*/{xx++;if(xx==13)xx=12;}sxzy=0;for(x=xx;x<5+xx;x++)/*给自己搭建骨架*/{if(x==xx)/*左手*/{y=167; board[x][yy]=1;if(zx==11386){board[x][yy-12]=3;board[x][yy-11]=3;if((yy-11 < y1+30) && (xx>=x1 && xx<=x1+4))enemylife--;cas=1;zx=0;}x++;}if(x==xx+4)/*右手*/{y=167;board[x][yy]=1;if(zx==11640){board[x][yy-12]=3;board[x][yy-11]=3;if((yy-11 < y1+30)&&(xx+4<=x1+4 && xx+4>=x1))enemylife--;cas=2;zx=0;}break;}for(y=yy;y<yy+3;y++)/*身体*/{board[x][y]=1;}}for(x=0;x<100;x++)/*开始往骨架上放‘肉’*/{l=1;for(y=0;y<170;y++)if(board[x][y]==1 || board[x][y]==3){if(cas==1){board[x][yy-10]=1;board[x][yy]=0;cas=0;}if(cas==2){board[x+4][yy-10]=1;board[x+4][yy]=0;cas=0;}if(board[x][y]==3){x3=x+105+x*5;y3=y+l*5;}DrawSquare(x+105+x*5,y+l*5,5,3);l++;}}ClearBox();}/*搭建设对方骨架*/void DrawEnemySk(){int ran,cas=0,p=0;delay(200);for(x=99;x>=0;x--){l=1;for(y=169;y>=0;y--)if(board[x][y]==2 || board[x][y]==4){DrawSquare(x+105+x*5,35+y-l*5,5,0); l++;board[x][y]=0;}}ran=random(5);if(ran==0)/*往上走*/{y1-=5;if(y1==-2)y1=3;}if(ran==1){y1+=5;if(y1+30 > yy)/*不允许超过我的机器人的身后*/y1-=5;if(y1==158)/*往下走,如果超过外框,就减去一步,实际上是永远也不会超过*/y1=153;}if(ran==2)/*往左走*/{x1--;if(x1==-1)x1=0;}if(ran==3)/*往右走*/{x1++;if(x1==13)x1=12;}if(ran==4){y1+=5;if(y1+30 > yy)/*不允许超过我的机器人的身后*/y1-=5;if(y1==158)/*往下走,如果超过外框,就减去一步,实际上是永远也不会超过*/y1=153;}for(x=x1;x<x1+5;x++)/*对方拳头*/{if(x==x1){if((y1+45 >= yy) && x>=xx) /*判断敌人是否靠近,如果是就出拳头*/{p=random(2);if(p==1){board[x][y1+15]=4;board[x][y1+16]=4;board[x][y1+17]=4;if((yy-11 < y1+30)&&(xx+4<=x1+4 && xx+4>=x1))playerlife--;cas=1;}p=0;}if(cas==1){board[x][y1+14]=2;cas=0;}elseboard[x][y1]=2;x++;}if(x==x1+4){if((y1+45 >= yy) && x<=xx+4){p=random(2);if(p==1){board[x][y1+15]=4;board[x][y1+16]=4;board[x][y1+17]=4;if((yy-11 < y1+30)&&(xx>=x1 && xx<=x1+4))playerlife--;cas=1;}p=0;}if(cas==1){board[x][y1+14]=2;cas=0;}elseboard[x][y1]=2;break;}for(y=y1;y+3>y1;y--){board[x][y]=2;}}}void ClearEnemyBox()/*删除对方拳头*/{delay(100);DrawSquare(x4,y4+12,5,0);DrawSquare(x4,y4+6,5,0);DrawSquare(x4,y4,5,0);x4=0;y4=0;}void DrawEnemy()/*画出对方*/{int key=0;while(key!=283 && enemylife>0 &&playerlife>0){FillRectangle(250+enemylife,50,300,53,0);FillRectangle(250+playerlife,150,280,153,0);while(bioskey(1)==0){DrawEnemySk();for(x=99;x>=0;x--){l=1;for(y=169;y>=0;y--)if(board[x][y]==2||board[x][y]==4){DrawSquare(x+105+x*5,35+y-l*5,5,3);if(board[x][y]==4){x4=x+105+x*5;y4=35+y-l*5;}l++;}}ClearEnemyBox();}key=bioskey(0);if(key==18432||key==20480||key==19200||key==19712||key==11386||key== 11640){if(key==11386 || key==11640)/*按键的判断*/zx=key;elsesxzy=key;key=0;for(x=0;x<100;x++){l=1;for(y=0;y<170;y++)if(board[x][y]==1 || board[x][y]==3){DrawSquare(x+105+x*5,y+l*5,5,0); l++;board[x][y]=0;}}DrawPlayer();}}}intmain(){int x=0,y,i=1,key,c=0,p,k=0,e=1;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"e:\\tc");cleardevice();setcolor(RED);while(i){settextstyle(1,0,5);setwritemode(XOR_PUT);outtextxy(x,200,"X man");delay(10);outtextxy(x,200,"X man");x+=2;if(x>200)i=0;}outtextxy(x,200,"X man");while(!kbhit()){setcolor(c);outtextxy(x,200,"X man");c++;if(c>16)c=0;}settextstyle(0,0,1);setcolor(GREEN);outtextxy(300,300,"please press 's' to start"); while(e){k=bioskey(0);if(k==8051)e=0;}board[99][169]=4;closegraph();SetScreenMode(VGA256);/*绘制游戏区的边框*/DrawRectangle(104,20,207,190,7); FillRectangle(250,50,250+enemylife,53,4); FillRectangle(250,150,250+playerlife,153,4); DrawPlayer();DrawEnemy();initgraph(&gdriver,&gmode,"e:\\tc");if(enemylife==0){setcolor(WHITE); settextstyle(0,0,4);outtextxy(100,20,"You Win!");setcolor(GREEN);outtextxy(101,20,"You Win!");getch();getch();getch();}else if(playerlife==0){setcolor(WHITE); settextstyle(0,0,4);outtextxy(100,20,"You Failed!");setcolor(GREEN);outtextxy(101,20,"You Failed!");getch();getch();getch();}getch();closegraph();SetScreenMode(TEXT);return 0;}11/ 11。
C语言图形开发函数graphics
函数名: fillellipse功能: 画出并填充一椭圆用法: void far fillellipse(int x, int y, int xradius, int yradius); 程序例:#include <graphics.h>#include <conio.h>int main(void){int gdriver = DETECT, gmode;int xcenter, ycenter, i;initgraph(&gdriver,&gmode,"");xcenter = getmaxx() / 2;ycenter = getmaxy() / 2;for (i=0; i<13; i++){setfillstyle(i,WHITE);fillellipse(xcenter,ycenter,100,50);getch();}closegraph();return 0;}Graphics 类.NET Framework 类库Graphics 类封装一个GDI+ 绘图图面。
无法继承此类。
命名空间:System.Drawing程序集:System.Drawing(在system.drawing.dll 中)语法Visual Basic(声明)Public NotInheritable Class GraphicsInherits MarshalByRefObjectImplements IDeviceContext, IDisposableVisual Basic(用法)Dim instance As GraphicsC#public sealed class Graphics : MarshalByRefObject, IDeviceContext, IDisposableC++public ref class Graphics sealed : public MarshalByRefObject, IDeviceContext, IDisposableJ#public final class Graphics extends MarshalByRefObject implements IDeviceContext, IDisposableJScriptpublic final class Graphics extends MarshalByRefObject implements IDeviceContext, IDisposable备注Graphics类提供将对象绘制到显示设备的方法。
C语言中图形函数及其用法
例如:
arc(300,200,90,180,200);的结果是以点(300,200)为圆心,200为半径,从90度到180度画了四分之一圆弧。当圆弧的起始角angs=0,终止角angs=360时,则可以画出一个整圆。
14.8.4 图形属性控制
图形的属性控制包括控制颜色和线型。颜色有背景色和前景色之分。背景色指屏幕的颜色(即绘图时的底色),前景色指绘图时图形线条所用的颜色。
任何绘图函数都是在当前的颜色(包括背景色和前景色)和线型的状态下进行绘图的。前面所举的例子中没有提当前的颜色和线型,是因为用了系统的缺省值(系统的缺省值是:背景色为黑色,前景色为白色,线型为实线)。
cleardevice();
14.8.3 绘图函数
绘图函数是进行图形操作的基础。用象素点几乎可以画出任何图形,但效率太低。为此TC提供了大量的基本绘图函数,以方便图形设计。
在使用绘图函数时,要随时注意画图的"当前点位置",它是绘图的起始位置。也就是说,图形总是从当前点开始画。画完一个图形后,有时当前点的位置不变,仍在原来的位置;有时则要把当前点移到新的位置。此外,为了从指定位置开始作图,有时需要先改变当前点位置,然后再作图。在调用绘图函数的时候要注意这些问题。
ellipse()函数
函数ellipes()用于画椭圆弧或椭圆。其调用格式为:
ellipse(x,y,angs,ange,xr,yr);
函数的参数均为整型。其中:
x,y为椭圆的中心坐标,angs,ange分别为椭圆弧的起始角和终止角(单位为度),xr,yr分别为椭圆的水平轴半轴和垂直轴半轴。如果args=0,ange=360,则可以画出一个完整的椭圆。另外:
计算机图形学c语言代码(笑脸、时钟、还有一个实在是不好意思说)
计算机图形作业费了很大脑子写出来的!!!1、时钟(鄙人最得意的一个作品)#include<graphics.h>#include<math.h>#include<dos.h>#define pi 3.1415926#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300;#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240;#define d(a,b,c,d) X(a,b,c);Y(a,b,c);Bline(300,240,x,y,d)void plot_circle_points(int xc, int yc, int x, int y, int c){putpixel(xc+x, yc+y, c);putpixel(xc-x, yc+y, c);putpixel(xc+x, yc-y, c);putpixel(xc-x, yc-y, c);putpixel(xc+y, yc+x, c);putpixel(xc-y, yc+x, c);putpixel(xc+y, yc-x, c);putpixel(xc-y, yc-x, c);}void Bcircle (int xc, int yc, int radius, int c){int x, y, p;x=0;y=radius;p=3-2*radius;while (x<y){plot_circle_points(xc, yc, x, y, c);if (p<0) p=p+4*x+6;else{p=p+4*(x-y)+10;y-=1;}x+=1;}if (x == y)plot_circle_points(xc, yc, x, y, c);}void Bline (int x1, int y1, int x2, int y2, int c){int x, y, tmp;int dx, dy, d;float k;if( 0 == (x1 - x2)){x = x1;if(y1 > y2){ tmp = y1;y1 = y2; y2 =tmp;}for(y = y1; y < y2; y ++){putpixel(x, y, abs(getpixel(x,y)-c));}return;}k = (float)(y2 -y1)/(float)(x2 - x1);if(k > 1.0){tmp = x1; x1 = y1; y1 = tmp;tmp = x2; x2 = y2; y2 = tmp;}else if(k > 0){}else if(k < -1.0){x1 = -x1;x2 = -x2;tmp = x1; x1 = y1; y1 = tmp;tmp = x2; x2 = y2; y2 = tmp;}else if( k < 0){y1 = - y1;y2 = - y2;}else{y = y1;if(x1 > x2){ tmp = x1; x1 = x2; x2 = tmp;}for(x = x1; x <= x2; x ++){putpixel(x, y, abs(getpixel(x,y)-c));}return;}if(x1 > x2){tmp = x1; x1 = x2; x2 = tmp;tmp = y1; y1 = y2; y2 = tmp;}dx = x2 - x1;dy = y2 - y1;d = 2 * dy - dx;x = x1; y = y1;for(; x < x2; x ++){if(k > 1){putpixel(y, x, abs(getpixel(y, x) - c));}else if(k > 0){putpixel(x, y, abs(getpixel(x,y)-c));}else if( k < -1){putpixel(-y, x, abs(getpixel(-y,x)-c));}else if(k < 0){putpixel(x, -y, abs(getpixel(x,-y)-c));}else {}if(d >= 0){y++;d+=2*dy-2*dx;}else{d+=2*dy;}}}void init(){int i,l,x1,x2,y1,y2;setbkcolor(1);Bcircle(300,240,200,15);Bcircle(300,240,205,15);Bcircle(300,240,5,15);for(i=0;i<60;i++){if(i%5==0) l=15;else l=5;x1=200*cos(i*6*pi/180)+300;y1=200*sin(i*6*pi/180)+240;x2=(200-l)*cos(i*6*pi/180)+300;y2=(200-l)*sin(i*6*pi/180)+240;Bline(x1,y1,x2,y2,15);}}void main(){int x,y;int gd,gm;unsigned char h,m,s;struct time t[1];detectgraph(&gd, &gm);initgraph(&gd,&gm," ");init();gettime(t);h=t[0].ti_hour;m=t[0].ti_min;s=t[0].ti_sec;d(150,h,30,7);d(170,m,6,14);d(190,s,6,4);while(!kbhit()){while(t[0].ti_sec==s)gettime(t);sound(400);delay(70);sound(200);delay(30);nosound();d(190,s,6,4);s=t[0].ti_sec;d(190,s,6,4);if (t[0].ti_min!=m){d(170,m,6,14);m=t[0].ti_min;d(170,m,6,14);}if (t[0].ti_hour!=h){d(150,h,30,7);h=t[0].ti_hour;d(150,h,30,7);sound(1000);delay(240);nosound();delay(140);sound(2000);delay(240);nosound();}}}2、笑脸(初学者作品很漂亮的!)#include "Conio.h"#include "graphics.h"#define closegr closegraphvoid initgr(void){int graphdriver=DETECT, graphmode=0;initgraph(&graphdriver, &graphmode, " "); }int main(){int i,j;initgr();setbkcolor(0);cleardevice();setcolor(2);circle(320,240,200);setcolor(14);line(320,280,320,200);ellipse(230,210,40,140,70,60);ellipse(410,210,40,140,70,60);ellipse(320,220,220,320,120,140);outtextxy(500,450,"xiao xiao!");getch();closegraph();return 0;}3、电扇(只能叫这个了本来想画车轮,没想到。
俄罗斯方块C语言源代码
}
}
/* 在图形模式下的清屏 */
void cls()
{
setfillstyle(SOLID_FILL,0);
setcolor(0);
bar(0,0,640,480);
}
/*在图形模式下的高级清屏*/
void clscr(int a,int b,int c,int d,int color){
{0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0}},
{
{1,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0},
{1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0},
{0,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0},
{1,1,1,0,0,0,1,0,0,0,0,0,(SOLID_FILL,color);
setcolor(color);
bar(a,b,c,d);
}
/*最小方块的绘制*/
void minbox(int asc,int bsc,int color,int bdcolor){
int a=0,b=0;
a=SCCOL+asc;
#define VK_ESC 0x011b
#define VK_ENTER 0x1c0d
/* 定义俄罗斯方块的方向(我定义他为4种)*/
#define F_DONG 0
#define F_NAN 1
#define F_XI 2
#define F_BEI 3
#define NEXTCOL 20 /* 要出的下一个方块的纵坐标*/
用C语言实现画图程序
一、选题背景:画图程序,通过画图中的功能绘制出美丽的图案。
二、设计思想:利用数学三角函数制作山峰和花朵出一条曲线、用画圆函数绘制太阳的形状、再进行颜色填充用绘制直线的函数来绘制比较粗的光线、用矩形函数画出矩形的边框、再画地球、直线画赤道、弧线画南北极和钟表的刻度盘。
三、流程图:四、程序清单:#include"graphics.h" /*调用图形库函数*/#include"math.h" /*调用数学函数*/#include"stdio.h" /*调用标准I/O函数*/#define PI 3.141596 /*宏定义PI字符串*/main() /*主函数*/{float i,x,y; /*定义单精度浮点型变量i,x,y*/int gdriver=DETECT,gmode,a=1; /*定义整型变量gdriver,gmode*/initgraph(&gdriver,&gmode,"d:\\tc"); /*定义变量后,初始化图形系统*/cleardevice();setbkcolor(a); /*背景颜色*/printf("\n");printf("\n"); /*C 语言图形函数*/printf("\n");printf(" the following math functions were used in the main function.\n");printf(" setbkcolor(int color);\n"); /* 背景颜色*/printf(" setcolor(int color);\n"); /* 画笔颜色*/printf(" putpexel(x,y,color);\n"); /* 画像素点*/printf(" line(x1,y1,x2,y2)\n"); /* 直线函数*/printf(" rectangle(xl,yt,xr,yb)\n");; /* 矩形函数*/printf(" arc(x,y,as,ae,r)\n"); /* 圆弧函数*/printf(" circle(x,y,r)\n"); /*圆形函数*/printf(" ellipse(x,y,as,ae,rx,ry)\n"); /* 椭圆函数*/printf("\n"); /* 按任意键开始演示*/setcolor(2);setlinestyle(0,0,3);rectangle(4,4,635,475); /*绘制矩形框*/getch();cleardevice();printf("\n"); /* 模拟手工画图*/printf("\n"); /* 函数曲线图形*/setcolor(3);setlinestyle(3,3,3);rectangle(4,4,635,475); /*绘制图纸边框*/for (i=0;i<=2*PI;i+=PI/99999){putpixel(40*i,170-21*i*sin(1.6*i),2);putpixel(40.3*i,170-22*i*sin(1.6*i),3);putpixel(40.6*i,170-23*i*sin(1.6*i),10);}for (i=0;i<=2*PI;i+=PI/99999) /*绘制花朵*/{putpixel(118-15*cos(4*i)*cos(i),160-15*cos(4*i)*sin(i),14);putpixel(118-25*cos(4*i)*cos(i),160-25*cos(4*i)*sin(i),13);putpixel(118-35*cos(4*i)*cos(i),160-35*cos(4*i)*sin(i),10);}for (i=0;i<=PI;i+=PI/99999){putpixel(320-315*cos(i),360-95*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-96*sin(i),11); /*绘制拱桥*/ putpixel(320-315*cos(i),360-97*sin(i),11); /*绘制拱桥*/ }for (a=70;a<=570;a+=50)for (i=0;i<=PI;i+=PI/9999){putpixel(a-25*cos(i),360-40*sin(i),11); /*绘制桥*/}}for (x=0;x<=640;x+=0.001){putpixel(8*x,380-8*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=600;x+=0.001){putpixel(10*x,405-10*sin(x),9); /*绘制曲线水流*/}for (x=0;x<=560;x+=0.001){putpixel(12*x,430-12*sin(x),9); /*绘制曲线水流*/}for(x=60;x<=80;x+=0.01){ellipse(270,360,180 ,0,160-x,25);}for (x=0;x<=520;x+=0.001){putpixel(8*x,455-8*sin(x),9); /*绘制曲线水流*/}setlinestyle(0,0,1);setfillstyle(1,12);fillellipse(320,60,25,25); /*绘制太阳*/for (x=280;x>=250;x-=0.0001)putpixel(x,60,12); /*绘制阳光线*/}for (x=360;x>=390;x+=0.0001){putpixel(x,60,12); /*绘制阳光线*/}for (y=24;y>=12;y-=0.0001){putpixel(320,y,12); /*绘制阳光线*/}for (y=96;y<=108;y+=0.0001){putpixel(320,y,12); /*绘制阳光线*/}setlinestyle(3,0,1);setcolor(12);for (i=0;i<=2*PI;i+=PI/12) /*绘制阳光线*/{line(320+40*cos(i),60-36*sin(i),320+70*cos(i),60-48*sin(i)); for (x=0;x<=55555;x+=0.1){y=y+x; /*延时控制*/}}setcolor(13);setlinestyle(0,0,1);rectangle(460,100,620,200); /*绘制地图框(矩形)*/ setcolor(11);setlinestyle(0,0,3);ellipse(540,150,0,360,77,48); /*绘制地球(椭圆)*/circle(540,150,46); /*绘制经线(圆形)*/ellipse(540,100,210,330,45,16); /*绘制北极圈(椭圆弧)*/ellipse(540,200,30,150,45,16); /*绘制南极圈(椭圆弧)*/setcolor(14);setlinestyle(3,0,1);line(460,150,620,150); /*绘制赤道(水平线)*/line(540,100,540,200); /*绘制经线(垂直线)*/setcolor(11); setlinestyle(0,0,1);for (i=0;i<=2*PI;i+=PI/300){putpixel(590-35*cos(i),50-35*sin(i),11); /*绘制0.1秒刻度*/}setcolor(14);setlinestyle(0,0,1);circle(590,50,2); /*绘制中心轴*/setcolor(13);setlinestyle(0,0,3);for (i=0;i<=2*PI;i+=PI/6){line(590+25*sin(i),50-25*cos(i),590+30*sin(i),50-30*cos(i));/*绘制小时*/for (x=0;x<=5555;x+=0.001){y=y+x; /*延时控制*/}getch();closegraph(); }五、主要解决问题的方法及技术关键1、主要问题及解决方法✓抛物线的画法用插补法画抛物线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一) 像素函数56. putpiel() 画像素点函数57. getpixel()返回像素色函数(二) 直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模式函数(三)、多边形函数64. rectangle() 画矩形函数65. bar() 画条函数66. bar3d() 画条块函数67. drawpoly() 画多边形函数(四)、圆、弧和曲线函数68. getaspectratio()获取纵横比函数69. circle()画圆函数70. arc() 画圆弧函数71. ellipse()画椭圆弧函数72. fillellipse() 画椭圆区函数73. pieslice() 画扇区函数74. sector() 画椭圆扇区函数75. getarccoords()获取圆弧坐标函数(五)、填充函数76. setfillstyle() 设置填充图样和颜色函数77. setfillpattern() 设置用户图样函数78. floodfill() 填充闭域函数79. fillpoly() 填充多边形函数80. getfillsettings() 获取填充设置函数81. getfillpattern() 获取用户图样设置函数(六)、图像函数82. imagesize() 图像存储大小函数83. getimage() 保存图像函数84. putimage() 输出图像函数四、图形和图像函数对许多图形应用程序,直线和曲线是非常有用的。
但对有些图形只能靠操作单个像素才能画出。
当然如果没有画像素的功能,就无法操作直线和曲线的函数。
而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。
(一) 像素函数56. putpixel() 画像素点函数功能:函数putpixel() 在图形模式下屏幕上画一个像素点。
用法:函数调用方式为void putpixel(int x,int y,int color);说明:参数x,y为像素点的坐标,color是该像素点的颜色,它可以是颜色符号名,也可以是整型色彩值。
此函数相应的头文件是graphics.h返回值:无例:在屏幕上(6,8)处画一个红色像素点:putpixel(6,8,RED);57. getpixel()返回像素色函数功能:函数getpixel()返回像素点颜色值。
用法:该函数调用方式为int getpixel(int x,int y);说明:参数x,y为像素点坐标。
函数的返回值可以不反映实际彩色值,这取决于调色板的设置情况(参见setpalette()函数)。
这个函数相应的头文件为graphics.h返回值:返回一个像素点色彩值。
例:把屏幕上(8,6)点的像素颜色值赋给变量color。
color=getpixel(8,6);(二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。
这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。
有两种线宽及几种线型可供选择,也可以自己定义线图样。
下面分别介绍直线和线型函数。
58. line() 画线函数功能:函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法:该函数调用方式为void line(int startx,int starty,int endx,int endy);说明:参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
此函数相应的头文件为graphics.h返回值:无例:见函数60.linerel()中的实例。
59. lineto() 画线函数功能:函数lineto()使用当前绘图色、线型及线宽,从当前位置画一直线到指定位置。
用法:此函数调用方式为void lineto(int x,int y);说明:参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点(x,y)。
该函数对应的头文件为graphics.h返回值:无例:见函数60.linerel()中的实例。
60.linerel() 相对画线函数功能:函数linerel() 使用当前绘图色、线型及线宽,从当前位置开始,按指定的水平和垂直偏移距离画一直线。
用法:这个函数调用方式为void linerel(int dx,int dy);说明:参数dx,dy分别是水平偏移距离和垂直偏移距离。
函数调用后,当前位置变为增加偏移距离后的位置,例如,原来的位置是(8,6),调用函数linerel(10,18)后,当前位置为(18,24)。
返回值:无例:下面的程序为画线函数调用实例:#include<graphics.h>void main(){int driver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");setcolor(15);line(66,66,88,88);lineto(100,100);linerel(36,64);getch();restorecrtmode();}61. setlinestyle() 设置线型函数功能:setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。
用法:setlinestyle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int width);说明:参数style为线型取值,也可以用相应名称表示,如表1-10中所示。
参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0xFFFF,则画实线;pattern=0x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0xFF00和0xF00F,当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。
参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。
若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。
Turbo C提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。
表1-10 线型-----------------------------------------------------名称取值含义-----------------------------------------------------SOLID_LINE 0 实线DOTTED_LINE 1 点线CNTER_LINE 2 中心线DASHED_LINE 3 虚线USERBIT_LINE 4 用户自定义线型-----------------------------------------------------表1-11 线宽-----------------------------------------------------------名称取值说明-----------------------------------------------------------NORM_WIDTH(常宽) 1 一个像素宽(缺省值)THICK_WIDTH(加宽) 3 三个像素宽-----------------------------------------------------------这个函数的头文件是graphics.h返回值:无例:下面的程序显示了BC中所提供的线型图样:#i nclude<graphics.h>void main(){int driver,mode;driver=DETECT;mode=0;initgraph(&driver,&mode,"");for(i=0;i<4;i++){setlinestyle(i,0,1);line(i*50,200,i*50+60,200)}getch();restorecrtmode();}62. getlinesettings() 获取线型设置函数功能:函数getlinesettings() 用当前设置的线型、线图样和线宽填写linesettingstype 型结构。
用法:函数调用方式为void getlinesettings(struct linesettingstype *info);说明:此函数调用执行后,当前的线型、线图样和线宽值被装入info指向的结构里,从而可从该结构中获得线型设置。
linesettingstype型结构定义如下:struct linesettingstype {int linestyle;unsigned upattern;int thickness;};其中linestyle用于存放线型,线型值为表1-10中的各值之一。
upattern用为装入用户自定义线图样,这是16位字,每一位等于一个像素,如果哪个位被设置,那么该像素打开,否则关闭。
thickness为线宽值存放的变量,可参见表1-11。
getlinesettings()函数对应的头文件为graphics.h返回值:返回的线型设置存放在info指向的结构中。
例:把当前线型的设置写入info结构:struct linesettingstype info;getlinesettings(&info);63.setwritemode() 设置画线模式函数功能:函数setwritemode() 设置画线模式用法:函数调用方式为void setwritemode()(int mode);说明:参数mode只有两个取值0和1,若mode为0,则新画的线将复盖屏幕上原有的图形,此为缺省画线输出模式。
如果mode为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。