void drawcalendar(void) { int i; int num; int x,y; DAY_NUM T_day; T_day=CO_day; T_day.day=1; x=T_day.week=count_week(T_day.year%100,T_day.year/100,T_day.month,T_day.day); y=1; num=month[leap_year(T_day.year)][T_day.month-1]; setfont(40,20,""); for(i=0;i<num;i++,T_day.day++){ if(T_day.year==CO_day.year&&T_day.month==CO_day.month&&T_day.day==CO_day.day) setfillcolor(RGB(255,40,40)); else if(T_day.year==today.year&&T_day.month==today.month&&T_day.day==today.day) setfillcolor(RGB(50,245,55)); else setfillcolor(RGB(45,45,250)); setcolor(RGB(140,140,140)); fillrectangle(PCOX+x*WEIT,PCOY+y*HEIT,PCOX+x*WEIT+WEIT,PCOY+y*HEIT+HEIT); char str[3]={0}; sprintf(str,"%02d",i+1); setcolor(RGB(255,255,255)); outtextxy(PCOX+x*WEIT+15,PCOY+y*HEIT+5,str); x++; if(x%7==0){ y++; x=0; } } }
void Interface::draw() { int i, r = rear; if (rear == -1) return; for (i = front; i < r; i++) { int k = (i < 400) ? i : i % 400; setfillcolor(EGERGB(ArrayTe[k].getR(), ArrayTe[k].getG(), ArrayTe[k].getB())); for (int j = 0; j < 4; j++) { if (sc[ArrayTe[i].trans_to_yindex(j)][ArrayTe[i].trans_to_xindex(j)] && ArrayTe[i].trans_to_yindex(j) && ArrayTe[i].trans_to_xindex(j)) //等于1才画 { bar(ArrayTe[k].getXCoord(j) - 10, ArrayTe[k].getYCoord(j) - 10, ArrayTe[k].getXCoord(j) + 10, ArrayTe[k].getYCoord(j) + 10); setcolor(WHITE); rectangle(ArrayTe[k].getXCoord(j) - 10, ArrayTe[k].getYCoord(j) - 10, ArrayTe[k].getXCoord(j) + 10, ArrayTe[k].getYCoord(j) + 10); } } } for (int j = 0; j < 4; j++) { setfillcolor(EGERGB(ArrayTe[i].getR(), ArrayTe[i].getG(), ArrayTe[i].getB())); if (ArrayTe[i].getYCoord(j) >= 80) { bar(ArrayTe[i].getXCoord(j) - 10, ArrayTe[i].getYCoord(j) - 10, ArrayTe[i].getXCoord(j) + 10, ArrayTe[i].getYCoord(j) + 10); setcolor(WHITE); rectangle(ArrayTe[i].getXCoord(j) - 10, ArrayTe[i].getYCoord(j) - 10, ArrayTe[i].getXCoord(j) + 10, ArrayTe[i].getYCoord(j) + 10); } } }
int main() { initgraph(640, 480); //设置绘图颜色,一般用于边界 setcolor(EGERGB(0xFF, 0xFF, 0x0)); //设置填充颜色,一般为图形内部颜色 setfillcolor(EGERGB(0xFF, 0x0, 0x80)); //画一带填充的椭圆 fillellipse(200, 200, 150, 100); //画一个空心圆 circle(500, 300, 100); //再次设置填充颜色,用于决定下一函数填充的颜色 setfillcolor(EGERGB(0x80, 0x0, 0xFF)); //手工填充 //x,y是开始填充的坐标,第三个参数是填充的边界颜色,或者说以这个颜色作为边界 //如果这个边界不封闭,那么会导致整个屏幕都是这个颜色 floodfill(500, 300, EGERGB(0xFF, 0xFF, 0x0)); getch(); closegraph(); return 0; }
void drawcalendarBG(void) { int i; setcolor(RGB(255,0,0)); setfont(60,30,"黑体"); outtextxy(30,30,"Perpetual Calendar"); setcolor(RGB(140,140,140)); rectangle(50,150,540,500); for(i=0;i<6;i++){ line(50,200+i*HEIT,540,200+i*HEIT); line(120+i*WEIT,150,120+i*WEIT,500); } setfillcolor(RGB(54,197,233)); for(i=0;i<7;i++) fillrectangle(50+i*WEIT,150,120+i*WEIT,200); setcolor(RGB(255,255,0)); setfont(30,15,"黑体"); outtextxy(70,160,"日"); outtextxy(140,160,"一"); outtextxy(210,160,"二"); outtextxy(280,160,"三"); outtextxy(350,160,"四"); outtextxy(420,160,"五"); outtextxy(490,160,"六"); setcolor(RGB(140,140,140)); rectangle(INFX,INFY,690,390); for(i=0;i<5;i++) line(INFX,INFY+(i+1)*HEII,INFX+WEII,INFY+(i+1)*HEII); setfillcolor(RGB(54,197,233)); fillrectangle(INFX,INFY,INFX+WEII,INFY+HEII); setcolor(RGB(255,255,0)); setfont(30,15,"黑体"); outtextxy(INFX+25,INFY+10,"Today"); setcolor(RGB(255,10,10)); setfillcolor(RGB(255,10,10)); fillrectangle(INFX+10,INFY+HEII*6+10,INFX+20,INFY+HEII*6+20); setcolor(RGB(50,245,55)); setfillcolor(RGB(50,245,55)); fillrectangle(INFX+10,INFY+HEII*6+30,INFX+20,INFY+HEII*6+40); setcolor(RGB(45,45,250)); setfillcolor(RGB(45,45,250)); fillrectangle(INFX+10,INFY+HEII*6+50,INFX+20,INFY+HEII*6+60); setcolor(RGB(140,140,140)); setfont(10,7,""); outtextxy(INFX+30,INFY+HEII*6+10,"YOU CHOOSE"); outtextxy(INFX+30,INFY+HEII*6+30,"TODAY"); outtextxy(INFX+30,INFY+HEII*6+50,"GENERAL"); }
void no_poigrass() { setcolor(BLACK); setfillcolor(BLACK); fillcircle(poigrass.cor[0].x+20/2,poigrass.cor[0].y+20/2,20/2); fillcircle(poigrass.cor[1].x+20/2,poigrass.cor[1].y+20/2,20/2); fillcircle(poigrass.cor[2].x+20/2,poigrass.cor[2].y+20/2,20/2); if(cp==2) { setcolor(BLACK); setfillcolor(BLACK); fillcircle(poigrass.cor[3].x+20/2,poigrass.cor[3].y+20/2,20/2); fillcircle(poigrass.cor[4].x+20/2,poigrass.cor[4].y+20/2,20/2); } if(cp==3) { setcolor(BLACK); setfillcolor(BLACK); fillcircle(poigrass.cor[3].x+20/2,poigrass.cor[3].y+20/2,20/2); fillcircle(poigrass.cor[4].x+20/2,poigrass.cor[4].y+20/2,20/2); fillcircle(poigrass.cor[5].x+20/2,poigrass.cor[5].y+20/2,20/2); fillcircle(poigrass.cor[6].x+20/2,poigrass.cor[6].y+20/2,20/2); } poigrass.cor[0].x=240; poigrass.cor[0].y=700; poigrass.cor[1].x=340; poigrass.cor[1].y=700; poigrass.cor[2].x=240; poigrass.cor[2].y=700; if(cp==2) { poigrass.cor[3].x=60; poigrass.cor[3].y=700; poigrass.cor[4].x=500; poigrass.cor[4].y=700; } if(cp==3) { poigrass.cor[3].x=60; poigrass.cor[3].y=700; poigrass.cor[4].x=500; poigrass.cor[4].y=700; poigrass.cor[5].x=600; poigrass.cor[5].y=700; poigrass.cor[6].x=520; poigrass.cor[6].y=700; } }
void mainloop() { //x,y记录当前位置,dx,dy记录速度向量,r记录圆半径 int x = 0, y = 0, dx = 1, dy = 1, r = 100; for ( ; is_run(); delay_fps(60) ) { // todo: 逻辑更新 // 当前位置 + 速度 x += dx; y += dy; if (x < r) dx = 1; //碰左 if (y < r) dy = 1; //碰上 if (x >= ege::getwidth() - r) dx = -1; //碰右 if (y >= ege::getheight() - r) dy = -1; //碰下 // todo: 图形更新 cleardevice(); setcolor(GREEN); setfillcolor(BLUE); fillellipse(x, y, r, r); {// 画帧率文字 char str[20]; sprintf(str, "fps %.02f", getfps()); //调用getfps取得当前帧率 setcolor(WHITE); outtextxy(0, 0, str); } } }
int main() { PIMAGE img; initgraph(640, 480); //先随便画一些东西 setcolor(EGERGB(0xFF, 0xFF, 0x0)); setfillcolor(EGERGB(0xFF, 0x0, 0x80)); fillellipse(50, 50, 50, 50); img = newimage(); getimage(img, 0, 0, 160, 120); //先画一个非黑色背景,以便于比较 setbkcolor(EGERGB(0x80, 0x80, 0x80)); cleardevice(); //四种贴图比较 putimage(0, 0, img); putimage_alphablend(NULL, img, 160, 0, 0x80); //半透明度为0x80 putimage_transparent(NULL, img, 0, 80, BLACK); //透明贴图,关键色为BLACK,源图为这个颜色的地方会被忽略 putimage_alphatransparent(NULL, img, 160, 80, BLACK, 0xA0); //同时使用透明和半透明 getch(); delimage(img); closegraph(); return 0; }
void MessageDialog::on_dialog_init() { Gobang::set_font(font_family_.c_str(), font_size_, false, false, dialog_image_); putimage_withalpha(dialog_image_, dialog_icon_, icon_margin_, (height_ - button_area_height_ - getheight(dialog_icon_)) / 2); setcolor(BLACK, dialog_image_); static UINT text_format = DT_LEFT | DT_TOP | DT_EDITCONTROL | DT_WORDBREAK | DT_WORD_ELLIPSIS; text_rect_.left = icon_margin_ + getwidth(dialog_icon_) + text_margin_; text_rect_.top = text_margin_; text_rect_.right = width_ - text_margin_; text_rect_.bottom = height_ - button_area_height_ - text_margin_; //rectangle(text_rect_.left, text_rect_.top, text_rect_.right, text_rect_.bottom, dialog_image_); //计算文本高度 int text_height = DrawText(dialog_dc_, text_.c_str(), -1, &text_rect_, text_format | DT_CALCRECT); text_rect_.top = (height_ - button_area_height_ - text_height) / 2; text_rect_.bottom = height_ - button_area_height_ - text_margin_; DrawText(dialog_dc_, text_.c_str(), -1, &text_rect_, text_format); setfillcolor(EGERGB(230, 230, 230), dialog_image_); bar(0, height_ - button_area_height_, width_, height_, dialog_image_); ok_listener_ = OkButtonListener(dialog_handle_); ok_button_->set_on_click_listener(&ok_listener_); }
void drawMouse(int x,int y,int color) { setcolor(color); line(x+5,y,x+5,y+9); line(x,y+5,x+9,y+5); setfillcolor(color); if(isLButton()) setfillcolor(RED); int pt[]={ x,y, x+5,y, x+5,y+5, x,y+5 }; fillpoly(4,pt); }
int main() { initgraph(640, 480); fps f; for(double r = 0; is_run(); delay_fps(100000)) { r += 0.02; if(r > PI * 2) r -= PI * 2; cleardevice(); setcolor(EGERGB(0xFF, 0xFF, 0xFF)); setfillcolor(EGERGB(0, 0, 0xFF)); [](double x, double y, double r, double a){ int pt[10]; for(int n = 0; n < 5; ++n) { pt[n * 2] = -std::cos(PI * 4 / 5 * n + a) * r + x, pt[n * 2 + 1] = std::sin(PI * 4 / 5 * n + a) * r + y; } fillpoly(5, pt); }(300, 200, 100, r); } }
void mainloop() { for (; is_run(); delay_fps(5)) { setfillcolor(EGERGB(random(255),random(255), random(255))); cleardevice(); fillellipse(200, 200, 50, 30); } }
int main() { //声明一个img图片对象 PIMAGE img; initgraph(640, 480); //先随便画一些东西 setcolor(EGERGB(0xFF, 0xFF, 0x0)); setfillcolor(EGERGB(0xFF, 0x0, 0x80)); fillellipse(50, 50, 50, 50); //用newimage在initgraph后创建这个对象。但记得要在不使用的时候delimage img = newimage(); //从屏幕上截取(0, 0) - (80, 60)这部分作为img,这个img大小为80*60 //img的尺寸会重设,大小由第三第四个参数决定 //注意,(0,0)这点会被包含在img里,但(80, 60)不包含 getimage(img, 0, 0, 80, 60); //对img设置填充色为绿色 setfillcolor(EGERGB(0x0, 0x70, 0x0), img); //对img画实心矩形 bar(40, 20, 70, 50, img); int x, y; //把img平铺在屏幕上,使用一个二重循环 for (y = 0; y < 8; ++y) { for (x = 0; x < 8; ++x) { //把img整个,画在指定的坐标上,左上角对齐这个坐标 putimage(x * 80, y * 60, img); } } getch(); delimage(img); closegraph(); return 0; }
void print_score() { setcolor(BLACK); setfillcolor(BLACK); bar(830,220,830+150,220+50); char str[10]; setcolor(LIGHTCYAN); setfont(50,0,"华文行楷"); sprintf(str,"%d",score); outtextxy(835,220,str); }
void cleancalendar(void) { int i; setcolor(RGB(140,140,140)); setfillcolor(RGB(0,0,0)); fillrectangle(50,200,540,500); for(i=0;i<6;i++){ line(50,200+i*HEIT,540,200+i*HEIT); line(120+i*WEIT,150,120+i*WEIT,500); } }
void drawchoose(void) { char str[50]={0}; setcolor(RGB(140,140,140)); setfillcolor(RGB(140,140,140)); bar3d(130,100,510,140,5,1); setcolor(RGB(175,230,65)); sprintf(str,"YOU CHOOSE DAY IS : %04d年%02d月%02d日",CO_day.year,CO_day.month,CO_day.day); setfont(20,10,""); outtextxy(150,110,str); }
void main() { initgraph(640, 480); int x = 320; // 画初始图形 setlinecolor(YELLOW); setfillcolor(GREEN); fillcircle(x, 240, 20); char c; while(c != 27) { // 获取按键 c = getch(); // 先擦掉上次显示的旧图形 setlinecolor(BLACK); setfillcolor(BLACK); fillcircle(x, 240, 20); // 根据输入,计算新的坐标 switch(c) { case 'a': x-=2; break; case 'd': x+=2; break; case 27: break; } // 绘制新的图形 setlinecolor(YELLOW); setfillcolor(GREEN); fillcircle(x, 240, 20); // 延时 Sleep(10); } closegraph(); }
void Rectangler::draw() { setlinecolor(WHITE); setfillcolor(Incol); setlinestyle(style, width); line(pt[1].x,pt[1].y,pt[2].x,pt[2].y); line(pt[0].x,pt[0].y,pt[1].x,pt[1].y); line(pt[3].x,pt[3].y,pt[2].x,pt[2].y); line(pt[3].x,pt[3].y,pt[0].x,pt[0].y); floodfill(pt[0].x+1,(pt[1].y+pt[2].y)/2,WHITE); }
void Rectangler::erase() { setlinecolor(BLACK); setfillcolor(BLACK); setlinestyle(style, width); line(pt[1].x,pt[1].y,pt[2].x,pt[2].y); line(pt[0].x,pt[0].y,pt[1].x,pt[1].y); line(pt[3].x,pt[3].y,pt[2].x,pt[2].y); line(pt[3].x,pt[3].y,pt[0].x,pt[0].y); floodfill(pt[0].x+1,(pt[1].y+pt[2].y)/2,BLACK); }
void show_snake() { setfillcolor(YELLOW); setcolor(YELLOW); p0=head; while(p0->next!=NULL) { bar(p0->x,p0->y,p0->x+20,p0->y+20); bar(p0->next->x,p0->next->y,p0->next->x+20,p0->next->y+20); p0=p0->next; } setfillcolor(BLACK); setcolor(BLACK); bar(head->x,head->y,head->x+20,head->y+20); setfillcolor(YELLOW); setcolor(YELLOW); fillcircle(head->x+20/2,head->y+20/2,20/2); if(cp==3) Sleep(0); else Sleep(30); }
void Interface::draw(Tetris next) { int j; next.set_offset(270, 110); setfillcolor(EGERGB(next.getR(), next.getG(), next.getB())); for (j = 0; j < 4; j++) { bar(next.getXCoord(j) - 10, next.getYCoord(j) - 10, next.getXCoord(j) + 10, next.getYCoord(j) + 10); setcolor(WHITE); rectangle(next.getXCoord(j) - 10, next.getYCoord(j) - 10, next.getXCoord(j) + 10, next.getYCoord(j) + 10); } }
void mainloop() { // is_run ¼ì²â³ÌÐòÊÇ·ñÊÕµ½¹Ø±ÕÏûÏ¢£¬ÊÕµ½µÄ»°»á·µ»Øfalse£¬¼´Ó¦¸ÃÍ˳ö³ÌÐò // delay_fps ¿ØÖÆÖ¡ÂÊ£¬60±íʾ¡°Æ½¾ùÑÓʱ¡±Îª1000/60ºÁÃë // ΪʲôʹÓÃ60£¿ÒòΪ60ÊÇÏÔʾÆ÷µÄĬÈÏË¢ÐÂÂÊ£¬99.9%µÄÏÔʾÆ÷¶¼ÊÇÕâ¸öÉèÖà for ( ; is_run(); delay_fps(5) ) { // todo: Âß¼¸üРsetfillcolor(EGERGB(random(255), random(255), random(255))); // todo: ͼÐθüР// ÇåÆÁ cleardevice(); fillellipse(200, 200, 50, 30); } }
void view() { setbkcolor(inf.color_top); setcolor(inf.color_btm); setfillcolor(inf.color_btm); int pt[]={ 0,inf.box_y, inf.screen_x,inf.box_y, inf.screen_x,inf.screen_y, 0,inf.screen_y }; fillpoly(4,pt); }
void Triangle::erase() { setfillcolor(BLACK); setlinecolor(BLACK); setlinestyle(style, width); line(fir.x,fir.y,sec.x,sec.y); line(sec.x,sec.y,thi.x,thi.y); line(fir.x,fir.y,thi.x,thi.y); Point tem,tem1; tem.x=(fir.x+sec.x)/2; tem.y=(fir.y+sec.y)/2; tem1.x=(tem.x+thi.x)/2; tem1.y=(tem.y+thi.y)/2; floodfill(tem1.x,tem1.y,BLACK); }
void Triangle::draw() { setfillcolor(Incol); //填充颜色 setlinecolor(WHITE); setlinestyle(style, width); line(fir.x,fir.y,sec.x,sec.y); line(sec.x,sec.y,thi.x,thi.y); line(fir.x,fir.y,thi.x,thi.y); Point tem,tem1; tem.x=(fir.x+sec.x)/2; tem.y=(fir.y+sec.y)/2; tem1.x=(tem.x+thi.x)/2; tem1.y=(tem.y+thi.y)/2; floodfill(tem1.x,tem1.y,WHITE); //这个函数用于填充区域 }
void mainloop() { // x,y记录当前位置,dx,dy记录速度的方向,r记录圆半径 int x = 0, y = 0, dx = 1, dy = 1, r = 100; // alpha记录当前alpha值,da为alpha变化增量 int alpha = 0, da = 1; // 需要借助img实现透明半透明 PIMAGE img; // img 创建为 w=r*2, h=r*2大小 img = newimage(r * 2, r * 2); setcolor(0x00FF00, img); setfillcolor(0xFF0000, img); // 画在img上 fillellipse(r, r, r, r, img); setbkcolor(DARKGRAY); for ( ; is_run(); delay_fps(60) ) { // todo: 逻辑更新 // 当前位置 + 速度 x += dx; y += dy; if (x < 0) dx = 1; //碰左 if (y < 0) dy = 1; //碰上 if (x >= ege::getwidth() - r * 2) dx = -1; //碰右 if (y >= ege::getheight() - r * 2) dy = -1; //碰下 // 改变alpha值,参数范围为 0 ~ 0xFF(255) alpha += da; if (alpha <= 0) da = 1; if (alpha >= 0xFF) da = -1; // todo: 图形更新 cleardevice(); putimage_alphatransparent(NULL, img, x, y, BLACK, (unsigned char)alpha); } // 释放img delimage(img); }
//初始化,设置坐标,速度方向,透明度,创建IMAGE等 void initobj(AniObj* obj) { // random(n) 返回一个 0 到 n 之间的随机整数(unsigned) obj->x = (int)random(getwidth()); obj->y = (int)random(getheight()); obj->r = random(20) + 20; obj->dx = (int)random(2) * 2 - 1; // 生成-1或1 obj->dy = (int)random(2) * 2 - 1; obj->alpha = random(250) + 2; obj->da = (int)random(2) * 2 - 1; obj->img = newimage(obj->r * 2, obj->r * 2); setcolor(0x00FF00, obj->img); setfillcolor(0xFF0000, obj->img); fillellipse(obj->r, obj->r, obj->r, obj->r, obj->img); }
void set_poigrass1() { setfillcolor(WHITE); fillcircle(poigrass.cor[0].x+20/2,poigrass.cor[0].y+20/2,20/2); fillcircle(poigrass.cor[1].x+20/2,poigrass.cor[1].y+20/2,20/2); fillcircle(poigrass.cor[2].x+20/2,poigrass.cor[2].y+20/2,20/2); if(cp==2) { fillcircle(poigrass.cor[3].x+20/2,poigrass.cor[3].y+20/2,20/2); fillcircle(poigrass.cor[4].x+20/2,poigrass.cor[4].y+20/2,20/2); } if(cp==3) { fillcircle(poigrass.cor[3].x+20/2,poigrass.cor[3].y+20/2,20/2); fillcircle(poigrass.cor[4].x+20/2,poigrass.cor[4].y+20/2,20/2); fillcircle(poigrass.cor[5].x+20/2,poigrass.cor[5].y+20/2,20/2); fillcircle(poigrass.cor[6].x+20/2,poigrass.cor[6].y+20/2,20/2); } }
inline void LifeGamev2::render() { static Grayscale scale; for (unsigned y = 0; y < ROW; ++y) for (unsigned x = 0; x < COL; ++x) { scale = (*puniverse)[y][x]; setfillcolor(EGERGB(scale, scale, scale)); bar(12 * x, 12 * y, 12 * x + 12, 12 * y + 12); // (xl, yt, xr, yb); } setcolor(EGERGB(0x0, 0xFF, 0xFF)); setfontbkcolor(EGERGB(0x00, 0x00, 0x00)); setfont(FONT_SIZE, 0, "Consolas"); std::string fps = "current fps: " + std::to_string(SPEED); fps += " step: " + std::to_string(STEP); fps += " powered by Chen Ji :)"; outtextxy(0, 12 * ROW, fps.c_str()); }
void snake_move() { node=1; setfillcolor(BLACK); setcolor(BLACK); bar(p0->x,p0->y,p0->x+20,p0->y+20); while(p0->previous!=NULL) { p0->x=p0->previous->x; p0->y=p0->previous->y; p0=p0->previous; node++; } switch(direct) { case 1:head->y-=20;break; case 2:head->y+=20;break; case 3:head->x-=20;break; case 4:head->x+=20;break; } }
int main() { initgraph(640, 480); //第一次设置背景色 setbkcolor(EGERGB(0x0, 0x40, 0x0)); //浅绿色 setcolor(EGERGB(0xFF, 0xFF, 0x0)); setfillcolor(EGERGB(0xFF, 0x0, 0x80)); //画带填充的扇形 sector(200, 200, 45, 135, 150, 100); getch(); //按下一任意键后,再次改变背景色 setbkcolor(EGERGB(0x0, 0x0, 0x40)); //浅蓝色 getch(); closegraph(); return 0; }