「已注销」 2022-11-13 21:06 采纳率: 93.3%
浏览 61
已结题

C++Easyx开发飞机大战出问题

我最近在开发C++Easyx飞机大战,为什么我的代码运行后只有当飞机移动才能移动子弹,飞机不动时子弹就不飞,帮帮忙!
代码:

#include<graphics.h>
#include<conio.h>
#include<windows.h>
#include<bits/stdc++.h>
using namespace std;
IMAGE img,img1,play1,play2,bullet1,bullet2,enemy1,enemy2;
struct Plane{
    int x,y;
    bool life;
    int w,h;
}play;
struct Bullet{
    int x,y;
}bullet[500];
int num_bullet=0;
MOUSEMSG m; 
void setup(){
    //玩家飞机初始化 
    play.x=200;play.y=400;
    //加图片 
    //loading picture
    loadimage(&img,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\1.png",500,500);
    loadimage(&img1,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\2.png",500,500);
    loadimage(&play1,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\player1.png",100,100);
    loadimage(&play2,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\player2.png",100,100);
    loadimage(&enemy1,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\enemy.png",100,100);
    loadimage(&enemy2,"D:\\开发\\开发项目\\飞机大战(万圣节特辑)\\pic\\enemy1.png",100,100);
}
void drawbullet(){
    for(int i=1;i<=num_bullet;i++){
        bullet[i].y-=20;
        setlinestyle(BS_SOLID,3);
        setlinecolor(RED);
        line(bullet[i].x,bullet[i].y,bullet[i].x,bullet[i].y-20);
    }
}
void show(){
    putimage(0,0,&img1);    
    putimage(play.x,play.y,&play1,SRCPAINT);
    putimage(play.x,play.y,&play2,SRCAND);
}
void player_move(){
    m=GetMouseMsg();//获取鼠标消息 
    if(m.uMsg==WM_MOUSEMOVE){
        //鼠标移动实现 
        play.x=m.x-50;
        play.y=m.y-50;
    }
    if(m.uMsg==WM_LBUTTONDOWN){
        num_bullet++;//子弹数量 
        bullet[num_bullet].x=play.x+50;//子弹x轴位置 
        bullet[num_bullet].y=play.y-20;//子弹y轴位置 
    } 
}
int main()
{
    initgraph(500,500);
    setup();
    BeginBatchDraw();
    while(1){
        cleardevice();
        show();
        player_move();
        drawbullet();
        FlushBatchDraw();
    }
    getch();
    closegraph();
    return 0;
}

代码视频演示地址:
https://live.csdn.net/v/254040

  • 写回答

1条回答 默认 最新

  • 浪客 2022-11-13 21:35
    关注

    m=GetMouseMsg(); 要等待鼠标事件才会返回,改用
    PeekMouseMsg(&m);
    下面if加个判断防止越界
    if (num_bullet == 500)
    num_bullet = 0;
    子弹最好单独写成class,让它自己移动出界面

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 已采纳回答 11月19日
  • 创建了问题 11月13日

悬赏问题

  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳