헤더 파일과 cpp 파일 두개로 나누었습니다.
원을 그리기 위해서는 아래와 같은 함수가 필요합니다.
HDC hdc = GetWindowDC(GetForegroundWindow());
Ellipse(hdc, x의 시작, y이 시작, x의 끝, y의 끝);
위 함수들은 #include<windows.h> 헤더 파일에 정리 되어있어 미리 선언이 필요합니다.
헤더파일 입니다. circle 구조체를 선언하였습니다.
주석 1번은 x, y값과 반지름을 입력하면 해당 위치에 원을 그려줍니다.
주석 2번은 랜덤으로 10개의 원을 그립니다.
주석 3번은 원을 몇개 그릴지 입력 받고 랜덤으로 입력받은 수 만큼 그립니다.
아래느 소스입니다.
#pragma once
class CCircle
{
private:
int m_x;
int m_y;
int m_radius;
public:
CCircle(int x, int y, int r);
CCircle();
void draw();
void generate();
void calcArea();
~CCircle();
};
CCircle::CCircle(int x, int y, int r)
{
this->m_x = x;
this->m_y = y;
this->m_radius = r;
}
CCircle::CCircle()
: m_x(0), m_y(0), m_radius(0)
{
}
CCircle::~CCircle()
{
}
void CCircle::draw()
{
HDC hdc = GetWindowDC(GetForegroundWindow());
Ellipse(hdc, this->m_x-this->m_radius, this->m_y - this->m_radius, this->m_x + this->m_radius, this->m_y + this->m_radius);
}
void CCircle::generate()
{
int minX = 100; //x좌표 최소값
int minY = 100; //y좌표 최솟값
int minR = 10; //minimum value of radius
srand((unsigned)time(NULL));
minX += (rand() % 900)+1;
minY += (rand() % 300)+1;
minR += (rand() % 100)+1;
CCircle random(minX, minY, minR);
random.draw();
Sleep(1000);
}
void CCircle::calcArea()
{
int minX = 100; //x좌표 최소값
int minY = 100; //y좌표 최솟값
int minR = 50; //minimum value of radius
srand((unsigned)time(NULL));
minX += (rand() % 800) + 1;
minY += (rand() % 300) + 1;
minR += (rand() % 100) + 1;
CCircle random(minX, minY, minR);
cout << "Circle Area: " << 3.14 * (minR * minR) << endl;
random.draw();
}
#include<windows.h>
#include <iostream>
#include "circle.h"
using namespace std;
int main()
{//1번
int inputX, inputY, inputR;
cout << "Enter x pos : ";
cin >> inputX;
cout << "Enter y pos : ";
cin >> inputY;
cout << "Enter radius : ";
cin >> inputR;
CCircle circle1(inputX, inputY, inputR);
circle1.draw();
Sleep(2500);
//2번
for (int i = 0; i < 10; i++)
{
CCircle circle2;
circle2.generate();
}
//3번
int NumOfCircle = 0;
while (NumOfCircle <= 0 || 100 < NumOfCircle)
{
cout << "Enter num of circles: ";
cin >> NumOfCircle;
if (NumOfCircle < 0 || 100 < NumOfCircle)
{
cout << "Pleas input 1 to 100! Try again" << endl;
}
}
for (int i = 0; i < NumOfCircle; i++)
{
CCircle* newCircle = new CCircle();
newCircle->calcArea();
delete newCircle;
Sleep(1000);
}
return 0;
}
'프로그래밍 언어 > c++' 카테고리의 다른 글
[C/C++]c++ ESPRESSO 5장 코딩 문제(연습문제) (0) | 2022.05.02 |
---|---|
[C/C++] c++ 에스프레소 espresso 6장/ 생성자와 소멸자/ 연습문제 (0) | 2022.05.02 |
[c/c++] 수입에 따른 세금 계산기 (0) | 2022.04.13 |
[c/c++] c언어로 행맨 (Hangman) 게임 만들기 (0) | 2022.04.13 |
집의 평수를 제곱 미터로 바꾸는 프로그램(C++ espresso) (0) | 2022.03.28 |