VC-easyx绘图游戏简易教程_第1页
VC-easyx绘图游戏简易教程_第2页
VC-easyx绘图游戏简易教程_第3页
VC-easyx绘图游戏简易教程_第4页
VC-easyx绘图游戏简易教程_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1:创建新项目自己动手建立项目试试,并输入以下代码:#include <stdio.h>void main()    printf("Hello World!");然后,输入以下代码试试(无需理解代码含义):#include <graphics.h>#include <conio.h>void main()    initgraph(640, 480);    line(200, 240, 440, 240);    line(320, 120, 320, 3

2、60);    getch();    closegraph();执行后应该可以看到屏幕正中央有一个十字2:简单绘图,学习单步执行#include <graphics.h> / 绘图库头文件,绘图语句需要#include <conio.h> / 控制台输入输出头文件,getch()语句需要void main()   initgraph(640, 480); / 初始化640x480的绘图屏幕   line(200, 240, 440, 240); / 画线(200,240) - (440,2

3、40)   line(320, 120, 320, 360); / 画线(320,120) - (320,360)   getch(); / 按任意键   closegraph(); / 关闭绘图屏幕解释一下:1. 创建的绘图屏幕640x480,表示横向有640个点,纵向有480个点。注意:左上角是原点(0,0),也就是说,y轴和数学的y轴是相反的。2. getch实现按任意键功能,按任意键后,程序继续执行。否则,程序会立刻执行closegraph以至于看不到绘制的内容。作业用线条画出更多的图形,要求不少于10条直线。学习单步执行完成

4、作业后(务必完成),开始试着单步执行刚才的程序,由于绘图和多线程等因素的限制,请务必按照以下步骤尝试(熟练了以后就不用了):1. 将VC取消最大化,并缩小窗口,能看到代码就行。2. 按一下F10(单步执行),会看到屏幕上出现一个黄色的小箭头,指示将要执行的代码。3. 当箭头指向initgraph语句时,按F10,能看到窗口发生了变化。4. 将新的绘图窗口和VC并排放,相互不要有覆盖。这步很重要,否则绘图内容将会被VC窗口覆盖。5. F10执行getch后,记得激活绘图窗口,并按任意键,否则程序不会继续执行。6. closegraph后,直接按F5执行全部剩余程序,结束。单步执行很重要,可以让你

5、知道程序执行到哪里是什么效果,哪条语句执行出了问题等等。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 蓝 LIG

6、HTBLUE 亮蓝 GREEN 绿 LIGHTGREEN 亮绿 CYAN 青 LIGHTCYAN 亮青 RED 红 LIGHTRED 亮红 MAGENTA 紫 LIGHTMAGENTA 亮紫 BROWN 棕 YELLOW 黄 LIGHTGRAY 浅灰 WHITE 白配出更多的颜色颜色除了前面写的16种以外,还可以自由配色。格式:RGB(r, g, b)r / g / b 分别表示红色、绿色、蓝色,范围都是0255。例如,RGB(255,0,0) 表示纯红色。红色和绿色配成黄色,因此 RGB(255,255,0) 表示黄色。嫌调色麻烦可

7、以用画笔里面的调色试试,调好了以后直接将数值抄过来就行。例如,画两条红色浓度为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. 简单看一下绘图库的帮助文件,了解更多的绘图语

8、句。2. 绘制更丰富的图形内容,不低于20行。3. 将延时语句适当的插入上个作业的代码中,看看执行效果。注:绘图语句不需要记住,用的时候翻翻手册就行。-4:结合流程控制语句来绘图范例例如,画10条直线的代码:#include <graphics.h>#include <conio.h>void main()    initgraph(640, 480);    for(int y=100; y<200; y+=10)       

9、60;  line(100, y, 300, y);    getch();    closegraph();换一下循环的范围和间隔,看看效果。还可以用来画渐变色,例如:#include <graphics.h>#include <conio.h>void main()     initgraph(640, 480);    for(int y=0; y<256; y+)     

10、60;        setcolor(RGB(0,0,y);        line(100, y, 300, y);        getch();    closegraph();熟悉if语句这步需要自学,看看自己手边的书,是怎样讲if语句的,简单看看就行。配合if语句,实现红色、蓝色交替画线:#include <graphics.h>#includ

11、e <conio.h>void main()    initgraph(640, 480);    for(int y=100; y<200; y+=10)              if ( y/10 % 2 = 1)     / 判断奇数行偶数行         &#

12、160;    setcolor(RGB(255,0,0);          else              setcolor(RGB(0,0,255);          line(100, y, 300, y);   

13、    getch();     closegraph();作业1. 画围棋棋盘。2. 画中国象棋的棋盘3. 画国际象棋的棋盘,看手册找到颜色填充语句,实现过期象棋棋盘的区块填充。4. 自学while语句。学到这里,已经可以画出很多东西了。把自己想象中的图案绘制一下吧。5:数学知识在绘图中的运用1. 最简单的,来个全屏的渐变色吧,是上一课的扩展。就是需要将0255的颜色和0479的y轴对应起来c 表示颜色,范围0255y 表示y轴,范围0479于是:c / 255 = y / 479c = y / 479 * 255 = y

14、 * 255 / 479 (先算乘法再算除法可以提高精度)看代码:#include <graphics.h>#include <conio.h>void main()    initgraph(640, 480);    int c;    for(int y=0; y<480; y+)            c = y * 255 / 479;        setcolor(RGB(0,0,c);

15、60;       line(0, y, 639, y);        getch();    closegraph();试试效果吧。2. 画一个圆形的渐变色首先,我们要用到圆形的基本公式:x*x + y*y = r*r让弧度从02*3.14,然后需要根据弧度和半径算出(x,y),用pi表示圆周率用r表示半径用a表示弧度(小数)用c表示颜色于是:x=r*cos(a)y=r*sin(a)c=a*255/(2*pi)看看代码:#include <graphics.h>#include <c

16、onio.h>#include <math.h>void main()    initgraph(640, 480);    int c;    double a;    int x, y, r=200;    for(a=0; a<PI*2; a+=0.0001)            x=(int)(r*cos(a) + 320 + 0.5);        y=(in

17、t)(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

18、. 擦掉图像循环以上即可实现动画。举一个例子,我们实现一条直线从上往下移动:#include <graphics.h>#include <conio.h>void main()    initgraph(640, 480);    for(int y=0; y<480; y+)            / 绘制绿色直线        setcolor(GREEN);        line

19、(0, y, 639, y);        / 延时        Sleep(10);        / 绘制黑色直线(即擦掉之前画的绿线)        setcolor(BLACK);        line(0, y, 639, y);        closegraph();再看一个例子,实现一个圆从左往右跳动:#include <grap

20、hics.h>#include <conio.h>void main()    initgraph(640, 480);    for(int x=100; x<540; x+=20)            / 绘制黄线、绿色填充的圆        setcolor(YELLOW);        setfillstyle(GREEN);       

21、fillellipse(x, 100, 20, 20);        / 演示        Sleep(500);        / 绘制黑线、黑色填充的圆        setcolor(BLACK);        setfillstyle(BLACK);        fillellipse(x, 100, 20, 20);   

22、;     closegraph();也就是说,移动的间距小、延时短,动画就会越细腻。但当画面较复杂时,会带来画面的闪烁(怎样消除闪烁是以后的话题)。7:捕获按键,实现动画的简单控制最常用的一个捕获按键的函数:getch()前几课,都把这个函数当做“按任意键继续”来用,现在我们用变量保存这个按键:char c = getch();然后再做判断即可。不过程序执行到 getch() 是会阻塞的,直到用户有按键才能继续执行。可游戏中总不能因为等待按键而停止游戏执行吧?所以,要有一个函数,判断是否有用户按键:kbhit()这个函数返回当前是否有用户按键,如果有,再用 getch()

23、 获取即可,这样是不会阻塞的。即:char c;if (kbhit()    c = getch();举一个简单的例子,如果有按键,就输出相关按键。否则,输出“.”。每隔 100 毫秒输出一次。按 ESC 退出。注:ESC 的 ASCII 码是 27。完整代码如下:#include <graphics.h>#include <stdio.h>#include <conio.h>void main()    char c = 0;    while(c != 27)    

24、0;       if (kbhit()            c = getch();        else            c = '.'        printf("%c", c);        Sleep(100);    结合上一课的简单动画,就可以做

25、出来靠按键移动的图形了吧,看以下代码,实现 a s 控制圆的左右移动:#include <graphics.h>#include <conio.h>void main()    initgraph(640, 480);    int x = 320;    / 画初始图形    setcolor(YELLOW);    setfillstyle(GREEN);    fillellipse(x, 240, 20, 20);    c

26、har c;    while(c != 27)            / 获取按键        c = getch();        / 先擦掉上次显示的旧图形        setcolor(BLACK);        setfillstyle(BLACK);        fillellipse(x, 24

27、0, 20, 20);        / 根据输入,计算新的坐标        switch(c)                    case 'a': x-=2; break;            case 'd': x+=2; break;          

28、0; case 27: break;                / 绘制新的图形        setcolor(YELLOW);        setfillstyle(GREEN);        fillellipse(x, 240, 20, 20);        / 延时        Sleep(10)

29、;        closegraph();作业请继续完成这个程序,实现以下功能:1. 上下的控制;2. 边界检测;3. 结合 kbhit 实现惯性移动(即按一下方向键,圆就会一直向这个方向移动)注:上下左右等按键的控制,会返回 2 个字符。由于该系列教程面向初学者,因此有兴趣的请查看 MSDN。8:用函数简化相同图案的制作实际中有许多类似的图案,如果一一单独绘制,太麻烦。于是,我们需要一个公用的绘制过程,就是函数。例如,我们需要画5个三角形,位于不同的位置。我们可以将绘制单个三角形的过程写成函数,函数内是一个独立的程序段,这个绘制过程很简单。然后,在需

30、要绘制的时候,调用这个函数即可。可以通过参数来解决细微差异(图案的坐标、颜色等),例如:#include <graphics.h>#include <conio.h>/ 在坐标 (x,y) 处,用颜色 c 绘制三角形void sanjiaoxing(int x, int y, int c)     / 设置画线颜色     setcolor(c);     / 画三角形的三条边     line(x, y, x+

31、50, y);     line(x, y, x, y+50);     line(x+50, y, x, y+50);void main()     initgraph(640, 480); / 初始化图形窗口     sanjiaoxing(100, 100, RED);     sanjiaoxing(120, 160, BLUE);     sanj

32、iaoxing(140, 220, GREEN);     sanjiaoxing(160, 120, BLUE);     sanjiaoxing(160, 160, GREEN);     sanjiaoxing(220, 140, GREEN);     getch(); / 按任意键继续     closegraph(); / 关闭图形窗口再结合循环等控制条件,就能绘制更复杂漂亮的图案了。

33、试试运行下面程序,理解一下函数的用处:#include <graphics.h>#include <conio.h>void sanjiaoxing(int x, int y, int color)     / 设置画线颜色     setcolor(color);     / 画三角形的三条边     line(x, y, x+10, y);     line(x, y,

34、 x, y+10);     line(x+10, y, x, y+10);void main()     initgraph(640, 480); / 初始化图形窗口     for(int x=0; x<640; x+=10)         for(int y=0; y<480; y+= 10)       &

35、#160;     sanjiaoxing(x, y, RGB(x*255/640, y*255/480, 0);     getch(); / 按任意键继续     closegraph(); / 关闭图形窗口运行效果:本节作业:1. 绘制 Windows 自带游戏“扫雷”的初始界面。9:绘图中的位运算位运算和绘图有什么关系?先举个例子来个感性认识:使用XOR运算可以实现擦除图形后不破坏背景,这在时钟程序中绘制表针是很有用的。稍后我们会给出这样的例子。一、位运算的运算法则位

36、运算主要分4种:NOT、AND、OR、XOR位运算的运算对象是二进制数(十进制要转换为二进制,计算机会自动转换)。运算法则如下:1. NOT表示“取反”,将二进制位的1变0、0变1。C语言用符号 表示。如:二进制: 1101 = 0010用十进制表示就是:13 = 22. AND表示“并且”,只有两数的对应二进制位都为1,结果的二进制位才为1;否则,结果的二进制位为0。C语言用符号 & 表示。如:二进制:1101 & 0110 = 0100用十进制表示就是:13 & 6 = 43. OR表示“或者”,两数的对应二进制位只要有一个是1,结果的二进制位就是1;否则,结果的二

37、进制位为0。C语言用符号 | 表示。如:二进制:0101 | 0110 = 0111用十进制表示就是:5 | 6 = 74. XOR表示“异或”,两数的对应二进制位不同,结果的二进制位为1;相同,结果的二进制位为0。C语言用符号 表示。如:二进制:0101 1110 = 1011以上只是简单介绍一下,详细的还是请大家看课本上的讲解。二、位运算的应用位运算的应用很多,例如 AND 和 OR 在获取和设置标志位时经常使用。更多的,以后大家会逐渐遇到,暂时先记下有这么回事。这里着重说一下 XOR 运算,它有一个重要的特性:(a b) b = a也就是说,a b 之后可能是某些其它数字,但是只要再 b

38、 一下,就又成了 a。一些简单的加密就用的 XOR 的这个特性。至于绘图,假如 a 是背景图案,b 是将要绘制的图案,只要用 XOR 方式绘图,连续绘两次,那么背景是不变的。三、演示我们来一个简单的绘图 XOR 运算演示:#include <graphics.h>#include <conio.h>void main()     initgraph(640, 480);    / 初始化 640 x 480 的绘图窗口     setlinestyle(PS_S

39、OLID, NULL, 10); / 设置线宽为 10,这样效果明显     rectangle(100,100,200,200); / 画一个矩形,当做背景图案     setwritemode(R2_XORPEN); / 设置 XOR 绘图模式     setcolor(RED);      / 设置画线颜色     line(50,0, 200,300);  &

40、#160; / 画线     getch();       / 等待按任意键     line(50,0, 200,300);    / 画线(XOR 方式重复画线会恢复背景图案)     getch();       / 等待按任意键     closegraph(); 

41、60;    / 关闭绘图窗口运行一下,看到第一次画线后,矩形与直线相交的部分,颜色变成了青色,青色就是白色和红色 XOR 的值。当再次以红色画线时,青色部分消失了,还原为完整的白色矩形框。四、完整的范例来一个相对完整的范例吧,就是钟表程序,三个表针用的都是 XOR 方式绘制,请大家运行体会一下 XOR 的作用:#include <graphics.h>#include <conio.h>(1)· 回复· 1楼· 2010-05-23 09:57· 举报 |·· Best

42、Ans· 吧主9#include <math.h>void Draw(int hour, int minute, int second)     double a_hour, a_min, a_sec;       / 时、分、秒针的弧度值     int x_hour, y_hour, x_min, y_min, x_sec, y_sec; / 时、分、秒针的末端位置     / 计算时、分、

43、秒针的弧度值     a_sec = second * 2 * PI / 60;     a_min = minute * 2 * PI / 60 + a_sec / 60;     a_hour= hour * 2 * PI / 12 + a_min / 12;     / 计算时、分、秒针的末端位置     x_sec = 320 + (int)(120 * sin(a_sec); 

44、    y_sec = 240 - (int)(120 * cos(a_sec);     x_min = 320 + (int)(100 * sin(a_min);     y_min = 240 - (int)(100 * cos(a_min);     x_hour= 320 + (int)(70 * sin(a_hour);     y_hour= 240 - (int)(70 * cos(a_ho

45、ur);     / 画时针     setlinestyle(PS_SOLID, NULL, 10);     setcolor(WHITE);     line(320, 240, x_hour, y_hour);     / 画分针     setlinestyle(PS_SOLID, NULL, 6);    

46、 setcolor(LIGHTGRAY);     line(320, 240, x_min, y_min);     / 画秒针     setlinestyle(PS_SOLID, NULL, 2);     setcolor(RED);     line(320, 240, x_sec, y_sec);void main()     initgraph

47、(640, 480);    / 初始化 640 x 480 的绘图窗口     / 绘制一个简单的表盘     circle(320, 240, 2);     circle(320, 240, 60);     circle(320, 240, 160);     outtextxy(296, 300, "BestAns"); 

48、60;   / 设置 XOR 绘图模式     setwritemode(R2_XORPEN); / 设置 XOR 绘图模式     / 绘制表针     SYSTEMTIME ti;      / 定义变量保存当前时间     while(!kbhit()      / 按任意键退出钟表程序  &

49、#160;            GetLocalTime(&ti);         / 获取当前时间          Draw(ti.wHour, ti.wMinute, ti.wSecond);    / 画表针      

50、    Sleep(1000);          / 延时 1 秒          Draw(ti.wHour, ti.wMinute, ti.wSecond);    / 擦表针(擦表针和画表针的过程是一样的)          closegraph(); 

51、60;    / 关闭绘图窗口五、作业最后给出的绘制时钟的例子,很不完善,有不少问题。请完善该程序。例如样式上,表盘上没有刻度,没有数字,指针靠中心的一端应该长出来一点点,表盘太简单。还有就是尝试发现并改进功能实现上的问题。10:用鼠标控制绘图/游戏程序捕获鼠标消息就像捕获按键消息一样简单。对于按键,通常我们会先检查是否有按键,然后定义一个变量保存按键,再然后根据该按键的值,执行相应的程序。对于鼠标,道理是一样的。先写个代码对比一下:获取按键:          &

52、#160;     获取鼠标:char c;                   MOUSEMSG m;if (kbhit()              if (MouseHit()     c = getch

53、();              m = GetMouseMsg();很简单吧。由于鼠标消息的内容太多,不像按键那么简单,因此需要用一个结构体来保存。通过该结构体,我们可以获取鼠标的如下信息:struct MOUSEMSG     UINT uMsg;       / 当前鼠标消息     bool mkCtrl; &

54、#160;   / Ctrl 键是否按下     bool mkShift;    / Shift 键是否按下     bool mkLButton; / 鼠标左键是否按下     bool mkMButton; / 鼠标中键是否按下     bool mkRButton; / 鼠标右键是否按下     int x;  

55、0;        / 当前鼠标 x 坐标     int y;           / 当前鼠标 y 坐标     int wheel;       / 鼠标滚轮滚动值;其中,“当前鼠标消息”可能是以下值:WM_MOUSEMOVE     

56、; 鼠标移动消息WM_MOUSEWHEEL     鼠标滚轮拨动消息WM_LBUTTONDOWN    左键按下消息WM_LBUTTONUP      左键弹起消息WM_LBUTTONDBLCLK 左键双击消息WM_MBUTTONDOWN    中键按下消息WM_MBUTTONUP      中键弹起消息WM_MBUTTONDBLCLK 中键双击消息WM_RBUTTONDOWN 

57、0;  右键按下消息WM_RBUTTONUP      右键弹起消息WM_RBUTTONDBLCLK 右键双击消息例如,判断获取的消息是否是鼠标左键按下,可以用:if (m.uMsg = WM_LBUTTONDOWN) .下面举一个综合的例子(我偷点懒,直接粘贴的绘图库帮助里面的鼠标范例),该程序会用红色的点标出鼠标移动的轨迹,按左键画一个小方块,按Ctrl+左键画一个大方块,按右键退出:#include <graphics.h>#include <time.h>#include <conio.h>

58、void main()     / 初始化图形窗口     initgraph(640, 480);(1)· 回复· 1楼· 2010-05-23 09:59· 举报 |·· BestAns· 吧主9     MOUSEMSG m;         / 定义鼠标消息     wh

59、ile(true)              / 获取一条鼠标消息         m = GetMouseMsg();         switch(m.uMsg)             

60、0;        case WM_MOUSEMOVE:                 / 鼠标移动的时候画红色的小点                 putpixel(m.x, m.y, RED);

61、0;                break;             case WM_LBUTTONDOWN:                 / 如果点左键的同时按

62、下了 Ctrl 键                 if (m.mkCtrl)                     / 画一个大方块        

63、0;            rectangle(m.x-10, m.y-10, m.x+10, m.y+10);                 else              

64、0;      / 画一个小方块                     rectangle(m.x-5, m.y-5, m.x+5, m.y+5);                 bre

65、ak;             case WM_RBUTTONUP:                 return;     / 按鼠标右键退出程序            

66、;       / 关闭图形窗口     closegraph();本节作业1. 画一个填充的三角形,要用鼠标点选三角形的三个顶点。提示:可以用 fillpoly 函数画多边形。2. 写一个“涂格子(也叫点灯)”的游戏。详细规则可以试玩网上的各种版本。3. 如果有精力,尝试写一个扫雷吧(这个有点难度,能实现多少就实现多少,无法实现的功能先放下)。11:随机函数随机函数简介游戏中,许多情况都是随即发生的。还有一些图案程序,例如屏保,也是随即运动的。这就需要用随机函数。随机函数很简单,只有一个:rand()该

67、函数返回 032767 之间的一个整数。(不需要记住 32767 这个数字,大概知道这个范围就行了)该函数在头文件 <stdlib.h> 中,使用前记得引用。简单测试来写个程序测试一下:#include <stdio.h>#include <stdlib.h>void main()     int r;     for(int i=0; i<10; i+)           

68、;   r = rand();         printf("%dn", r);     执行后,可以看到输出了 10 个随机数字。指定范围的随机函数实际中,我们经常要产生指定范围的随机函数,通常我们用求余数的办法。例如,产生 09 之间的随机数,只需要将任意产生的随机数除以 10 求余数即可。求余数的运算符号是 %,我们可以这样做:     r = rand() % 10;修改前面的测试程序执

69、行后可以看到,产生的数字都是小于 10 的。如果是 16 之间的怎样求呢?     r = rand() % 6 + 1;无论产生什么样范围的随机函数,都是通过各种运算将随机数的范围 0, 32767 修改为自己需要的范围。随机种子做了多次试验,我们会发现一个问题:虽然产生的数字是随机的,但每次产生的数字序列都一样。为了解决这个问题,我们需要用“随机种子”。随机函数的产生原理简单来说,就是:前一个随机函数的值,决定下一个随机函数的值。根据这个原理我们可以知道:只要第一个随机函数的值确定了,那么后面数字序列就是确定的。如果我们想的得到不同的数字序列,我们需

70、要确定第一个随机函数的值,对于设置第一个随机函数的值,叫做设置“随机种子”。易知,随机种子设置一次即可。设置随机种子的函数如下:srand(种子);通常,我们用当前时间来做随机种子:srand( (unsigned)time( NULL ) );因为使用 time 函数,所以记得引用 <time.h>。绘图中的应用来一个简单的程序,在屏幕上任意位置画任意颜色的点(按任意键退出):#include <graphics.h>#include <stdlib.h>#include <conio.h>#include <time.h>void

71、 main()     srand( (unsigned)time( NULL ) );     initgraph(640, 480);     int x, y, c;     while(!kbhit()              x = rand() % 640;    

72、     y = rand() % 480;         c = RGB(rand() % 256, rand() % 256, rand() % 256);         putpixel(x, y, c);          closegraph();作业1. 回顾一下第 6 课“实现简单动画”的作业:绘制一

73、个沿 45 度移动的球,碰到窗口边界后反弹。将这个球改为任意方向运动,碰到边界后任意反弹。12:数组一维数组数组可以实现批量操作。比如,我们产生 10 个随机数,产生后先保存起来,然后输出最大的:     int n10;     int i;     for (i=0; i<10; i+)         ni = rand() % 1000;    

74、; / 按生成的顺序,逆序输出     for (i=9; i>=0; i-)         printf("%dn", ni);     / 找出最大的     int max = -1;     for (i=0; i<10; i+)        &

75、#160;     if (ni > max)             max = ni;          printf("最大的数字是:%dn", max);看明白这个程序后,我们继续。下面,我们绘制一个从屏幕上边任意位置往下落的白色点:#include <graphics.h>#include <stdlib

76、.h>#include <conio.h>#include <time.h>void main()     srand( (unsigned)time(NULL) );     initgraph(640, 480);     int x = rand() % 640;     / 点的 x 坐标     int y = 0;   

77、60;     / 点的 y 坐标     while(!kbhit()              / 擦掉前一个点         putpixel(x, y, BLACK);         / 计算新坐标  

78、60;      y+=3;         if (y >= 480) break;         / 绘制新点         putpixel(x, y, WHITE);         Sleep(10);

79、0;         closegraph();现在利用数组,来产生 100 个随机下落的点。并且每个点落到底部后,就回到顶部重新往下落:#include <graphics.h>#include <stdlib.h>#include <conio.h>#include <time.h>void main()     srand( (unsigned)time(NULL) );     initgr

80、aph(640, 480);     / 定义点的坐标数组     int x100;             / 点的 x 坐标     int y100;             / 点的 y 坐标   &

81、#160; int i;     / 初始化点的初始坐标     for (i=0; i<100; i+)              xi = rand() % 640;(0)· 回复· 1楼· 2010-05-28 11:12· 举报 |·· BestAns· 吧主9   

82、0;     yi = rand() % 480;          while(!kbhit()              for(i=0; i<100; i+)                

83、0;     / 擦掉前一个点             putpixel(xi, yi, BLACK);             / 计算新坐标             yi+=3; 

84、60;           if (yi >= 480) yi = 0;             / 绘制新点             putpixel(xi, yi, WHITE);      

85、;            Sleep(10);          closegraph();二维数组理解了一维数组,再看二维数组甚至多维数组,就简单多了,看下面程序理解一下二维数组:程序要求:屏幕上有 16x8 的方格,按随机顺序在将 1128 的数字写到每个格子上。考虑:我们需要记录这些格子,哪些写过数字,哪些没写数字。我们用一个二维数组来记录:bool cell168;写过数字后,我们将相应数组的值设置为 tru

86、e,看程序:#include <graphics.h>#include <stdlib.h>#include <conio.h>#include <stdio.h>#include <time.h>void main()     int x, y;     char num4;     srand( (unsigned)time(NULL) );     initgraph(6

87、40, 480);     / 画格子     for (x=0; x<=480; x+=30)         for (y=0; y<=240; y+=30)                      line(x, 0, x, 240);             line(0, y, 480, y);              / 定义二维数组     bool cell168;     / 初始化二维数组     fo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论