日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在我們的日常生活中,雨水是我們經(jīng)常遇到的一種自然現(xiàn)象。有時候,我們會在雨中漫步,欣賞那美麗的雨景。然而,在計算機世界里,我們?nèi)绾斡么a來模擬這種美麗的雨景呢?本文將通過一個簡單的windows控制臺程序,來展示如何實現(xiàn)一個模擬雨水下落的效果。

C語言代碼:數(shù)字雨

代碼概覽

本程序主要使用了Windows API和C語言。通過定義一個RAINDROP結(jié)構(gòu)體來表示雨滴,并使用數(shù)組來存儲一定數(shù)量的雨滴。程序的主要邏輯在main函數(shù)中實現(xiàn),包括初始化控制臺信息、隨機設置雨滴初始位置和內(nèi)容、實現(xiàn)雨滴下落過程、以及控制雨滴下落速度等。

關鍵技術點

  • 結(jié)構(gòu)體使用:通過定義RAINDROP結(jié)構(gòu)體來存儲雨滴的x、y坐標和字符內(nèi)容,便于后續(xù)對雨滴的操控。
  • 光標控制:使用SetConsoleCursorPosition函數(shù)來控制光標位置,實現(xiàn)雨滴的顯示和移動。
  • 顏色設置:使用SetConsoleTextAttribute函數(shù)來設置文本顏色,使雨滴呈現(xiàn)綠色。
  • 時間隨機性:利用rand()函數(shù)生成隨機數(shù),控制雨滴的位置和下落速度。
  • 動畫效果:通過定時器或Sleep函數(shù)實現(xiàn)時間的延遲,使雨滴呈現(xiàn)連續(xù)下落的效果。

詳細實現(xiàn)

(1) 定義結(jié)構(gòu)體:

typedef struct  
{  
    int x, y;  
    char ch;  
} RAINDROP;

 

定義了一個名為RAINDROP的結(jié)構(gòu)體,用于存儲每個雨滴的x、y坐標和字符內(nèi)容。

(2) 初始化控制臺信息

在main函數(shù)中,首先獲取控制臺的寬度和高度,為后續(xù)的雨滴下落提供參考。

RAINDROP raindropLine[BUFFER_SIZE];
HANDLE HOUT = GetStdHandle(STD_OUTPUT_HANDLE);

(3) 隨機設置雨滴初始位置和內(nèi)容

使用rand()函數(shù)隨機生成雨滴的初始位置和內(nèi)容。例如:raindropLine[i].x = rand() % WIDTH;。

(4) 雨滴下落過程的實現(xiàn)

在主循環(huán)中,不斷更新雨滴的位置,并利用光標控制和顏色設置來顯示雨滴。例如:gotoxy(raindropLine[i].x, raindropLine[i].y); set_color(FOREGROUND_GREEN); putchar(raindropLine[i].ch);。同時,當雨滴下落過快時,重新設置其位置,使其重新開始下落。例如:if (raindropLine[i].y > HEIGHT + RAIN_LENGTH) raindropLine[i].x = rand() % WIDTH; raindropLine[i].y = rand() % HEIGHT;。

(5) 控制雨滴下落速度

通過Sleep(50)函數(shù)實現(xiàn)時間的延遲,使雨滴呈現(xiàn)連續(xù)下落的效果。同時,根據(jù)不同的顯示分辨率調(diào)整雨滴的大小和下落速度。

(6) 高亮顯示雨滴

為了使雨滴更顯眼,使用FOREGROUND_GREEN|FOREGROUND_INTENSITY來設置高亮顏色。例如:set_color(FOREGROUND_GREEN|FOREGROUND_INTENSITY); putchar(raindropLine[i].ch);。

(7) 程序結(jié)束

在主循環(huán)結(jié)束后返回0,表示程序正常退出。例如:return 0;。

(8) 性能與優(yōu)化

本程序的性能主要受到控制臺刷新率和顯示分辨率的影響。為了提高程序的性能表現(xiàn),可以嘗試以下優(yōu)化措施:使用雙緩沖技術減少屏幕刷新的次數(shù);根據(jù)不同的顯示分辨率調(diào)整雨滴的大小和下落速度;優(yōu)化代碼邏輯和數(shù)據(jù)結(jié)構(gòu)等。 

效果展示:

C語言代碼:數(shù)字雨

完整代碼:

#include <time.h>
#include <Windows.h>
#include <stdio.h>

const int BUFFER_SIZE = 100;
const int RAIN_LENGTH = 18;

typedef struct
{
    int x, y;
    char ch;
} RAINDROP;

RAINDROP raindropLine[BUFFER_SIZE];
HANDLE HOUT = GetStdHandle(STD_OUTPUT_HANDLE);

void gotoxy(int x, int y)
{
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(HOUT, pos);
}

void set_color(word wAttributes)
{
    SetConsoleTextAttribute(HOUT, wAttributes);
}

int main()
{
    CONSOLE_SCREEN_BUFFER_INFO info;
    GetConsoleScreenBufferInfo(HOUT, &info);
    int HEIGHT = info.srWindow.Bottom;
    int WIDTH = info.srWindow.Right;
    srand((unsigned int)time(NULL)); // 使用當前時間作為隨機數(shù)種子  
    for (int i = 0; i < BUFFER_SIZE; i++) // 隨機設置雨滴下落的位置和內(nèi)容  
    {
        raindropLine[i].x = rand() % WIDTH; // 設置x坐標為隨機數(shù)  
        raindropLine[i].y = rand() % HEIGHT; // 設置y坐標為隨機數(shù)  
        raindropLine[i].ch = rand() % 2 + 48; // 設置雨滴內(nèi)容為0或1的隨機數(shù),ASCII碼48起為數(shù)字字符  
    }
    while (true)
    {
        for (int i = 0; i < BUFFER_SIZE; ++i)
        {
            if (raindropLine[i].y <= HEIGHT)
            {
                gotoxy(raindropLine[i].x, raindropLine[i].y);
                set_color(FOREGROUND_GREEN); // 設置雨滴顏色為綠色  
                putchar(raindropLine[i].ch); // 顯示雨滴內(nèi)容  
            }
            gotoxy(raindropLine[i].x, raindropLine[i].y - RAIN_LENGTH); // 擦除過長的雨滴,將光標移動到上一行位置  
            putchar(' '); // 在當前位置填充空白,為雨滴留出空間  
            raindropLine[i].y++; // 雨滴下落一行,增加y坐標值  
            raindropLine[i].ch = rand() % 2 + 48; // 重新生成隨機數(shù)作為雨滴內(nèi)容,生成0或1的隨機數(shù)(ASCII碼48起為數(shù)字字符)  
            if (raindropLine[i].y > HEIGHT + RAIN_LENGTH) // 如果雨滴下落過快,重新設置其位置,將y坐標設置為窗口頂部附近的位置(HEIGHT+RAIN_LENGTH)附近的值)                   
            {
                raindropLine[i].x = rand() % WIDTH; // 在窗口內(nèi)隨機設置新的x坐標值,讓雨滴重新開始下落位置的隨機分配過程 
                raindropLine[i].y = rand() % HEIGHT; // 在窗口內(nèi)隨機設置新的y坐標值,讓雨滴重新開始下落位置的隨機分配過程
                                                     // 如果雨滴位置仍然在窗口內(nèi),高亮顯示,增加亮度                 
                gotoxy(raindropLine[i].x, raindropLine[i].y);
                set_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY); // 高亮顯示,增加亮度                
                putchar(raindropLine[i].ch);
            }
            if (raindropLine[i].y <= HEIGHT) // 如果雨滴位置仍然在窗口內(nèi),高亮顯示,增加亮度            
            {
                gotoxy(raindropLine[i].x, raindropLine[i].y);
                set_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY); // 高亮顯示,增加亮度               
                putchar(raindropLine[i].ch);
            }
        }
        Sleep(50); // 暫停一段時間,以控制動畫的速度,這里設置為50毫秒   
                 
    }
    return 0; // 程序結(jié)束,返回0表示正常退出程序  
}

分享到:
標簽:語言
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定