c++夜空小动画0.0.78(EasyX)

0.0.78快照版程序提升了运行流畅性,修复了C键卡顿和启动闪退的bug,采用批量输出提高效率。使用VC6.0开发,依赖EasyX Graphics Library for C++。附带新手原创源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次0.0.78快照版程序更新:

1.运行更加顺畅

2.解决了C键卡顿的bug

3.采用批量输出

4.重点:解决了运行开始突然闪退的bug

我用的是VC6.0,需要下载EasyX Graphics Library for C++

上代码:(源码,本新手肝出来的)

#include <graphics.h>
#include <time.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <windows.h>
#define MAXSTAR 30	// ÐÇÐÇ×ÜÊý
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
struct STAR
{
	double	x;
	int		y;
	double	step;
	int		color;
};

STAR star[MAXSTAR];

// ³õʼ»¯ÐÇÐÇ
void InitStar(int i)
{
	star[i].x = 0;
	star[i].y = rand() % 480;
	star[i].step = (rand() % 5000) / 1000.0 + 1;
	star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// ËÙ¶ÈÔ½¿ì£¬ÑÕɫԽÁÁ
	star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}

// ÒÆ¶¯ÐÇÐÇ
void MoveStar(int i)
{
	// ²ÁµôÔ­À´µÄÐÇÐÇ
	putpixel((int)star[i].x, star[i].y, 0);
	putpixel((int)star[i].x+1, star[i].y, 0);
	putpixel((int)star[i].x+1, star[i].y+1, 0);
	putpixel((int)star[i].x, star[i].y+1, 0);

	putpixel((int)star[i].x, star[i].y, 0);
	putpixel((int)star[i].x+2, star[i].y, 0);
	putpixel((int)star[i].x+2, star[i].y+2, 0);
	putpixel((int)star[i].x, star[i].y+2, 0);

	putpixel((int)star[i].x+2, star[i].y+1, 0);
	putpixel((int)star[i].x+2, star[i].y+1, 0);
	putpixel((int)star[i].x+1, star[i].y+2, 0);
	putpixel((int)star[i].x+1, star[i].y+2, 0);

	// ¼ÆËãÐÂλÖÃ
	star[i].x += star[i].step/3;
	if (star[i].x > 640)	InitStar(i);

	// »­ÐÂÐÇÐÇ
	putpixel((int)star[i].x, star[i].y, star[i].color);
	putpixel((int)star[i].x+1, star[i].y, star[i].color);
	putpixel((int)star[i].x+1, star[i].y+1, star[i].color);
	putpixel((int)star[i].x, star[i].y+1, star[i].color);

	putpixel((int)star[i].x, star[i].y, star[i].color);
	putpixel((int)star[i].x+2, star[i].y, star[i].color);
	putpixel((int)star[i].x+2, star[i].y+2, star[i].color);
	putpixel((int)star[i].x, star[i].y+2, star[i].color);

	putpixel((int)star[i].x+2, star[i].y+1, star[i].color);
	putpixel((int)star[i].x+2, star[i].y+1, star[i].color);
	putpixel((int)star[i].x+1, star[i].y+2, star[i].color);
	putpixel((int)star[i].x+1, star[i].y+2, star[i].color);
}

// Ö÷º¯Êý
int main()
{
	
	int cx=GetSystemMetrics(SM_CXSCREEN);
	int cy=GetSystemMetrics(SM_CYSCREEN);
	HWND hwnd=GetForegroundWindow(); 

	printf("initcode...\n");
	printf("initheadfile...\n");
	printf("initmain...\n");
	printf("initEasyX...\n");
	int fp=0,fps,sta=(unsigned)time(NULL);
	loadimage(NULL,NULL,NULL,NULL,NULL,NULL);
	srand((unsigned)time(NULL));	// Ëæ»úÖÖ×Ó
	initgraph(640, 480);
	printf("initgraph...\n");
	settextcolor(RGB(255,255,255));// ´´½¨»æÍ¼´°¿Ú
	// ³õʼ»¯ËùÓÐÐÇÐÇ
	for(int i = 0; i < MAXSTAR; i++)
	{
		InitStar(i);
		star[i].x = rand() % 640;
	}
	MOUSEMSG m;
	printf("initstar...\n");
	printf("startpaint\n");
	printf("loadtime:0.2s\n");
	printf("Showgraph...\n");
	printf("startanimation\n");
	SetWindowPos(hwnd,HWND_TOP,1,cy/2,cx/2,cy/2,0);
	while(1/*!kbhit()*/){
		ShowWindow(GetForegroundWindow(),1);
		BeginBatchDraw();
		fp++;
		
		for(int i = 0; i < MAXSTAR; i++)
			MoveStar(i);
		setfillcolor(RGB(255,255,200));
		solidcircle(100,100,20);
		clearcircle(95,95,20);
		setfillcolor(RGB(235,235,180));
		solidcircle(100,100,19);
		clearcircle(95,95,19);
		setfillcolor(RGB(200,200,145));
		solidcircle(100,100,18);
		clearcircle(95,95,18);
		setfillcolor(RGB(0,40,0));
		solidellipse(0,450,639,500);
		if(KEY_DOWN('E')){
			settextcolor(RGB(255,255,255));
			outtextxy(1,1,"made from Microsoft Visual C++ 6.0.0");
			outtextxy(1,20,"star 0.0.78  made by Jared");
			outtextxy(1,40,"Use Graphics.h Headfile --From EasyX.h");
			outtextxy(1,60,"EasyX html:");
			settextcolor(RGB(90,150,255));
			outtextxy(1,80,"https://easyx.cn/");
			settextcolor(RGB(255,255,255));
			outtextxy(1,100,"Press E:Help");
			outtextxy(1,120,"Press C:initgraph");
			outtextxy(1,140,"Press R:closegraph");
			if(MouseHit())outtextxy(1,160,"Mousehit:1");
			else outtextxy(1,160,"Mousehit:0");
			if(MouseHit()){
				m=GetMouseMsg();
				switch(m.uMsg){}
			}
		}
		if(KEY_DOWN('R')){
			closegraph();
		}
		if((int)time(0)-sta>=1){
			fps=fp;
			fp=0;
			sta=(int)time(0);
		}
		if(KEY_DOWN('C')){
			closegraph();
			ShowWindow(GetForegroundWindow(),0);
			SetWindowPos(hwnd,HWND_TOP,1,cy/2,cx/2,cy/2,0);
			initgraph(640,480);
		}
		EndBatchDraw();
		Sleep(20);
		clearrectangle(0,0,1000,1000);
		
	}
	closegraph();					
}

再次跪求评论

再次跪求评论

再次跪求评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值