读书人

80行的经典C程序献给菜鸟

发布时间: 2013-03-21 10:08:17 作者: rapoo

80行的经典C程序献给初学者
如果你认为C但语言很难,请留步看看.
如果你搞不清楚数学与编程的关系,请留步看看
如果你认为基础不重要,请留步看看.

这是一个C语言的图形实例,但决不在程序语言的圈内打转.内容很简单也很老套:
地球围绕太阳转,月亮围绕太阳转,其他几颗星围绕太阳转,但速度各不相同.
方向键可以改变太阳的位置.太阳是在闪烁的.

在TC下调试通过, 在WIN TC下也调试通过.
我只想通过这个例子告诉那些初学的,学习和应用是两回事.
如果你刚开始学习选择了不恰当的操作系统和编译器,你就已经失去了获得编程思想的机会.
学习的时候,千万不要选择别人为你准备了很多功能的工具,真的于成长不利......

下面是全部程序,与你们分享:

#include "stdio.h"
#include "graphics.h"
#include "math.h"

void Draw(int color);

int t_x=320,t_y=240,t_r=40; /* SUN太阳参数,圆心坐标及半径 */
int d_x,d_y,d_r=20; /* D地球参数 */
int y_x,y_y,y_r=5; /* Y月亮参数 */

int j_x,j_y,j_r=8; /* J星参数 */
int m_x,m_y,m_r=10; /* M星参数 */
int s_x,s_y,s_r=4; /* S星参数 */

float th1=0,th2=0,th3=0,th4=0,th5=0;/* 各星相对太阳的角度 */

main()
{
int gd=DETECT,gm;

int key=0; /* 保存键盘值?*/
int i;
float r;
initgraph(&gd,&gm,"");

Draw(12); /* 先画一个 */
while(key!=0x11b) /* 如果按键==ESC键则退出 */
{
Draw(0); /* 用背景色把画好的图洗掉 */
if(bioskey(1)) /* 如果有按键?*/
{
key=bioskey(0); /* 取得按键的值 */
if(key==0x4b00) t_x-=10; /* 向上方向键 */
if(key==0x4d00) t_x+=10; /* 向下方向键 */
if(key==0x4800) t_y-=10; /* 向左方向键 */
if(key==0x5000) t_y+=10; /* 向右方向键 */
}
th1+=0.001256; /* 各星按角度移动 */
if(th1>=6.28) th1-=6.28; /* 如果转了一圈,按0角度从新计算 */
th2+=0.01256;
if(th2>=6.28) th2-=6.28;
th3+=0.002512;
if(th3>=6.28) th3-=6.28;
th4+=0.000314;
if(th4>=6.28) th4-=6.28;
th5+=0.00628;
if(th5>=6.28) th5-=6.28;
r+=0.5; /* 让太阳半径动态增加 */


if(r>=40) r=20; /* 增大40后用从20从新开始 */
t_r=(int)r;
Draw(12); /* 用颜色12画出图形 */
delay(1000); /* 稍等1秒钟看一下结果 */
}
closegraph();
}

void Draw(int color) /* 画图形 */
{
setcolor(color);
circle(t_x,t_y,t_r); /* 画太阳?*/
outtextxy(t_x-10,t_y-4,"SUN"); /* 显示太阳符号SUN */

d_x=t_x+130*cos(th1); /* 根据太阳位置计算地球位置X */
d_y=t_y+130*sin(th1); /* 根据太阳位置计算地球位置Y */
circle(d_x,d_y,d_r); /* 画地球 */
outtextxy(d_x-4,d_y-4,"D"); /* 显示地球符号D */

y_x=d_x+40*cos(th2); /* 根据地球位置计算月亮位置X */
y_y=d_y+40*sin(th2); /* 根据地球位置计算月亮位置Y */
circle(y_x,y_y,y_r); /* 画月亮 */
outtextxy(y_x-3,y_y-4,"Y"); /* 显示月亮符号Y */

j_x=t_x+60*cos(th3); /* 根据太阳位置计算J星位置X */
j_y=t_y+60*sin(th3); /* 根据太阳位置计算J星位置Y */
circle(j_x,j_y,j_r); /* 画J星 */
outtextxy(j_x-4,j_y-4,"J"); /* 显示J星符号J */

m_x=t_x+200*cos(th4); /* 根据太阳位置计算M星位置X */
m_y=t_y+200*sin(th4); /* 根据太阳位置计算M星位置Y */
circle(m_x,m_y,m_r); /* 画M星 */
outtextxy(m_x-4,m_y-4,"M"); /* 显示M星符号M */

s_x=t_x+230*cos(th5); /* 根据太阳位置计算S星位置X */
s_y=t_y+230*sin(th5); /* 根据太阳位置计算S星位置Y */
circle(s_x,s_y,s_r); /* 画S星,S星太小,所以没有显示符号 */
}


[解决办法]
TC小但不失强大
[解决办法]
TC。。。我真的还没用过呢。
明天上机去试试感觉
[解决办法]


我想说TC不失为一小巧的编译器;虽然他的界面不好看,操作也不方便,但它对新手来说是一个可以一用的编译器,除了不能跟踪内存;我还是想说他对新手不错,他的作用可以用快捷键来的,比如:运行CTRL + F9
单步运行:F8,还有变量跟踪(这个不记得了,^-^), 等等!用他的原因是因为他能让你多动手,能静下心来学习C。
[解决办法]
速度好快啊,SUN闪得不好看,色彩也不好,不过值得学习,


[解决办法]
这个画面还不错,值得学习
[解决办法]
定下TC

读书人网 >C语言

热点推荐