亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 函數實現動畫的技巧.txt

?? c語言的常用函數以及一些小游戲代碼,如文曲星小游戲、五子棋游戲等
?? TXT
?? 第 1 頁 / 共 2 頁
字號:

 9.1.8 用putimage 函數實現動畫的技巧
9.2 菜單設計技術
    9.2.1 下拉式菜單的設計
    9.2.2 選擇式菜單的設計
    9.2.3 實現陰影窗口的技巧
9.3 音響技巧
    9.3.1 音樂程序設計 
    9.3.2 自動識譜音樂程序   
    9.3.3 實現后臺演奏音樂的技巧
    

 
 
9.1.7 用隨機函數實現動畫的技巧
    在一些特殊的C語言動畫技術中,可以利用隨機函數int random(int num ) 取一個0~num范圍內的隨機數,經過某種運算后,再利用C 語言的作圖語句產生各種大小不同的圖形,也能產生很強的移動感。
    程序dh1.c就是利用隨機函數來產生動畫應用。該程序運行后,屏幕中間繪出一臺微型計算機,微機下方同時顯示“computer”的放大字形,在畫出微機的小屏幕內,產生各種大小不同、顏色各異的矩形,這些矩形互相覆蓋,給人以極強的動畫感。
    程序中改變x1、x2、y1、y2的值,能將圖形移動屏幕的任何位置,改變x、y的值,能將圖形放大或縮小。

[例9-7] 動畫顯示程序DH1.C
#include<conio.h>
#inclu]de<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<time.h>
#define X1 260
#define X2 320
#define y1 140
#define y2 180
#define Xy 16
int gdrive,gmode,mcolor,ecode;
struct palettetype palette;
void initialize(void);
void rbars(void);
int main( )
{
    initialize( ); /*初始化圖形系統*/
    /* 顯示放大字體*/
    setcolor(YELLOW);
    settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
    settextjustify(CENTER_TEXT,CENTER_TEXT);
    outtextxy((getmaXX( )/2-17),360,"COMPUTER");
    rbars( ); /* 主程序*/
    closegraph( )/*關閉圖形系統*/
    return 1;
}
void initialize(void)
{
    gdrive=DETECT;
    initgraph (&gdrive,&gmode," ");
    ecode=graphresult( );
    if(ecode!=0)
    {
        printf("Graphice Error: %d\n",grapherrormsg(ecode));
        eXit(1);
    }
    getpalette(&palette);
    mcolor=getmaXcolor( )+1;
}
void rbars(void)
{
    int color; /* 畫計算機圖形*/
    setcolor(DARKGRAY);
    bar3d(X1-20,y1-20,X2+56,y2+70,0,3);
    setfillstyle(CLOSE_DOT_FILL,BLUE);
    setfillstyle(SOLID_FILL,RED);
    circle(X2+28,y2+60,4);
    bar(X1+4,y1+78,X1+20,y1+83);
    setcolor(MAGENTA);
    circle(X2+28,y2+60,4);
    circle(X2+16,y2+60,4);
    circle(X2+4,y2+60,4);
    setcolor(WHITE);
    setfillstyle(SOLID_FILL,DARKGRAY);
    bar3d(X1-60,y1+120,X1+154,y1+170,0,2);
    bar3d(X1+120,y1+126,X1+100,y1+164,0,2);
    line (X1+20,y1+145,X1+100,y1+145);
    setfillstyle(SOLID_FILL,GREEN);
    bar(X1+26,y1+130,X1+34,y1+132);
    bar(X1+26,y1+150,X1+34,y1+152);
    setfillstyle(WIDE_DOT_FILL,RED);
    bar(X1-24,y1+128,X1-44,y1+142);
    /*利用隨機函數實現矩形畫面互相覆蓋,產生動感*/
    while(!kbhit( ))
    {
        color=random(mcolor-1)+1;
        setcolor(color);
        setfillstyle(random(11)+1,color);
        bar3d(X1+random(getmaXX( )/Xy),y1+random(getmaXy( )/Xy),X2+getmaXX( )/Xy,y2+getmaXy( )/Xy,0,5 );
    }
}

9.1.8 用putimage 函數實現動畫的技巧
    計算機圖形動畫顯示的是由一系列靜止圖像在不同位置上的重現。計算機圖形動畫技術一般分為畫擦法和覆蓋刷新法兩大類。畫擦法是先畫T時刻的圖形,然后在T +△T時刻把它擦掉,改畫新時刻的圖形是由點、線、圓等基本圖元組成。這種一畫一擦的方法對于實現簡單圖形的動態顯示是比較有效的。而當需要顯示比較復雜的圖形時,由于畫擦圖形時間相對較長,致使畫面在移動時出現局部閃爍現象,使得動畫視覺效果變差。所以,為提高圖形的動態顯示效果,在顯示比較復雜的圖形時多采用覆蓋刷新的方法。
    在Turbo C 的圖形函數中,有幾個函數可完成動畫的顯示:
    getimage(int left,int top,int right,int bottom,void far*buf) 函數把屏幕圖形部分拷貝到由buf所指向的內存區域。
    imagesize() 函數用來確定存儲圖形所需的字節數,所定義的字節數根據實際需要可以定義得多一些。
    putimage( )函數可以把getimage( )存儲的圖形重寫在屏幕上。利用putimage( )函數中的COPY_PUT項,在下一個要顯示的位置上于屏幕中重寫圖像,如此重復、交替地顯示下去,即可達到覆蓋刷新的目的,從而實現動畫顯示。由于圖形是一次性覆蓋到顯示區的,并在瞬間完成,其動態特性十分平滑,動畫效果較好。

    程序dh2.c就是根據上述思路而實現的。程序運行時,將在屏幕上出現一個跳動的紅色小球。
[例9-8] 動畫顯示程序dh2.c
#include <stdio.h>
#include<graphics.h>
#include<alloc.h>
#include<conio.h>
void main(void)
{
    int driver=DETECT,mode;
    int k=0,i,m,m1;
    int maXX,mayy,size;
    char *buf;
    initgraph(&driver,&mode," ");
    maXX=getmaXX( );
    mayy=getmaXy( );
    setfillstyle(SOLID_FILL,LIGHTGRAY);
    bar(1,1,maXX,mayy);
    setcolor(RED);
    for(i=0;i<=10;i++)
    circle(150,150,i);
    size=imagesize(100,100,250,200);
    if(size != -1)
        buf=malloc(size);
    if(buf)
    {
        getimage(100,100,250,200,buf);
        m=120;m1=m;
        do{
            k=k+1;
            if((m1+100)>mayy)
            {
                for(m=m+30;m<maXX;m=m+30)
                {
                    m1=m1-20;
                    putimage(m,m1,buf,COPY_PUT);
                }
            }
            if((m+100)>maXX)
            {
                m=m-100;
                for(m1=m1+100;m1>=1;m1=m1-10)
                {
                    m1=m1-19;
                    putimage(m,m1,buf,COPY_PUT);
                }
                for(m=m;m>1;m=m-30)
                {
                    m1=m1-17;
                    putimage(m,m1,buf,COPY_PUT);
                }
            }
            m1=m1+20;
            m=m+20;
            putimage(m,m1,buf,COPY_PUT);
        }while(k!=1000);
        getch( );
    }
    restorecrtmode( );
}

9.2 菜單設計技術
    菜單在用戶編寫的程序中占據相當一部分內容。設計一個高質量的菜單,不僅能使系統美觀,更主要的是能夠使操作者使用方便,避免一些誤操作帶來的嚴重后果。

9.2.1 下拉式菜單的設計
    下拉式菜單是一個窗口菜單,它具有一個主菜單,其中包括幾個選擇項,主菜單的每一項又可以分為下一級菜單,這樣逐級下分,用一個個窗口的形式彈出在屏幕上,一旦操作完畢又可以從屏幕上消失,并恢復原來的屏幕狀態。
    設計下拉式菜單的關鍵就是在下級菜單窗口彈出之前,要將被該窗口占用的屏幕區域保存起來,然后產生這一級菜單窗口,并可用光標鍵選擇菜單中各項,用回車鍵來確認。如果某選擇項還有下級菜單,則按同樣的方法再產生下一級菜單窗口。
    用Turbo C 在文本方式時提供的函數gettext( ) 來放屏幕規定區域的內容,當需要時用puttext( )函數釋放出來,再加上鍵盤管理函數bioskey( ),就可以完成下拉式菜單的設計。
    程序menu1.c是一個簡單拉式菜單。運行時在屏幕上一行顯示主菜單的內容,當按ALT+F則進入File子菜單,然后可用光標鍵移動色棒選擇操作,用回車確認。用Esc鍵退出主菜單,并可用ALT+X退出菜單系統。

[例9-9] 下拉式菜單menu1.c
/*下拉式菜單menu1.c*/
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<bios.h>
void main(void)
{
    int i,key,key0,key1,y,test;
    char *m[ ]={"File","Edit","Run","Compile","Projsct","Options","Debug","Break/watch "}; /*定義主菜單的內容*/
    char *f[ ]={"Load F3", /* 定義FILE 子菜單的內容*/
    "Pick ALT+F3",
    "New",
    "Save F2",
    "Write to",
    "Directory",
    "Change dir",
    "Os shell",
    "Quit ALT+X"};
    char buf[16*10*2],buf1[16*2]; /* 定義保存屏幕區域的數組變量*/
    textbackground(BLUE); /* 設置文本屏幕背景色*/
    clrscr( ); /* 屏幕背徑著色*/
    window(1,1,80,1); /* 定義一個文本窗口*/
    textbackground(WHITE); /*設置窗口背景色*/
    textcolor(BLACK);
    clrscr( );
    window(1,1,80,2);
    for(i=0;i<8;i++)
        cprintf("%s",m[i]); /*顯示主菜單的內容*/
    while(1)
    {
        key=0;
        while(bioskey(1) == 0); /*等待鍵盤輸入*/
            key = bioskey(0); /*取鍵盤輸入碼*/
        key = key&0Xff? 0:key>>8; /*只取擴充鍵碼*/
        if(key == 45) eXit(0); /*如果按ALT+X 鍵則退出*/
            if(key == 33) /* 如果按ALT+F 則顯示子菜單*/
            {
                textbackground(BLACK);
                textcolor (WHITE);
                gotoxy(4,1);
                cprintf("%s",m[0]);
                gettext(4,2,19,11,buf);/*保存窗口區域的在原有內容*/
                window(4,2,19,11);
                textbackground(WHITE);
                textcolor(BLACK);
                clrscr( );
                window(4,2,19,12);
                gotoxy(1,1); /*作一個單線形邊框*/
                putch(0xff);
                for(i=2;i<10;i++)
                {
                    gotoxy(1,i); putch(0×b3);
                    gotoxy(16,i); putch(0×b3);
                }
                gotoxy(1,10);
                putch(0Xc0);
                for(i=2;i<16;i++)
                    putch(0Xc4);
                putch(0Xd9);
                for(i=2;i<10;i++)
                {
                    gotoxy(2,i);
                    cprintf("%s",f[i-1]);
                }
                gettext(2,2,18,3,buf1);
                textbackground(BLACK);
                textcolor(WHITE);
                gotoxy(2,2);
                cprintf("%s",f[0]);
                y=2;
                key1=0;
                while((key0!=27)&&(key1!=45)&&(key0!=13))
                {/*輸入為ALT+X,回車或ESC 鍵退出循環*/
                    while(bioskey(1)==0); /*等待鍵盤輸入*/
                        key0=key1=bioskey(0); / *取鍵盤輸入碼* /
                        key0=key0&0Xff; / *只取擴充碼* /
                        key1=key1&0Xff? 0:key1>>8;
                        if(key1==72||key1==80) /*如果為上下箭頭鍵*/
                        {
                            puttext(2,y,18,y+1,buf1); /*恢復原來的信息*/
                            if(key1==72) y=y==2? 9:y-1; /*上箭頭處理*/
                                if(key1==80) y=y==9? 2:y+1; /*下箭頭處理*/
                                    getteXt(2,y,18,y+1,buf1); /*保存新色棒前產生這一位置屏幕內容*/
                            textbackground(BLACK); /*產生新色棒*/
                            textcolor(WHITE);
                            gotoxy(2,y);
                            cprintf("%s",f[y-1]);
                        }
                    }
                    if(key1 == 45) eXit(0); /*按ALT+X 退出*/
                        if(key0 == 13) /*回車按所選菜單項進行處理*/
                        {
                            switch(y)
                            {
                                case 1:
                                    break;
                                case 2:
                                    break;
                                case 9:
                                    eXit(0);
                                default:
                                    break;
                            }
            }
            else /*按E S C 鍵返回主菜單*/
            {
                window(1,1,80,2);
                puttext(4,2,19,11,buf); /*釋放子菜單窗口占據的屏幕原來內容*/
                textbackground(WHITE);
                textcolor(BLACK);
                gotoxy(4,1);
                cprintf("%s",m[0]);
            }
        }
    }
}

9.2.2 選擇式菜單的設計
    所謂選擇式菜單,就是在屏幕上出現一個菜單,操作者可根據菜單上所提供的數字或字母按相應的鍵去執行特定的程序,當程序執行完后又回到主菜單上。
    這種菜單編制簡單,操作方便,使用靈活,尤其適用于大型管理程序。如果在自動批處理文件上加入這種菜單后,操作者可根據菜單上的提示,進行相應的操作,這樣可以簡化許多步驟,對一般微機用戶來說是比較適合的。

[例9-10] 選擇式菜單程序menu2.c
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
main( )
{
    char ch;
    int i;
    do {
        system("cls");
        printf("\n\t1. into Turbo C ");
        printf("\n\t2. into Windows" );
        printf("\n\t3. into Wps");
        printf("\n\t4. into Dbase") ;
        printf("\n\t0. Quit \n\n");
        printf("\t Please select:");
        ch=getch( );
        switch(ch)
        {
            case '1': system("tc");break;
            case '2': system("win");break;
            case '3': system("wps");break;
            case '4': system("dbase");break;
            case '0': system("cls");eXit(1);
            default:
                printf("\n\t*** wrong !!! ***\n");
                for (i=0;i<600;i++);
                { ; }
        }
    }
    while(1);
}

9.2.3 實現陰影窗口的技巧
    目前,許多應用軟件都采用了輸出窗口技術,有的甚至使用了帶有陰影的輸出窗口。這種技術給人們以新鮮醒目的感覺,可達到事半功倍的作用。
    程序menu3.c是一個陰影窗口的例子。其中用到兩個自編函數,一個是建立窗口函數set_win( ),另一個是建立帶有陰影部分的窗口函數set_bkwin( )。這兩個函數需要傳遞以下幾個參數:
    int X1,y1,X2,y2,b,bc,tc
    char *head
    其中:x1、y1、x2、y2決定了窗口邊框大小, b用來選擇窗口的類型;當b = 0時,無邊框,當b =1時,單線邊框,當b = 2時,上下邊框為雙線,左右邊框為單線,當b = 3時,雙線邊框,當b = 4時,上下邊框為單線,左右邊框為雙線;參數b c用來決定窗口的背景顏色,其范圍為0 ~ 7;參數t c決定窗口內字符的顏色,其范圍為0 ~ 15; 參數head為窗口名稱。
    在文本狀態下,一個字符在屏幕緩沖區內要占用2個字節來存儲。且字符內容在前屬性在后,順序存儲。所謂屬性,就是字符的背景顏色和字符顏色,我們可以通過改變其屬性字節,來實現窗口的陰影。

[例9 - 11] 陰影窗口程序menu3.c
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define screen (*screen_ptr)
typedef struct texel_struct
{
    unsigned char attr;
}teXel;
typedef texel screen_array[25][80];
screen_array far *screen_ptr = (screen_array far *) 0Xb800;
void set_win( int X1,int y1, int X2,int y2,int b,int bc, int tc,char *head);
void set_bkwin(int X1,int y1,int X2,int y2,int b,int bc,int tc,char *head);
void main(void )
{
    set_bkwin(1,2,25,18,2,2,1,"window");
    getch();
}
void set_bkwin(X1,y1,X2,y2,b,bc,tc,head)
int X1, y1, X2, y2, b, bc, tc;
char *head;
{
    int i, j;
    for(i=X1+1;i<X2+2;i++)
    {
        for(j=y2;j<y2+1;j++)
        screen[j][i].attr=8;
    }
    for(i=X2+1;i<X2+2;i++)
    {
        for(j=y1;j<y2+1;j++)
            screen[j][i].attr=8;
    }
    set_win(X1,y1,X2,y2,b,bc,tc,head);
}
void set_win(X1,y1,X2,y2,b,bc,tc,head)
int X1,y1,X2,y2,b,bc,tc;
char *head;
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线观看视频在线观看| 在线观看不卡一区| 亚洲成人一二三| 综合久久国产九一剧情麻豆| 国产婷婷一区二区| 亚洲精品在线电影| 欧美成人乱码一区二区三区| 欧美日韩国产综合一区二区| 色视频成人在线观看免| 91免费视频网址| 色综合久久久网| 色哟哟一区二区三区| 色综合天天综合狠狠| 欧美日韩亚洲综合| 91天堂素人约啪| 日本高清免费不卡视频| 色狠狠综合天天综合综合| 91视频国产资源| 在线免费观看日韩欧美| 欧美三级电影网| 欧美精品tushy高清| 日韩三级在线免费观看| 欧美一区二区三区啪啪| 日韩欧美一区二区三区在线| 欧美电影免费观看完整版| 精品人伦一区二区色婷婷| 精品国产凹凸成av人网站| 欧美一区二区三区在线视频| 精品少妇一区二区三区 | 2021中文字幕一区亚洲| 欧美va亚洲va| 国产三级久久久| 亚洲日本青草视频在线怡红院| 亚洲主播在线观看| 蜜桃av噜噜一区| 国产精品18久久久久久久久| 波多野结衣视频一区| 欧美午夜精品一区| 日韩免费视频一区| 国产精品国产馆在线真实露脸| 一个色综合av| 久久国内精品视频| 成人av资源下载| 欧美日韩国产在线观看| 久久亚洲一区二区三区明星换脸 | 亚洲人123区| 日本视频在线一区| www.在线成人| 日韩免费视频线观看| 亚洲人精品午夜| 国产一区啦啦啦在线观看| 91丨porny丨中文| 精品欧美一区二区三区精品久久 | 亚洲超碰精品一区二区| 国产在线国偷精品产拍免费yy| 色综合天天综合网国产成人综合天| 91精品国产色综合久久不卡蜜臀 | 久久久久久免费毛片精品| 亚洲精品国产品国语在线app| 另类调教123区| 91行情网站电视在线观看高清版| 精品久久久久久久人人人人传媒| 亚洲男人都懂的| 国产成人福利片| 日韩小视频在线观看专区| 亚洲欧美日韩电影| www.性欧美| 亚洲国产成人午夜在线一区| 美腿丝袜亚洲一区| 欧美日韩精品福利| 一个色综合网站| 99久久99久久免费精品蜜臀| 欧美电视剧在线观看完整版| 亚洲国产一区二区a毛片| 成人免费黄色大片| 国产欧美精品区一区二区三区 | 亚洲国产日韩一区二区| 91小视频免费观看| 国产精品日产欧美久久久久| 久久超碰97中文字幕| 欧美妇女性影城| 亚洲成av人片在线| 欧美无乱码久久久免费午夜一区 | 丰满岳乱妇一区二区三区| 日韩精品一区二区三区在线观看 | 欧美一区二区三区视频在线| 亚洲一区二区三区四区五区黄| 99久久精品国产导航| 国产精品久久久久久久久搜平片 | 国产乱一区二区| 精品国产91亚洲一区二区三区婷婷 | 亚洲日本成人在线观看| 成人手机电影网| 国产精品超碰97尤物18| a美女胸又www黄视频久久| 日韩一区在线免费观看| av成人免费在线| 亚洲精品免费一二三区| 色悠久久久久综合欧美99| 一区二区三区在线观看视频| 91久久精品网| 亚洲成人手机在线| 91精品国产色综合久久不卡电影| 日本系列欧美系列| 精品国产制服丝袜高跟| 国产一区二区毛片| 国产精品国产三级国产普通话99| 99热精品一区二区| 亚洲国产毛片aaaaa无费看 | 日韩电影网1区2区| 精品国产1区2区3区| 国产精品系列在线播放| 亚洲欧美日韩国产手机在线| 欧美狂野另类xxxxoooo| 韩国精品主播一区二区在线观看| 久久久无码精品亚洲日韩按摩| 成人精品视频一区| 亚洲国产日韩精品| 久久综合久久99| 91性感美女视频| 蜜芽一区二区三区| 国产精品剧情在线亚洲| 欧美网站大全在线观看| 紧缚捆绑精品一区二区| 综合激情成人伊人| 91精品国产色综合久久ai换脸 | 麻豆免费精品视频| 亚洲欧洲日产国码二区| 欧美色图免费看| 国产又黄又大久久| 亚洲国产精品久久一线不卡| 久久影院午夜片一区| 91亚洲国产成人精品一区二区三| 日本视频一区二区三区| 中文字幕在线免费不卡| 日韩欧美国产三级| 91福利在线导航| 国产a久久麻豆| 美女看a上一区| 中文字幕视频一区二区三区久| 欧美欧美午夜aⅴ在线观看| 丰满少妇久久久久久久| 日产国产欧美视频一区精品| 日韩理论片网站| 久久婷婷综合激情| 91精品国产综合久久香蕉麻豆| 成人h版在线观看| 国产综合成人久久大片91| 亚洲国产精品综合小说图片区| 国产午夜精品久久久久久免费视| 欧美日韩精品一区二区三区蜜桃| 成人免费视频一区二区| 久久超碰97中文字幕| 日韩精品一二三四| 一级做a爱片久久| 亚洲精选一二三| 国产精品免费视频观看| 26uuu国产日韩综合| 日韩午夜电影在线观看| 欧美日韩国产综合草草| 在线一区二区三区四区五区| 白白色 亚洲乱淫| 成人免费三级在线| 成人性视频网站| 国产suv精品一区二区883| 精品亚洲aⅴ乱码一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 亚洲综合清纯丝袜自拍| 亚洲免费大片在线观看| 亚洲免费观看高清完整| 亚洲自拍另类综合| 亚洲一级电影视频| 亚洲成在人线在线播放| 亚洲成人动漫精品| 日韩中文字幕区一区有砖一区| 亚洲综合色自拍一区| 亚洲福利视频一区二区| 亚洲gay无套男同| 午夜成人免费电影| 免费在线观看视频一区| 免费av成人在线| 久久91精品久久久久久秒播| 久久99精品久久久久久| 国产一区二区三区四区五区美女| 九九热在线视频观看这里只有精品| 捆绑调教一区二区三区| 黑人巨大精品欧美一区| 韩国av一区二区三区在线观看| 国产伦精一区二区三区| 成人黄页在线观看| 在线日韩av片| 日韩小视频在线观看专区| 久久欧美中文字幕| 亚洲人123区| 天堂va蜜桃一区二区三区 | 日韩欧美不卡在线观看视频| 欧美成人在线直播| 中文字幕免费不卡| 亚洲国产精品精华液网站| 免费观看一级特黄欧美大片|