别动我的饭 2022-01-13 23:48 采纳率: 0%
浏览 71
已结题

各位家人,我想问一下为什么这个c语言流星雨跑起来会卡在星空界面,无法进行下一步实现流星雨

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include <time.h>
#define RGB(r,g,b)((COLORREF)(((BYTE)(rand()%256)|((WORD)((BYTE)(rand()%256))<<8))|(((DWORD)(BYTE)(rand()%256))<<16)))
#define MAXSTAR 1000
#define MAXMETEOR 520

//结构体
struct Star
{
int x, y;
int color;
int step;
}star[MAXSTAR];

struct Meteor
{
int x, y;
int style;
int step;
}meteor[MAXMETEOR];
IMAGE img1, img2;

void printText()
{
//设置文字颜色
settextcolor(RGB(0, 255, 255));//只能调用三原色,其它颜色可以用三原色混合生成
//调整字体大小
settextstyle(40, 0, _T("宋体"));
outtextxy (200, 100, _T("垆边人似月,皓腕凝霜雪"));

_getch();//按键

}

//插入图片
//初始化星星
void initStar(int i)
{
//随机坐标
star[i].x = rand() % 1000;
star[i].y = rand() % 500;
star[i].color = RGB(rand() % 256, rand % 256, rand % 256);
star[i].step = rand() % 10;
}

//画星星
void drawStar(int i)
{
//画像素点:在初始化星星的点坐标
putpixel(star[i].x, star[i].y, star[i].color);
//移动星星:加速度、
star[i].x += star[i].step;
//跑到窗口外面的星星需要再次初始化
if (star[i].x >= 1000)
{
putpixel(star[i].x, star[i].y, star[i].color);
initStar(i);
}
}
//流星
//初始化流星
void initMeteor(int i)
{
meteor[i].x = rand()%2000-1000;
meteor[i].y = rand()%20-200;
meteor[i].style = rand() % 2;
meteor[i].step = rand() % 30+3;//流星速度不能为零
}
//画流星:贴图技术
void drawMeteor(int i)
{
//3.贴图:显示图片
for (int i = 0; i < MAXMETEOR; i++)
{
switch (meteor[i].style)
{
case 0:
putimage(meteor[i].x, meteor[i].y, &img1,SRCPAINT);
break;
case 1:
putimage(meteor[i].x, meteor[i].y, &img2, SRCPAINT);
break;
}
}
}
//移动流星
void moveMeteor(int i)
{
for ( i = 0; i < MAXMETEOR; i++)
{
meteor[i].x += meteor[i].step;
meteor[i].y += meteor[i].step;
if (meteor[i].x >= 1000 || meteor[i].y >= 500)
{
initMeteor(i);
}
}
}
int main()
{
//2.加载图片
loadimage (&img1, "1.jpg", 50,50);
loadimage (&img2, "2.jpg", 50, 50);

initgraph(1000,500);//界面:初始化图形环境(宽,高)


srand((unsigned int)time(NULL));
printText();

int i = 0;
for (int i = 0; i < MAXSTAR; i++)
{
    initStar(i);
    //drawStar(i);
}
for (i = 0; i < MAXMETEOR; i++)
{
    initMeteor(i);
}

while (1)
{
    BeginBatchDraw();
    cleardevice();
    for (int i = 0; i < MAXSTAR; i++)
    {

        drawStar(i);
    }
    drawMeteor(i);
    moveMeteor(i);
    Sleep(100);
    EndBatchDraw();
}

while (1);//卡屏
closegraph();//关闭图形环境




return 0;

}

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2022-01-13 23:56
    关注

    看下是不是死循环了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月17日
  • 创建了问题 1月13日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错