📜  C 程序显示一个人在雨中行走

📅  最后修改于: 2022-05-13 01:55:31.837000             🧑  作者: Mango

C 程序显示一个人在雨中行走

在 Turbo C 图形中, graphics.h函数用于绘制不同的形状(如圆形、矩形等),并以不同的格式(不同的字体和颜色)显示文本(任何消息)。通过使用 graphics.h 可以设计程序、动画和游戏。这些对初学者很有用。

这个程序演示了一个人如何撑着雨伞在雨中行走,当按下一个键时,雨停了,天空中出现了彩虹。

头文件:

包含头文件 stdio.h、conio.h 和 graphics.h 是因为程序中使用了这些文件中定义的函数。 #define 命令用于定义整个程序中使用的一些重要元素。

使用的功能:

  • getmaxx():graphics.h 头文件包含 getmaxx()函数,该函数返回当前图形模式和驱动程序的最大 X 坐标。
  • getmaxy():函数getmaxy() 返回当前图形模式和驱动程序的最大 Y 坐标。
  • setcolor():setcolor()函数将当前绘图颜色设置为新颜色。
  • rectangle():rectangle() 绘制一个矩形。要绘制矩形,您需要左上角和右下角的坐标。左坐标指定左上角的X坐标,上坐标指定左上角的Y坐标,右坐标指定右下角的X坐标,下坐标指定Y-右下角的坐标。
  • line():line()函数从点(x1,y1)到点(x2,y2)画一条线,即(x1,y1)和(x2,y2)是线的端点。
  • setfillstyle() 和 floodfill():在 graphics.h 中,setfillstyle() 设置当前的填充图案和填充颜色。 floodfill() 填充封闭区域。
  • circle():图形。 h 头文件包含函数circle() 绘制一个圆心在 (x, y) 和给定半径的圆。
  • pieslice():此函数绘制并填充一个具有给定半径 r 和中心在 (x, y) 的饼图。切片分别从 s_angle 和 e_angle 开始和结束。
  • rand():rand()函数在 C 中用于生成随机数。如果我们生成一个随机数序列。每次程序运行时,rand()函数都会一次又一次地创建相同的序列。
  • delay():延迟函数将程序的执行暂停一段指定的时间。
  • arc():头文件 graphics.h 包含 arc()函数,该函数以 (x, y) 为中心和给定半径绘制圆弧。
  • getch():getch()函数保存程序的输出。
  • kbhit():判断一个键是否被按下。包含头文件“conio. h”在你的程序中使用它。

自定义函数:

  • 小屋():创建一个小屋。
  • DrawManAndUmbrella():创建一个拿着雨伞的人。
  • Rain():创建降雨。
  • Rainbow():创建彩虹。

方法:

在这个程序中,我们将用小屋、阳光和降雨来创造风景。在这片风景中,一个男人撑着伞,穿过地面。按下一个键,雨就停了,彩虹出现了。

  • Ground Level :要创建地线,我们将首先使用 GroundY ScreenHeight 来定义地平面。
  • 小屋:小屋是为了风景而建造的。对于基础和屋顶,将使用矩形和线条。小屋将是五颜六色的。
  • 人和伞:建造一个拿着伞的人。一个圆圈构成了男人的头部,线条构成了他的身体。代表腿的线条具有可变坐标,因此看起来好像人在地上行走。使用 pieslice函数,我们将创建伞的主体和棍子的线条。
  • Rain :使用 rand()函数创建下雨以生成随机像素并创建细线以创建下雨效果
  • 圆圈:要在左上角创建一个太阳,我们将使用一个圆圈。
  • 彩虹:使用圆弧函数在左上角创建彩虹。延迟函数给它一个动画。
  • 降雨一直持续到按下任意键为止。
  • 按下某个键时会出现彩虹。

下面是实现上述方法的 C 程序:

C
// C program to implement
// the above approach
#include 
#include 
#include 
#define ScreenWidth getmaxx()
#define ScreenHeight getmaxy()
#define GroundY ScreenHeight * 0.75
int ldisp = 0;
  
// Creating a hut
void hut()
{
    setcolor(WHITE);
    rectangle(150, 180, 250, 300);
    rectangle(250, 180, 420, 300);
    rectangle(180, 250, 220, 300);
  
    line(200, 100, 150, 180);
    line(200, 100, 250, 180);
    line(200, 100, 370, 100);
    line(370, 100, 420, 180);
  
    setfillstyle(SOLID_FILL, BROWN);
    floodfill(152, 182, WHITE);
    floodfill(252, 182, WHITE);
    setfillstyle(SLASH_FILL, BLUE);
    floodfill(182, 252, WHITE);
    setfillstyle(HATCH_FILL, GREEN);
    floodfill(200, 105, WHITE);
    floodfill(210, 105, WHITE);
}
  
// Drawing a Man with 
// an umbrella
void DrawManAndUmbrella(int x, 
                        int ldisp)
{
    circle(x, GroundY - 90, 10);
    line(x, GroundY - 80, x, 
         GroundY - 30);
    line(x, GroundY - 70, 
         x + 10, GroundY - 60);
    line(x, GroundY - 65, x + 10, 
         GroundY - 55);
    line(x + 10, GroundY - 60, 
         x + 20, GroundY - 70);
    line(x + 10, GroundY - 55,
         x + 20, GroundY - 70);
  
    line(x, GroundY - 30, 
         x + ldisp, GroundY);
    line(x, GroundY - 30, 
         x - ldisp, GroundY);
  
    pieslice(x + 20, GroundY - 120, 
             0, 180, 40);
    line(x + 20, GroundY - 120, 
         x + 20, GroundY - 70);
}
  
// Creating the Rainfall
void Rain(int x)
{
    int i, rx, ry;
    for (i = 0; i < 400; i++) 
    {
        rx = rand() % ScreenWidth;
        ry = rand() % ScreenHeight;
        if (ry < GroundY - 4) 
        {
            if (ry < GroundY - 120 || 
               (ry > GroundY - 120 && 
               (rx < x - 20 || 
                rx > x + 60)))
                line(rx, ry, 
                     rx + 0.5, ry + 4);
        }
    }
}
  
// Creating the rainbow
void rainbow()
{
    int x, y, i;
  
    circle(ScreenWidth - 100, 
           50, 30);
    setfillstyle(SOLID_FILL, 
                 YELLOW);
    floodfill(ScreenWidth - 100,
              50, WHITE);
  
    ldisp = (ldisp + 2) % 20;
    DrawManAndUmbrella(x, ldisp);
    hut();
    x = getmaxx() / 5;
    y = getmaxy() / 5;
  
    for (i = 30; i < 100; i++) 
    {
        // for animation
        delay(50);
  
        setcolor(i / 10);
  
        arc(x, y, 0, 180, i - 10);
    }
    getch();
}
  
// Driver code
void main()
{
    int gd = DETECT, gm, x = 0;
  
    initgraph(&gd, &gm, 
              "C:\\TurboC3\\BGI");
  
    // executes till any key 
    // is pressed
    while (!kbhit()) 
    {
        hut();
        circle(ScreenWidth - 100, 
               50, 30);
        setfillstyle(SOLID_FILL, 
                     YELLOW);
        floodfill(ScreenWidth - 100, 
                  50, WHITE);
        line(0, GroundY, ScreenWidth, 
             GroundY);
        Rain(x);
  
        ldisp = (ldisp + 2) % 20;
        DrawManAndUmbrella(x, ldisp);
        delay(20);
        cleardevice();
        x = (x + 2) % ScreenWidth;
    }
    // if the key is pressed the 
    // rain stops, rainbow appears
    ldisp = (ldisp + 2) % 20;
    DrawManAndUmbrella(x, ldisp);
    rainbow();
    getch();
}


运行此程序的步骤:

步骤 1:转到 C:\TURBOC3\BIN 并将风景.c 文件移至此处。

在 C:\TURBOC3\BIN 中移动风景.c 文件

在 C:\TURBOC3\BIN 中移动风景.c 文件

第 2 步:打开 Turbo C++。

第 3 步:单击文件并打开文件。您将在列表中看到风景.c 文件。

第 4 步:选择文件并按打开以在 Turbo C++ 中打开风景.c 文件。

选择文件

在turbo c ++中打开scenery.c文件

第 5 步:单击运行以运行图形程序。

输出:观察一个拿着雨伞的男子在雨中行走,风景中有一间小屋和一个太阳。

C 图形中走在雨中的人

C 图形中走在雨中的人

按下一个键,雨就停了,彩虹出现了。

彩虹出现在按键上

彩虹出现在按键上

输出

工作输出