PacMan 개발 - 적과 대입
드로잉 핸들 HDC:
HDC hdc=GetDC(HWND hWnd);
선 그리기MoveToEx(HDC hdc,int x,int y,LPPOINT preP);
이렇게 하면 우리는 적과 입이 큰 이미지를 그릴 수 있다.
세 가지 적을 그리기:
void Enermy::Draw(HDC& hdc)//
{
HPEN pen = ::CreatePen(0, 0, color);
HPEN oldPen = (HPEN)SelectObject(hdc, pen);
Arc(hdc, point.x - DISTANCE, point.y + DISTANCE,
point.x + DISTANCE, point.y + DISTANCE,
point.x + DISTANCE, point.y,
point.x - DISTANCE, point.y);//
int const LEGLENTH = (DISTANCE) / (LEGCOUNTS);
//
if (frame % 2 == 0)
{
MoveToEx(hdc, point.x - DISTANCE, point.y, NULL);
LineTo(hdc, point.x - DISTANCE, point.y + DISTANCE - LEGLENTH);
MoveToEx(hdc, point.x + DISTANCE, point.y, NULL);
LineTo(hdc, point.x + DISTANCE, point.y + DISTANCE - LEGLENTH);
for (int i = 0; i < LEGCOUNTS; i++)
{
Arc(hdc, point.x - DISTANCE + i * 2 * LEGLENTH, point.y + DISTANCE - 2 * LEGLENTH,
point.x - DISTANCE + (i + 1)*2 * LEGLENTH, point.y + DISTANCE,
point.x - DISTANCE + i * 2 * LEGLENTH, point.y+DISTANCE-LEGLENTH,
point.x - DISTANCE + (i + 1) * 2 * LEGLENTH, point.y + DISTANCE - LEGLENTH
);
}
}
else
{
MoveToEx(hdc, point.x - DISTANCE, point.y, NULL);
LineTo(hdc, point.x - DISTANCE, point.y + DISTANCE);
MoveToEx(hdc, point.x + DISTANCE, point.y, NULL);
LineTo(hdc, point.x + DISTANCE, point.y + DISTANCE);
//
MoveToEx(hdc, point.x - DISTANCE, point.y+DISTANCE, NULL);
LineTo(hdc, point.x - DISTANCE+LEGLENTH, point.y + DISTANCE - LEGLENTH);
for (int i = 0; i < LEGCOUNTS - 1; i++)
{
Arc(hdc, point.x - DISTANCE + (1 + i * 2) * LEGLENTH, point.y + DISTANCE - 2 * LEGLENTH,
point.x - DISTANCE + (3 + i * 2) * LEGLENTH, point.y + DISTANCE,
point.x - DISTANCE + (1 + i * 2) * LEGLENTH, point.y + DISTANCE - LEGLENTH,
point.x - DISTANCE + (3 + i * 2) * LEGLENTH, point.y + DISTANCE - LEGLENTH
);
}
MoveToEx(hdc, point.x + DISTANCE, point.y + DISTANCE, NULL);
LineTo(hdc, point.x + DISTANCE - LEGLENTH, point.y + DISTANCE - LEGLENTH);
}
//
int R = DISTANCE / 5;
switch (tw)
{
case UP:
Ellipse(hdc, point.x - 2 * R, point.y - 2 * R, point.x, point.y);
Ellipse(hdc, point.x, point.y - 2 * R, point.x + 2 * R, point.y);
break;
case DOWN:
Ellipse(hdc, point.x - 2 * R, point.y, point.x, point.y + 2 * R);
Ellipse(hdc, point.x, point.y, point.x + 2 * R, point.y + 2 * R);
break;
case LEFT:
Ellipse(hdc, point.x - 3 * R, point.y - R, point.x - R, point.y + R);
Ellipse(hdc, point.x - R, point.y - R, point.x + R, point.y + R);
break;
case RIGHT:
Ellipse(hdc, point.x - R, point.y - R, point.x + R, point.y + R);
Ellipse(hdc, point.x + R, point.y - R, point.x + 3 * R, point.y + R);
break;
}
frame++;//
SelectObject(hdc, oldPen);
DeleteObject(pen);
return;
}
큰 입 그리기
void PacMan::Draw(HDC& memDC)
{
if (tw == OVER)
{
}
else if (frame % 2 == 0)// 4 2
{
int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
int offsetX = DISTANCE / 2 + D_OFFSET;
int offsetY = DISTANCE / 2 + D_OFFSET;
switch (tw)
{
case UP:
x1 = point.x - offsetX;
x2 = point.x + offsetX;
y2 = y1 = point.y - offsetY;
break;
case DOWN:
x1 = point.x + offsetX;
x2 = point.x - offsetX;
y2 = y1 = point.y + offsetY;
break;
case LEFT:
x1 = x2 = point.x - offsetX;
y1 = point.y + offsetY;
y1 = point.y - offsetY;
break;
case RIGHT:
x1 = x2 = point.x + offsetX;
y1 = point.y - offsetY;
y1 = point.y + offsetY;
break;
}
Arc(memDC, point.x - DISTANCE, point.y - DISTANCE, point.x + DISTANCE, point.y + DISTANCE, x1, y1, x2, y2);
MoveToEx(memDC, x1,y1,NULL);
LineTo(memDC, point.x, point.y);
LineTo(memDC, x2,y2);
}
else if (frame % 3 == 0)
{
Ellipse(memDC, point.x - DISTANCE, point.y - DISTANCE, point.x + DISTANCE, point.y + DISTANCE);
}
else
{
int x1 = 0, x2 = 0, y1 = 0, y2 = 0;
switch (tw)
{
case UP:
x1 = point.x - DISTANCE;
x2 = point.x + DISTANCE;
y2 = y1 = point.y;
break;
case DOWN:
x1 = point.x + DISTANCE;
x2 = point.x - DISTANCE;
y2 = y1 = point.y;
break;
case LEFT:
x2 = x1 = point.x;
y1 = point.y + DISTANCE;
y2 = point.y - DISTANCE;
break;
case RIGHT:
x2 = x1 = point.x;
y1 = point.y - DISTANCE;
y2 = point.y + DISTANCE;
break;
}
Arc(memDC, point.x - DISTANCE, point.y - DISTANCE, point.x + DISTANCE, point.y + DISTANCE, x1, y1, x2, y2);
MoveToEx(memDC, x1, y1, NULL);
LineTo(memDC, point.x, point.y);
LineTo(memDC, x2, y2);
}
frame++;//
}
세 종류의 적이 있기 때문에 우리는 그들에게 색깔을 부여하여 식별할 수 있다.
//
RedOne(int x, int y) :Enermy(x, y)
{
color = RGB(255, 0, 0);
}
BlueOne(int x, int y) : RedOne(x, y)
{
color = RGB(0, 0, 255);
}
YellowOne(int x, int y) : RedOne(x, y)
{
color = RGB(200, 200, 100);
}
@ Mayuko
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.