当前位置:编程学习 > C/C++ >>

计算机C语言设计一个小房子的程序

答案:/*
 * File: house.c
 * ------------
 * This program draws a 易做图 frame house.
 */

 #include <stdio.h>

 #include "genlib.h"
 #include "graphics.h"

 /*
  * Constants
  * ---------
  * The following constants control the sizes of the
  * various elements in the display.
  */

  #define HouseHeight       2.0
  #define HouseWidth        3.0
  #define AtticHeight       0.7

  #define DoorWidth         0.4
  #define DoorHeight        0.7
  #define DoorknobRadius   0.03
  #define DoorknobInset     0.07

  #define PaneHeight        0.25
  #define PaneWidth         0.2

  #define FirstFloorWindows 0.3
  #define SecondFloorWindows 1.25

  /* Function prototypes */

  void DrawHouse(double x, double y);
  void DrawOutline(double x, double y);
  void DrawWindows(double x, double y);
  void DrawDoor(double x, double y);
  void DrawBox(double x, double y, double width, double height);
  void DrawTriangle(double x, double y, double base, double height);
  void DrawCenteredCircle(double x, double y, double r);
  void DrawGrid(double x, double y, double width, double height,
    int columns, int rows);

  /* Main program */

  main()
  {
 double cx, cy;

 InitGraphics();
 cx = GetWindowWidth() / 2;
 cy = GetWindowHeight() / 2;
 DrawHouse(cx - HouseWidth / 2, cy - (HouseHeight + AtticHeight) / 2);
  }

  /* Function: DrawHouse
   * Usage: DrawHouse(x, y);
   * -----------------------
   * This function draws a house diagram with the lower left corner
   * at (x, y). This level of the function merely divides up
   * the work.
   */

  void DrawHouse(double x, double y)
  {
 DrawOutline(x, y);
 DrawDoor(x + (HouseWidth - DoorWidth) / 2, y);
 DrawWindows(x, y);
  }

  /* Function: DrawOutline
   * Usage: DrawOutline(x, y);
   * ------------------------
   * This function draws the outline for the house, using (x, y)
   * as the origin. The outline consists of a box with a 易做图
   * on top.
   */

   void DrawOutline(double x, double y)
   {
 DrawBox(x, y, HouseWidth, HouseHeight);
 DrawTriangle(x, y + HouseHeight, HouseWidth, AtticHeight);
   }

   /*
 * Function: DrawDoor
 * Usage: DrawDoor(x, y);
 * ----------------------
 * This function draws a door, with its doorknob. As usual,
 * (x, y) specifies the lower left corner of the door.
 */

 void DrawDoor(double x, double y)
 {
  DrawBox(x, y, DoorWidth, DoorHeight);
  DrawCenteredCircle(x + DoorWidth - DoorknobInset,
         y + DoorHeight / 2, DoorknobRadius);
 }

 /*
  * Function: DrawWindows
  * Usage: DrawWindows(x, y);
  * ------------------------
  * This function draws all the windows for the house,
  * taking advantage of the fact that the windows are all
  * arranged in two-dimentional grids of equal-sized panes.
  * By calling the function DrawGrid, this implementation
  * can create all of the window structures using a single
  * tool.
  */

  void DrawWindows(double x, double y)
  {
  double xleft, xright;

  xleft = x + HouseWidth * 0.25;
  xright = x + HouseWidth * 0.75;
  DrawGrid(xleft - PaneWidth * 1.5, y + FirstFloorWindows,
     PaneWidth, PaneHeight, 3, 2);
  DrawGrid(xright - PaneWidth * 1.5, y + FirstFloorWindows,
     PaneWidth, PaneHeight, 3, 2);
  DrawGrid(xleft - PaneWidth, y + SecondFloorWindows,
     PaneWidth, PaneHeight, 2, 2);
  DrawGrid(xright - PaneWidth, y + SecondFloorWindows,
     PaneWidth, PaneHeight, 2, 2);
  }

  /*
   * Function: DrawBox
   * Usage: DrawBox(x, y, width, height)
   * -----------------------------------
   * This function draws a rectangle of the given width and
   * height with its lower left corner at (x, y).
   */

   void DrawBox(double x, double y, double width, double height)
   {
  MovePen(x, y);
  DrawLine(0, height);
  DrawLine(width, 0);
  DrawLine(0, -height);
  DrawLine(-width, 0);
   }

   /*
    * Function: DrawTriangle
    * Usage: DrawTriangle(x, y, base, height)
    * ---------------------------------------
    * This function draws an isosceles 易做图 (i.e., one with
    * two equal sides) with a horizontal base. The coordinate of
    * the left endpoint of the base is (x, y), and the 易做图
    * has the indicated base length and  height. If height is
    * positive, the 易做图 points upward. If height is negative,
    * the 易做图 points downward.
    */

    void DrawTriangle(double x, double y, double base, double height)
    {
  MovePen(x,y);
  DrawLine(base, 0);
  DrawLine(-base / 2, height);
  DrawLine(-base / 2, -height);
    }

    /*
  * Function: DrawCenteredCircle
  * Usage: DrawCenteredCircle(x, y, r);
  * -----------------------------------
  * This function draws a circle of radius r with its
  * center at (x, y).
  */

  void DrawCenteredCircle(double x, double y, double r)
  {
   MovePen(x + r, y);
   DrawArc(r, 0, 360);
  }

  /*
   * Function: DrawGrid
   * Usage: DrawGrid(x, y, width, height, columns, rows);
   * ---------------------------------------------------
   * DrawGrid draws rectangles arranged in a two-dimensional
   * grid. As always, (x, y) specifies the lower left corner
   * of the figure.
   */

   void DrawGrid(double x, double y, double width, double height,
        int columns, int rows)
   {
   int i, j;

   for(i = 0; i < columns; i++){
    for(j = 0; j < rows; j++){
     DrawBox(x + i * width, y + j * height,
       width, height);
    }
   }
   }

上一个:求C语言课程设计—通讯录管理系统
下一个:用简单的C语言实现带括号的四则运算

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,