成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
本文將通過(guò)一個(gè)簡(jiǎn)單的Windows控制臺(tái)程序,來(lái)展示如何實(shí)現(xiàn)一個(gè)模擬雨水下落的效果。

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

代碼概覽

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

關(guān)鍵技術(shù)點(diǎn)

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

詳細(xì)實(shí)現(xiàn)

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

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

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

(2) 初始化控制臺(tái)信息

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

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

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

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

(4) 雨滴下落過(guò)程的實(shí)現(xiàn)

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

(5) 控制雨滴下落速度

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

(6) 高亮顯示雨滴

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

(7) 程序結(jié)束

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

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

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

效果展示:

完整代碼:

#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)); // 使用當(dāng)前時(shí)間作為隨機(jī)數(shù)種子  
    for (int i = 0; i < BUFFER_SIZE; i++) // 隨機(jī)設(shè)置雨滴下落的位置和內(nèi)容  
    {
        raindropLine[i].x = rand() % WIDTH; // 設(shè)置x坐標(biāo)為隨機(jī)數(shù)  
        raindropLine[i].y = rand() % HEIGHT; // 設(shè)置y坐標(biāo)為隨機(jī)數(shù)  
        raindropLine[i].ch = rand() % 2 + 48; // 設(shè)置雨滴內(nèi)容為0或1的隨機(jī)數(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); // 設(shè)置雨滴顏色為綠色  
                putchar(raindropLine[i].ch); // 顯示雨滴內(nèi)容  
            }
            gotoxy(raindropLine[i].x, raindropLine[i].y - RAIN_LENGTH); // 擦除過(guò)長(zhǎng)的雨滴,將光標(biāo)移動(dòng)到上一行位置  
            putchar(' '); // 在當(dāng)前位置填充空白,為雨滴留出空間  
            raindropLine[i].y++; // 雨滴下落一行,增加y坐標(biāo)值  
            raindropLine[i].ch = rand() % 2 + 48; // 重新生成隨機(jī)數(shù)作為雨滴內(nèi)容,生成0或1的隨機(jī)數(shù)(ASCII碼48起為數(shù)字字符)  
            if (raindropLine[i].y > HEIGHT + RAIN_LENGTH) // 如果雨滴下落過(guò)快,重新設(shè)置其位置,將y坐標(biāo)設(shè)置為窗口頂部附近的位置(HEIGHT+RAIN_LENGTH)附近的值)                   
            {
                raindropLine[i].x = rand() % WIDTH; // 在窗口內(nèi)隨機(jī)設(shè)置新的x坐標(biāo)值,讓雨滴重新開始下落位置的隨機(jī)分配過(guò)程 
                raindropLine[i].y = rand() % HEIGHT; // 在窗口內(nèi)隨機(jī)設(shè)置新的y坐標(biāo)值,讓雨滴重新開始下落位置的隨機(jī)分配過(guò)程
                                                     // 如果雨滴位置仍然在窗口內(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); // 暫停一段時(shí)間,以控制動(dòng)畫的速度,這里設(shè)置為50毫秒   
                 
    }
    return 0; // 程序結(jié)束,返回0表示正常退出程序  
}
責(zé)任編輯:趙寧寧 來(lái)源: 鯊魚編程
相關(guān)推薦

2024-08-05 14:10:04

2023-12-07 12:59:46

C語(yǔ)言循環(huán)隊(duì)列代碼

2022-06-29 09:19:09

靜態(tài)代碼C語(yǔ)言c代碼

2024-07-30 16:36:11

2022-06-01 10:45:52

C語(yǔ)言代碼優(yōu)化

2025-06-23 11:35:29

VormsVue 3代碼

2011-07-05 16:57:53

C語(yǔ)言

2011-07-05 17:07:14

C語(yǔ)言

2020-12-02 10:27:40

C語(yǔ)言

2022-07-22 14:56:17

Canvas鴻蒙

2010-01-15 17:38:37

C++語(yǔ)言

2010-01-11 11:27:25

C++語(yǔ)言

2022-11-03 18:28:05

C語(yǔ)言Vely

2010-01-14 10:34:02

C++語(yǔ)言

2022-07-20 10:21:11

C語(yǔ)言代碼內(nèi)存

2011-10-24 09:42:00

C語(yǔ)言

2009-08-03 16:28:53

Java語(yǔ)言與C#語(yǔ)言

2022-01-28 14:54:21

staticC語(yǔ)言編譯器

2022-04-25 15:55:58

C 語(yǔ)言編程語(yǔ)言Java

2022-03-10 10:48:30

PolyCoder自動(dòng)代碼生成器語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品福利在线 | 国产精品久久久久9999鸭 | 成人免费淫片aa视频免费 | 国产日韩欧美一区二区 | 日韩中文在线视频 | 全部免费毛片在线播放网站 | 久久久久久久久久一区二区 | 日本三级网 | 九九亚洲 | 久久精品国产免费一区二区三区 | 中文字幕亚洲免费 | 国产精品毛片av一区 | 久草免费在线视频 | 成人九区 | 欧美成人一区二区三区 | 久久精品亚洲国产 | 亚洲网在线 | a级片播放| 国户精品久久久久久久久久久不卡 | 曰批视频在线观看 | 91爱爱·com| 91欧美| 欧美一级片在线观看 | 一区天堂| 国产精品成人一区 | 色av一区二区 | 97精品久久| 久久亚洲精品国产精品紫薇 | 国产精品观看 | 国产亚洲区 | 日本黄色片免费在线观看 | 国产精品久久久久aaaa九色 | 久久一区二区三区四区 | 日韩三区 | 国产成人99久久亚洲综合精品 | 国内久久精品 | 国产成人免费观看 | 二区三区av | 老牛影视av一区二区在线观看 | 欧美日韩在线一区二区三区 | 久久在线看 |