VC-easyx绘图游戏简易教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1:创建新项目自己动手建立项目试试,并输入以下代码:#includestdio.hvoidmain(){printf(HelloWorld!);}然后,输入以下代码试试(无需理解代码含义):#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);line(200,240,440,240);line(320,120,320,360);getch();closegraph();}执行后应该可以看到屏幕正中央有一个十字2:简单绘图,学习单步执行#includegraphics.h//绘图库头文件,绘图语句需要#includeconio.h//控制台输入输出头文件,getch()语句需要voidmain(){initgraph(640,480);//初始化640x480的绘图屏幕line(200,240,440,240);//画线(200,240)-(440,240)line(320,120,320,360);//画线(320,120)-(320,360)getch();//按任意键closegraph();//关闭绘图屏幕}解释一下:1.创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。2.getch实现按任意键功能,按任意键后,程序继续执行。否则,程序会立刻执行closegraph以至于看不到绘制的内容。[作业]用线条画出更多的图形,要求不少于10条直线。[学习单步执行]完成作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1.将VC取消最大化,并缩小窗口,能看到代码就行。2.按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。3.当箭头指向initgraph语句时,按F10,能看到窗口发生了变化。4.将新的绘图窗口和VC并排放,相互不要有覆盖。这步很重要,否则绘图内容将会被VC窗口覆盖。5.F10执行getch后,记得激活绘图窗口,并按任意键,否则程序不会继续执行。6.closegraph后,直接按F5执行全部剩余程序,结束。单步执行很重要,可以让你知道程序执行到哪里是什么效果,哪条语句执行出了问题等等。3:熟悉更多的绘图语句[常用的绘图语句]line(x1,y1,x2,y2);//画直线(x1,y1)-(x2,y2),都是整形circle(x,y,r);//画圆,圆心为(x,y),半径为rputpixel(x,y,c);//画点(x,y),颜色c还有很多,如画椭圆、圆弧、矩形、多边形,等等,请参考绘图帮助文件(目录页的绘图库的下载里面有)[设置颜色]setcolor(c);//设置绘图颜色,如setcolor(RED)设置为红色等常用的颜色常量可以用:BLACK黑DARKGRAY深灰BLUE蓝LIGHTBLUE亮蓝GREEN绿LIGHTGREEN亮绿CYAN青LIGHTCYAN亮青RED红LIGHTRED亮红MAGENTA紫LIGHTMAGENTA亮紫BROWN棕YELLOW黄LIGHTGRAY浅灰WHITE白[配出更多的颜色]颜色除了前面写的16种以外,还可以自由配色。格式:RGB(r,g,b)r/g/b分别表示红色、绿色、蓝色,范围都是0~255。例如,RGB(255,0,0)表示纯红色。红色和绿色配成黄色,因此RGB(255,255,0)表示黄色。嫌调色麻烦可以用画笔里面的调色试试,调好了以后直接将数值抄过来就行。例如,画两条红色浓度为200的直线,可以写:setcolor(RGB(200,0,0));line(100,100,200,100);line(100,120,200,120);[用数字表示颜色]除了用RGB(r,g,b)方式外,还可以用16进制表示颜色,格式:0xrrggbb例如,setcolor(0xff0000)和setcolor(RGB(255,0,0))是等效的。[延时语句]这个很简单Sleep(n)就可以表示n毫秒的延时。例如延时3秒,可以用Sleep(3000);[作业]1.简单看一下绘图库的帮助文件,了解更多的绘图语句。2.绘制更丰富的图形内容,不低于20行。3.将延时语句适当的插入上个作业的代码中,看看执行效果。注:绘图语句不需要记住,用的时候翻翻手册就行。-4:结合流程控制语句来绘图[范例]例如,画10条直线的代码:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);for(inty=100;y200;y+=10)line(100,y,300,y);getch();closegraph();}换一下循环的范围和间隔,看看效果。还可以用来画渐变色,例如:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);for(inty=0;y256;y++){setcolor(RGB(0,0,y));line(100,y,300,y);}getch();closegraph();}[熟悉if语句]这步需要自学,看看自己手边的书,是怎样讲if语句的,简单看看就行。配合if语句,实现红色、蓝色交替画线:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);for(inty=100;y200;y+=10){if(y/10%2==1)//判断奇数行偶数行setcolor(RGB(255,0,0));elsesetcolor(RGB(0,0,255));line(100,y,300,y);}getch();closegraph();}[作业]1.画围棋棋盘。2.画中国象棋的棋盘3.画国际象棋的棋盘,看手册找到颜色填充语句,实现过期象棋棋盘的区块填充。4.自学while语句。学到这里,已经可以画出很多东西了。把自己想象中的图案绘制一下吧。5:数学知识在绘图中的运用1.最简单的,来个全屏的渐变色吧,是上一课的扩展。就是需要将0~255的颜色和0~479的y轴对应起来c表示颜色,范围0~255y表示y轴,范围0~479于是:c/255=y/479c=y/479*255=y*255/479(先算乘法再算除法可以提高精度)看代码:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);intc;for(inty=0;y480;y++){c=y*255/479;setcolor(RGB(0,0,c));line(0,y,639,y);}getch();closegraph();}试试效果吧。2.画一个圆形的渐变色首先,我们要用到圆形的基本公式:x*x+y*y=r*r让弧度从0~2*3.14,然后需要根据弧度和半径算出(x,y),用pi表示圆周率用r表示半径用a表示弧度(小数)用c表示颜色于是:x=r*cos(a)y=r*sin(a)c=a*255/(2*pi)看看代码:#includegraphics.h#includeconio.h#includemath.hvoidmain(){initgraph(640,480);intc;doublea;intx,y,r=200;for(a=0;aPI*2;a+=0.0001){x=(int)(r*cos(a)+320+0.5);y=(int)(r*sin(a)+240+0.5);c=(int)(a*255/(2*PI)+0.5);setcolor(RGB(c,0,0));line(320,240,x,y);}getch();closegraph();}6:实现简单动画所谓动画,其实是连续显示一系列图形而已。结合到程序上,我们需要以下几个步骤:1.绘制图像2.延时3.擦掉图像循环以上即可实现动画。举一个例子,我们实现一条直线从上往下移动:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);for(inty=0;y480;y++){//绘制绿色直线setcolor(GREEN);line(0,y,639,y);//延时Sleep(10);//绘制黑色直线(即擦掉之前画的绿线)setcolor(BLACK);line(0,y,639,y);}closegraph();}再看一个例子,实现一个圆从左往右跳动:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);for(intx=100;x540;x+=20){//绘制黄线、绿色填充的圆setcolor(YELLOW);setfillstyle(GREEN);fillellipse(x,100,20,20);//演示Sleep(500);//绘制黑线、黑色填充的圆setcolor(BLACK);setfillstyle(BLACK);fillellipse(x,100,20,20);}closegraph();}也就是说,移动的间距小、延时短,动画就会越细腻。但当画面较复杂时,会带来画面的闪烁(怎样消除闪烁是以后的话题)。7:捕获按键,实现动画的简单控制最常用的一个捕获按键的函数:getch()前几课,都把这个函数当做“按任意键继续”来用,现在我们用变量保存这个按键:charc=getch();然后再做判断即可。不过程序执行到getch()是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:kbhit()这个函数返回当前是否有用户按键,如果有,再用getch()获取即可,这样是不会阻塞的。即:charc;if(kbhit())c=getch();举一个简单的例子,如果有按键,就输出相关按键。否则,输出“.”。每隔100毫秒输出一次。按ESC退出。注:ESC的ASCII码是27。完整代码如下:#includegraphics.h#includestdio.h#includeconio.hvoidmain(){charc=0;while(c!=27){if(kbhit())c=getch();elsec='.';printf(%c,c);Sleep(100);}}结合上一课的简单动画,就可以做出来靠按键移动的图形了吧,看以下代码,实现as控制圆的左右移动:#includegraphics.h#includeconio.hvoidmain(){initgraph(640,480);intx=320;//画初始图形setcolor(YELLOW);setfillstyle(GREEN);fillellipse(x,240,20,20);charc;while(c!=27){//获取按键c=getch();//先擦掉上次显示的旧图形setcolor(BLACK);setfillstyle(BLACK);fillellipse(x,240,20,20);//根据输入,计算新的坐标switch(c){case'a':x-=2;break;case'd':x+=2;break;case27:break;}//绘制新的图形setcolor(YELLOW);setfillstyle(GREEN);fillellipse(x,240,20,20);//延时Sleep(10);}closegraph();}[作业]请继续完成这个程序,实现以下功能:1.上下的控制;2.边界检测;3.结合kbhit实现惯性移动(即按一下方向键,圆就会一直向这个方向移动)注:上下左右等按键的控制,会返回2个字

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功