C写的飞行器模拟游戏程序,值得看!!
她模拟一架飞机在一块网格地上飞行,但运行程序时看不到网格,我检查了好几遍也没看出错误,请大家看看,给我发邮件呦! ceeonia@hotmail.com
这是一个飞行器模拟游戏程序,它模拟飞机在一块网格上飞行,飞机可做各种飞行动做,
h:向左飞并转向左方, f:向右飞并转向右方;
t:爬高 b:俯冲
g:保持当前飞行; +:加速 -:减速
下面是源代码,运行后看不见网格地面,推想程序有错 , 可小弟实在太菜,找不到,
烦请大哥帮帮忙,希望与我联系邮箱 ceeonia@hotmail.com 小弟先谢过了!!
#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <bios.h>
#include <math.h>
void graphics_setup(void);void keyboard(); void quit_pgm(void);
void calc_3d(void);void window(void);
void clip_2d(void);void yaw_change(void);void translation(void); void crash();
void corner(void);void windoww(void);void grid(void);
void draw_grid(void); void draw_horizon(); void horiz3d();
void clip_3d(void);void window_terrain(void);void draw_line(void);
int t1=1,t2=1;
int p=0;
# define C0=0,C1=1,C2=2,C3=3,C4=4,C5=5,C6=6,C7=7,C8=8,C9=9,C10=10,C11=11,C12=12,C13=13,C14=14,C15=15;mode_flag=0; /*该行可不要*/
int p1=1;
int p2=1;
int g=7;
float x=0,y=0,z=0; /*绝对坐标*/
float x01=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0,x9=0,x10=0,x11=0,x12=0,x13=0,x14=0,x15=0,x16=0; /*网格顶点*/
float y01=0,y2=0,y3=0,y4=0,y5=0,y6=0,y7=0,y8=0,y9=0,y10=0,y11=0,y12=0,y13=0,y14=0,y15=0,y16=0; /*网格顶点*/
float z01=0,z2=0,z3=0,z4=0,z5=0,z6=0,z7=0,z8=0,z9=0,z10=0,z11=0,z12=0,z13=0,z14=0,z15=0,z16=0; /*网格顶点*/
float L=0;
float sx=0,sy=0; /*三 维裁剪输出坐标*/
float xa=0,ya=0,za=0;
float xb=0,yb=0,zb=0; /*三 维裁剪*/
float xc=0,yc=0,zc=0;
float sxa=0,sya=0,sxb=0,syb=0; /*二维直线端点*/
float sxs=0,sys=0;
float temp_swap=0;
float d=620;
double r1=6.28319,r2=6.28319,r3=6.28319; /*方位角,滚动角,俯仰角*/
float r1a=0,r2a=0,r3a=0; /*角变化*/
double sr1=0,sr2=0,sr3=0;
double cr1=0,cr2=0,cr3=0;
float mx=24,my=-770,mz=188; /*观察点坐标*/
float m=1;
float my1=0; /*观察点坐标变化*/
float m1=0;
float mx1=0; /*观察点坐标变化*/
float mz1=0; /*观察点坐标变化*/
int maxx=639,minx=0,maxy=119,miny=0;
float c=0;
int crash_flag=0;
float rx=0,ry=0;
float screen_x=639,screen_y=199;
void main()
{
graphics_setup();
rx=screen_x/799;ry=screen_y/599;
RESTART:
setactivepage(p);setvisualpage(1-p);p=1-p;
ANIMATE:
cleardevice();
keyboard(); /*检查键盘输入*/
r2=r2+r2a;r3=r3+r3a;
if(r2>6.28319) r2=r2-6.28319;
if(r2<=0) r2=r2+6.28319;
if(r3>6.28319) r3=r3-6.28319;
if(r3<=0) r3=r3+6.28319;
yaw_change(); /*重新计算航向*/
r1=r1+r1a;
if(r1>6.28319) r1=r1-6.28319;
if(r1<=0) r1=r1+6.28319;
sr1=sin(r1);sr2=sin(r2);sr3=sin(r3);
cr1=cos(r1);cr2=cos(r2);cr3=cos(r3);
translation(); /*计算飞机的下一个物理位置*/
if(my>0) crash(); ./* my>0时 坠毁*/
if(crash_flag==1) {
crash_flag=0;goto RESTART;}
g=1;draw_horizon(); /*画地平线*/
corner(); /*计算网格四各角的观察坐标
grid(); /*求网格上其他交点,这样节省时间*/
g=2;draw_grid(); /*画网格地面*/
setcolor(7);circle(319,99,30);
moveto(319,86);lineto(319,112);moveto(290,99);lineto(348,99);
outtextxy(208,0,"USING C FOR FLIGHT SIMULATION");
setactivepage(p);setvisualpage(1-p);p=1-p;
goto ANIMATE;
}
void yaw_change(void) /*重新计算航向*/
{
if(r2>=0)
{
if(r2<=1.57079)
{
r1a=(r2/.017453)*.00349;return;
}
}
if(r2<=6.28319&r2>=4.71239)
{
r1a=(((6.28319-r2)/0.017453))*(-0.00349);return;
}
if(r2>1.57079) {if(r2<=3.14159){r1a=(((3.14159-r2)/.017435))*.00349;return;}}
if(r2>3.14159) {if(r2<4.71239){r1a=(((r2-3.14159)/.0174535))*(-.00349);return;}}
return;
}
void translation(void) /*计算飞机的下一个物理位置*/
{
m1=cr3*m;
my=(-1)*sr3*m;
if(r3>0)
{
if(r3<=1.57079) my1=my1*cr3;
}
if(r3>1.57079) {
if(r3<3.14159) my1=my1*(-1)*cr3;
}
mx1=(-1)*sr1*m1;mz1=cr1*m1;
mx=mx+mx1;my=my+my1;mz=mz+mz1;
return;
}