c语言雷电让敌机随机移动,我想做一个类似雷电的游戏,现在想要子弹(符号是*)自动从飞机发射出去,怎么写啊...

这篇博客详细介绍了如何使用C++编写一个简单的飞机大战游戏,包括飞机的移动、敌机的生成以及碰撞检测等核心功能。作者通过设置不同的时间间隔来控制子弹发射、敌机出现的频率,并使用console控制台进行图形绘制。此外,还讨论了游戏中的碰撞检测和飞机变形问题,但未给出具体的解决方法。
摘要由CSDN通过智能技术生成

回复 7楼 wmf2014

哦!谢谢你!但是我现在加入了敌机这个元素,但是不知道为什么运行了一段时间之后飞机突然自动变形了!请问一下是为什么,然后怎么改。。

#include

#include

#include

#include

#include

int map[50][40],oldmap[50][40];

clock_t Now_Time=clock();

void HideCursor();

void gotoxy(int x,int y);

void drawmap();

void setplane();

void HideCursor()

{

HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO cursor_info={1,0};

SetConsoleCursorInfo(hOut,&cursor_info);

}

void gotoxy(int x,int y)

{

HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

COORD loc={x,y};

SetConsoleCursorPosition(hOut,loc);

}

void drawmap()

{

int x,y,j;

char a,b;

for(x=0;x<50;x++)

for(y=0;y<40;y++)

{

gotoxy(x,y);

j=map[x][y];

if(j==0)

a=' ';

if(j==1)

a='0';

if(j==2)

a='*';

if(j==3)

a='$';

if(map[x][y]!=oldmap[x][y])

{printf("%c",a);oldmap[x][y]=map[x][y];}

}

}

void setplane(int x,int y)

{

HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hOut,FOREGROUND_GREEN);

int i,j;

for(i=0;i<50;i++)

for(j=0;j<40;j++)

if(map[i][j]==1)

map[i][j]=0;

for(i=y;i

map[x][i]=1;

for(i=x-3;i

map[i][y+2]=1;

map[x-1][y+5]=1;

map[x+1][y+5]=1;

}

int main()

{

srand((unsigned)time(NULL));

int x,y,px=25,py=30,flag,ix,iy,m,score=0;

long t1,t2,t3,t4;

char a;

system("mode con cols=80 lines=40");

for(x=0;x<50;x++)

for(y=0;y<40;y++)

{

map[x][y]=0;

oldmap[x][y]=-1;

}

HideCursor();

flag=true;

drawmap();

Now_Time=clock();

t1=Now_Time;

t2=Now_Time;

t3=Now_Time;

while(1)

{

Now_Time=clock();

if(kbhit())

{

a=getch();

if((a=='a')&&((px-3)>0))

px=px-1;

if((a=='s')&&((py+6)<40))

py=py+1;

if((a=='d')&&((px+3)<49))

px=px+1;

if((a=='w')&&(py>0))

py=py-1;

if(a=='p')

flag=!flag;

}

if(flag)

{

setplane(px,py);

if(Now_Time-t1>200)

{

map[px][py-1]=2;

t1=Now_Time;

}

if(Now_Time-t2>30)

{

t2=Now_Time;

for(x=0;x<50;x++)

for(y=0;y<40;y++)

if(map[x][y]==2)

{

map[x][y]=0;

if((y-1)>0)

map[x][y-1]=2;

}

}

if(Now_Time-t3>1000)

{

ix=rand()%44+3;

iy=1;

map[ix][iy]=3;

t3=Now_Time;

}

if(Now_Time-t4>500)

{

t4=Now_Time;

for(x=50;x>0;x--)

for(y=40;y>0;y--)

if(map[x][y]==3)

{

map[x][y]=0;

if((y+1)<40)

map[x][y+1]=3;

}

}

drawmap();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中实现飞机大战游戏,需要使用图形库(如graphics.h)来显示游戏界面。对于敌机发射子弹这个功能,可以通过以下步骤实现: 1. 定义子弹结构体,包含子弹的位置和速度等信息。 2. 在游戏循环中,检查敌机是否需要发射子弹,如果需要则创建一个新的子弹对象,并将其加入到子弹数组中。 3. 在每一帧中,遍历子弹数组,更新子弹的位置,并将其绘制到屏幕上。 4. 检查子弹是否击中了玩家飞机或者超出了屏幕范围,如果是则将其从子弹数组中移除。 5. 在玩家飞机的碰撞检测中,也需要检查子弹是否击中了玩家飞机。 下面是一个简单的示例代码: ``` // 定义子弹结构体 typedef struct { int x, y; // 子弹的坐标 int speed; // 子弹的速度 int active; // 子弹是否可用(是否在屏幕上) } Bullet; // 创建子弹数组 Bullet bullets[MAX_BULLETS]; // 在游戏循环中检查敌机是否需要发射子弹 if (enemy_shoot()) { // 创建一个新的子弹对象 Bullet new_bullet; new_bullet.x = enemy_x; new_bullet.y = enemy_y + enemy_height; new_bullet.speed = BULLET_SPEED; new_bullet.active = 1; // 将新的子弹对象加入到子弹数组中 for (int i = 0; i < MAX_BULLETS; i++) { if (!bullets[i].active) { bullets[i] = new_bullet; break; } } } // 在每一帧中遍历子弹数组,更新子弹的位置,并将其绘制到屏幕上 for (int i = 0; i < MAX_BULLETS; i++) { if (bullets[i].active) { // 更新子弹的位置 bullets[i].y += bullets[i].speed; // 绘制子弹到屏幕上 draw_bullet(bullets[i].x, bullets[i].y); // 检查子弹是否击中了玩家飞机或者超出了屏幕范围 if (bullets[i].y < 0 || bullets[i].y > SCREEN_HEIGHT || check_collision(player_x, player_y, player_width, player_height, bullets[i].x, bullets[i].y, bullet_width, bullet_height)) { bullets[i].active = 0; // 将子弹标记为不可用 } } } // 在玩家飞机的碰撞检测中,也需要检查子弹是否击中了玩家飞机 for (int i = 0; i < MAX_BULLETS; i++) { if (bullets[i].active && check_collision(player_x, player_y, player_width, player_height, bullets[i].x, bullets[i].y, bullet_width, bullet_height)) { // 子弹击中了玩家飞机,执行相应操作 } } ``` 需要注意的是,以上代码仅为示例,实际实现中可能需要进行适当的修改。同时,子弹发射也需要考虑敌机的位置、速度等因素,以保证游戏的难度和可玩性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值