반응형
경일게임아카데미 프로그래밍반 28기 18일차 수업 (2021. 05. 03)
슈팅 베이직
#include "stdafx.h"
#include "playGround.h"
playGround::playGround()
{
}
playGround::~playGround()
{
}
//초기화는 여기다 하세요 제발
HRESULT playGround::init()
{
gameNode::init();
_player = RectMakeCenter(WINSIZEX / 2 - 350, WINSIZEY / 2, 100, 50);
_player2 = RectMakeCenter(WINSIZEX / 2 + 350, WINSIZEY / 2, 100, 50);
//총알의 최대갯수만큼 for문을 돌리자
for (int i = 0; i < BULLETMAX; i++)
{
_bullet[i].x = _player.right + 10;
_bullet[i].y = (_player.top + _player.bottom) / 2;
_bullet[i].rc = RectMakeCenter(_bullet[i].x,
_bullet[i].y, 20, 20);
//처음에는 모든 총알이 발사안됐다고 두자
_bullet[i].isFire = false;
_bullet[i].speed = 7;
}
//게이지를 표현해보자
_backGauge = RectMakeCenter(WINSIZEX / 2 + 250, 100, 400, 50);
_frontGauge = RectMakeCenter(WINSIZEX / 2 + 250, 100, 400, 50);
_r = 0;
_g = 240;
return S_OK;
}
//메모리 해제는 여기다 하세요 제발
void playGround::release()
{
gameNode::release();
}
//여기에다 연산하세요 제에발
void playGround::update()
{
gameNode::update();
if (KEYMANAGER->isStayKeyDown('W'))
{
_player.top -= 5;
_player.bottom -= 5;
}
if (KEYMANAGER->isStayKeyDown('S'))
{
_player.top += 5;
_player.bottom += 5;
}
if (KEYMANAGER->isOnceKeyDown('F'))
{
bulletFire();
}
bulletMove();
}
//여기에다 그려라 좀! 쫌!
void playGround::render(HDC hdc)
{
HDC backDC = this->getBackBuffer()->getMemDC();
PatBlt(backDC, 0, 0, WINSIZEX, WINSIZEY, WHITENESS);
// 위에 건들지마라
//================제발 이 사이에 좀 그립시다==========================
Rectangle(backDC, _player);
Rectangle(backDC, _player2);
//총알 그려줌
for (int i = 0; i < BULLETMAX; i++)
{
if (!_bullet[i].isFire) continue;
Ellipse(backDC, _bullet[i].rc);
}
Rectangle(backDC, _backGauge);
HBRUSH brush = CreateSolidBrush(RGB(_r, _g, 0));
HBRUSH oldBrush = (HBRUSH)SelectObject(backDC, brush);
Rectangle(backDC, _frontGauge);
SelectObject(backDC, oldBrush);
DeleteObject(brush);
//==================================================
//여기도 건들지마라
this->getBackBuffer()->render(hdc, 0, 0);
}
//발사용 함수인데
void playGround::bulletFire()
{
for (int i = 0; i < BULLETMAX; i++)
{
if (_bullet[i].isFire) continue;
_bullet[i].x = _player.right + 10;
_bullet[i].y = (_player.top + _player.bottom) / 2;
_bullet[i].rc = RectMakeCenter(_bullet[i].x,
_bullet[i].y, 20, 20);
_bullet[i].isFire = true;
break;
}
}
//총알 움직임용
void playGround::bulletMove()
{
for (int i = 0; i < BULLETMAX; i++)
{
if (!_bullet[i].isFire) continue;
if (_bullet[i].x > WINSIZEX + 50) _bullet[i].isFire = false;
_bullet[i].x += _bullet[i].speed;
_bullet[i].rc = RectMakeCenter(_bullet[i].x,
_bullet[i].y, 20, 20);
RECT temp;
if (IntersectRect(&temp, &_player2, &_bullet[i].rc) && _bullet[i].isFire)
{
setGauge();
_bullet[i].isFire = false;
break;
}
}
}
//게이지(?) 조절용 함수
void playGround::setGauge()
{
_frontGauge.left += 10;
if (_frontGauge.left >= _backGauge.right) _frontGauge.left = _backGauge.right;
if (_frontGauge.right - _frontGauge.left < 350)
{
_r = 255;
_g = 255;
}
if (_frontGauge.right - _frontGauge.left < 100)
{
_r = 255;
_g = 0;
}
}
이제 발사 전용 로직과, 총알 움직임 전용 로직을 따로 함수로 만들어서 제작하는 수업을 진행했다.
맨 처음 총알과 게이지를 초기화 하고, 연산에서는 제작한 함수를 이용해 계산을 한다.
마지막으로 렌더에서 날아가는 총알의 모습과 체력창을 보여준다.
결과화면
반응형
'학원 > 경일게임아카데미' 카테고리의 다른 글
31. 열아홉번째 수업 (0) | 2023.01.09 |
---|---|
30. 열여덟번째 수업과제 [2인용 미사일 게임] (0) | 2023.01.08 |
28. 열일곱번째 수업 (0) | 2022.12.29 |
27. 열여섯번째 수업과제 [악어 게임] (0) | 2022.12.29 |
26. 열여섯번째 수업과제 [러닝 게임] (0) | 2022.12.29 |