这次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();
}
再次跪求评论
再次跪求评论
再次跪求评论