2011-12-24 21 views
1

私はastrics「*」を使用してクリスマスツリーを描こうとしていますが、やがて私は1つを描くことができました。cprintfの代替手段はありますか?

問題は、textattr(130)を使用して色付けしたときです。「この色は緑色で点滅しています」& cprintf関数がツリー全体に散在していました。

私はcprintfの効果を見るために縦線を引いた。

私はcprintf以外の方法でも構いません。私は、ツリーが正しく表示されることを願っています。

私のコードは次のとおりです。

#include<stdio.h> 
#include<conio.h> 

int main() 
{ 
    clrscr(); 


    textattr(130); 
    cprintf("*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*" 
     "\n*"); 

    cprintf(
"\n              *" 
"\n              * *" 
"\n             * *" 
"\n             *  *" 
"\n             *  *" 
"\n             ** **" 
"\n             *  *" 
"\n             *   *" 
"\n            *   *" 
"\n             **  **" 
"\n             *  *" 
"\n             *  *" 
"\n             *   *" 
"\n            *   *" 
"\n            ****** ******" 
"\n              * *" 
"\n              * *" 
"\n              * *" 
"\n              * *" 
"\n              ***"); 









getch(); 
return 0; 
} 

私は、誰かがこれで私を助けしたいと思います願っています。

+1

代わりにCursesがあります。 –

+0

またはVT100エスケープコードを直接使用してください。 –

答えて

2

私はあなたのプログラムを取ってthisを参照し、以下のプログラムを考え出しました。

#include <stdio.h> 

#define RESET  0 
#define BRIGHT  1 
#define DIM   2 
#define UNDERLINE 3 
#define BLINK  4 
#define REVERSE  7 
#define HIDDEN  8 

#define BLACK  0 
#define RED   1 
#define GREEN  2 
#define YELLOW  3 
#define BLUE  4 
#define MAGENTA  5 
#define CYAN  6 
#define WHITE  7 

void textcolor(int attr, int fg, int bg); 
void reset_screen(void); 
void print_tree(void); 

int main() 
{ 
    textcolor(BRIGHT, RED, BLACK); 
    print_tree(); 
    getchar(); 
    reset_screen(); 
    return 0; 
} 

void textcolor(int attr, int fg, int bg) 
{ 
    char command[13]; 
    sprintf(command, "%c[%d;%d;%dm", 0x1B, attr, fg + 30, bg + 40); 
    printf("%s", command); 
} 

void reset_screen(void) 
{ 
    system("reset"); 
    return; 
} 

void print_tree(void) 
{ 
    printf("        \n"); 
    printf("        \n"); 
    printf("    *    \n"); 
    printf("    *    \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("   *  *    \n"); 
    printf("   *  *   \n"); 
    printf("   ** **    \n"); 
    printf("   *  *   \n"); 
    printf("   *   *   \n"); 
    printf("   *   *   \n"); 
    printf("   **  **   \n"); 
    printf("   *  *   \n"); 
    printf("   *  *   \n"); 
    printf("   *   *   \n"); 
    printf("   *   *   \n"); 
    printf("  ****** ******   \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("    * *    \n"); 
    printf("        \n"); 
    printf("        \n"); 
    printf("        \n"); 
    printf(" M E R R Y C H R I S T M A S \n"); 
    printf("        \n"); 
    printf("        \n"); 

    return; 
} 

メリークリスマス!!

+0

ありがとう非常にありがとう メリークリスマス – ALAA

+0

@ALAA上記の投稿があなたの質問に答えたと思う場合は、同じことを確認するためにチェックマークをクリックしてください。ありがとう!! –

0

テキストの色を変更するには、setcolor()関数を使用できます。次のサンプルプログラムは、その使用方法を説明しています。

#include <graphics.h> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <conio.h> 

int main(void) 
{ 
/* request auto detection */ 
    int gdriver = DETECT, gmode, errorcode; 
    int color, midx, midy; 
    char colname[35]; 

/* initialize graphics and local variables */ 
    initgraph(&gdriver, &gmode, ""); 

/* read result of initialization */ 
    errorcode = graphresult(); 
/* an error occurred */ 
    if (errorcode != grOk) 
    { 
     printf("Graphics error: %s\n", grapherrormsg(errorcode)); 
     printf("Press any key to halt:"); 
     getch(); 
/* terminate with an error code */ 
     exit(1); 
    } 

    midx = getmaxx()/2; 
    midy = getmaxy()/2; 
    setcolor(getmaxcolor()); 

/* for centering text on the display */ 
    settextjustify(CENTER_TEXT, CENTER_TEXT); 

/* get the current drawing color */ 
    color = getcolor(); 

/* convert color value into a string */ 
    itoa(color, colname, 10); 
    strcat(colname, " is the current drawing color."); 

/* display a message */ 
    outtextxy(midx, midy, colname); 

/* clean up */ 
    getch(); 
    closegraph(); 
    return 0; 
} 
関連する問題