C写的飞行器模拟游戏程序,值得看!!

Wincent 2003-08-24 06:12:50

她模拟一架飞机在一块网格地上飞行,但运行程序时看不到网格,我检查了好几遍也没看出错误,请大家看看,给我发邮件呦! 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;
}

...全文
295 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyongf 2003-09-06
  • 打赏
  • 举报
回复
你怎么连窗口都不创建啊?
mixtrue 2003-09-06
  • 打赏
  • 举报
回复
Wincent (小龙女)
我看了你的程序运行感觉不是非常的好!给人的感觉太幺眼!
我分析问题的原因如下:
1 因为刷新的频率太快了一致 USING C FOR FLIGHT SIMULATION 这些字总是若隐若现的。
2 你的观察点在改变方向后设置的不是非常理想 因为我在使用控制时发现有两条不同颜色
的线重叠在一起我想可能是由于参考点相同在计算网格的时候出现位置的重叠其实网格已经被
绘制好了,只是你一水平的角度观察当然只看到了一条直线。

建议:
0: 能否书写的格式化 改进书写习惯,加入缩进,这样程序为容易阅读的。

1:能否绘制一个plane的摸行阿(<可以是一条带颜色的短线〉一个函数你可以你参照点人输入参谁来改变他的为止)这样在调试程序的非常方便。

2:你首先在程序中绘制网格进行测试,看看你的绘制程序是否工作正常。然后尝试以不同的角度来观察网格的变化,如可以进行 3个不同观察点的测试看看你绘制的网格到底能否现实正确(停止一个关于飞机位置的计算)

++++++++++++++++++++++++++++
simple is beauty !
++++++++++++++++++++++++++++

mastkwdge 2003-09-06
  • 打赏
  • 举报
回复
我也要一份
superbelief@163.com
谢谢!搞清楚会再来。
noscar 2003-09-06
  • 打赏
  • 举报
回复
发过来看一看界面,我一向不相信,用c能做出很好的界面!noscar2003@163.com
紫郢剑侠 2003-09-06
  • 打赏
  • 举报
回复
发一份给我吧,purpleendurer@hotmail.com

谢谢!
jackxiongli 2003-09-06
  • 打赏
  • 举报
回复
函数上有问题吧 。。。。。
ejiue 2003-09-05
  • 打赏
  • 举报
回复
ejiue@sina.com
Wincent 2003-09-05
  • 打赏
  • 举报
回复
严正申明:


这个程序不是我编的,是老外编的,我和大家一样,是研读者!
作为计算机爱好者,作为一位希望成为真正的程序员的人,诚实守信,是必备素质!!
dabenlong 2003-09-01
  • 打赏
  • 举报
回复
QQ:2626270
E-mail:dabenlong@163.net
HR-TANG 2003-09-01
  • 打赏
  • 举报
回复
在我这里好像不能正常运行只看到线条在
转,还有就是B,G操作不能实现。
lbamgod 2003-09-01
  • 打赏
  • 举报
回复
to   Wincent(小龙女)
    哦。我看过了。。很不错的。。

你有QQ吗。可以一起学习的。。

QQ:14198713

bm1408 2003-09-01
  • 打赏
  • 举报
回复
不错的!
改过来给哥们看看!

bmm1408@163.com

luoming197 2003-09-01
  • 打赏
  • 举报
回复
佩服佩服,小龙女,你学了多长时间到这个水平?用过什么参考书(图形函数方面)?可不可以给我推荐几个好的学c图形函数的网站,谢谢,谢谢!!!
lieyanfriend 2003-08-31
  • 打赏
  • 举报
回复
我喜欢:lieyan_friend@163.com
cccbuiler 2003-08-31
  • 打赏
  • 举报
回复
游戏还是比较简陋的,玩起来也有些不方便
还需要修饰一下
Wincent 2003-08-31
  • 打赏
  • 举报
回复
各位大哥你们要什么??
我不懂,你完全可以通过复制将程序导入编译器吗?
这两天我真的很忙,如果真要,过几天我在发,OK?
csdn20032004 2003-08-30
  • 打赏
  • 举报
回复
看来很有意思,我也要一份
personalmails@163.net
zzgcxy 2003-08-30
  • 打赏
  • 举报
回复
me也要!
zzgcxy@163.com
3q!
bbgbianbaogui 2003-08-30
  • 打赏
  • 举报
回复
我也要。bbgbianbaogui@hotmail.com
psprite 2003-08-30
  • 打赏
  • 举报
回复
看过了~``只是有一些眼晕
加载更多回复(37)

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧