학원/경일게임아카데미

23. 열다섯번째 수업

셩잇님 2022. 12. 26. 17:19
반응형

경일게임아카데미 프로그래밍반 28기 15일차 수업 (2021. 04. 28)

 

 

 


 

 

 

지금까지의 나는 프로젝트 정리를 '경일'이라는 프로젝트안에 '경일'이라는 솔루션안에 API 프로젝트를 새로 만들고, 그 밑에 새로운 수업중 진행되는 폴더들을 매번 만들어줘서 진행하였다.

 

그러나 오늘부터 싱글톤, 게임 로직 환경 구축(키보드, PLAYGROUND, GAMENODE)등 다양한 클래스와 여러 작업들이 채 어떻게 돌아가는지 확인하기도전에 생성되고, 이를 활용하였다. 이를 직접 보고 타이핑하려고 했지만, 시간이 너무 오래 걸린다는 단점이 있었다. 무엇보다 내가 결국 다 타이핑하여 완성을 했지만 프로젝트가 잘 동작하지 않았다.

 

아쉽지만 내가 완성했을 때 오류가 없음에도 불구하고 프로젝트가 동작되지 않았다. 아울러 프로젝트가 점점 무거워지기 시작하더니 구동할때마다 렉이 먹기 시작했다. 시간은 한정되어있고, 모든 작업들을 하기 위핸 나에겐 시간이 너무 부족하였다.

 

그래서 이런 저런 사정으로 인해 그래서 이후부턴 선생님께서 구글 드라이브에 올려주신 파일을 내 폴더에 넣어 (다른 솔루션), 진행하기로 결심했다.

 

요약. 그동안 '경일'프로젝트에 '경일'이라는 솔루션에 콘솔 API가 그 밑에 있었는데,

앞으로는 매번 올라오는 수업을 경일 솔루션에 넣지않고 경일 폴더에 넣어서 (깃허브에 커밋하기 위한) 위치는 같이하지만 각기 다르게 동작하게 설정하도록 변경하였다.

 

 

 


 

 

 

WIN32 API 싱글톤, 게임 로직 환경 구축

#include "stdafx.h"
#include "playGround.h"


playGround::playGround()
{
}


playGround::~playGround()
{
}

//초기화는 여기다 하세요 제발
HRESULT playGround::init()
{
	gameNode::init();

	_rc = RectMakeCenter(RND->getFromIntTo(100, WINSIZEX - 100), WINSIZEY / 2, 100, 100);
	_speed = _isCrash = 0;

	return S_OK;
}

//메모리 해제는 여기다 하세요 제발
void playGround::release()
{
	gameNode::release();
}

//여기에다 연산하세요 제에발
void playGround::update()
{
	gameNode::update();

	if (KEYMANAGER->isOnceKeyDown('D'))
	{
		_rc.left += 5;
		_rc.right += 5;
	}

	if (KEYMANAGER->isOnceKeyUp('D'))
	{
		_rc.left -= 15;
		_rc.right -= 15;
	}

	if (KEYMANAGER->isStayKeyDown(VK_RIGHT))
	{
		_rc.left += 2;
		_rc.right += 2;
	}

	if (KEYMANAGER->isToggleKey(VK_F1))
	{
		_rc.left -= 2;
		_rc.right -= 2;
	}

}

//여기에다 그려라 좀! 쫌!
void playGround::render(HDC hdc)
{
	Rectangle(hdc, _rc);
}

이 외에도 싱글톤, 게임노드, 키 매니저 등 다양한 클래스들이 존재하지만 내가 작업한 것이 아니기떄문에 해당 소스 코드는 따로 올리지 않는게 맞다고 생각하여 올리지 않는다.

 

 

 


 

 

 

눈피하기 게임

#include "stdafx.h"
#include "playGround.h"

playGround::playGround()
{

}

playGround::~playGround()
{

}

//초기화는 여기다 하세요 제발
HRESULT playGround::init()
{
	gameNode::init();

	_player = RectMakeCenter(WINSIZEX / 2, WINSIZEY - 100, 50, 70);

	for (int i = 0; i < SNOWMAX; i++)
	{
		_snow[i].rc = RectMakeCenter(20 + i * 25, 10, 10, 10);
		_snow[i].speed = RND->getFromIntTo(5, 10);
	}

	_isStart = false;
	

	return S_OK;
}

//메모리 해제는 여기다 하세요 제발
void playGround::release()
{
	gameNode::release();
}

//여기에다 연산하세요 제에발
void playGround::update()
{
	gameNode::update();

	if (KEYMANAGER->isOnceKeyDown(VK_RETURN))
	{
		if (!_isStart) _isStart = true;
	}

	if (_isStart)
	{
		if (KEYMANAGER->isStayKeyDown('A'))
		{
			_player.left -= 5;
			_player.right -= 5;
		}
		if (KEYMANAGER->isStayKeyDown('D'))
		{
			_player.left += 5;
			_player.right += 5;
		}

		for (int i = 0; i < SNOWMAX; i++)
		{
			_snow[i].rc.top += _snow[i].speed;
			_snow[i].rc.bottom += _snow[i].speed;

			//만약에 눈 중에 화면밖으로 나갔으면
			if (_snow[i].rc.top > WINSIZEY)
			{
				_snow[i].rc = RectMakeCenter(20 + i * 25, 10, 10, 10);
				_snow[i].speed = RND->getFromIntTo(5, 10);
			}

			RECT temp;
			if (IntersectRect(&temp, &_player, &_snow[i].rc))
			{
				this->init();
			}
		}
	}
}

//여기에다 그려라 좀! 쫌!
void playGround::render(HDC hdc)
{
	Rectangle(hdc, _player);

	for (int i = 0; i < SNOWMAX; i++)
	{
		Ellipse(hdc, 
			_snow[i].rc.left, 
			_snow[i].rc.top, 
			_snow[i].rc.right,
			_snow[i].rc.bottom);
	}
}

개인적으로 추가적으로 하면 좋을것 같다고 생각한 심화학습
1. 눈 색상 바꾸기
2. 왼쪽/오른쪽 못나가게 하기
3. 점수 추가하여 계속 출력시켜놓기
4. 시작 문구 추가하기
5. 패배 문구 추가하기



 


 

 

 

플래피버드 게임 제작해보기

#include "stdafx.h"
#include "playGround.h"

playGround::playGround()
{

}

playGround::~playGround()
{

}

//초기화는 여기다 하세요 제발
HRESULT playGround::init()
{
	gameNode::init();

	_x = WINSIZEX / 2 - 100;
	_y = WINSIZEY / 2;

	_player = RectMakeCenter(_x, _y, 100, 100);
	_jumpPower = _gravity = _score = 0;
	_isJump = false;
	
	return S_OK;
}

//메모리 해제는 여기다 하세요 제발
void playGround::release()
{
	gameNode::release();
}

//여기에다 연산하세요 제에발
void playGround::update()
{
	gameNode::update();

	if (KEYMANAGER->isOnceKeyDown(VK_SPACE))
	{
		_gravity = 0.1f;
		_jumpPower = 4.0f;
		_isJump = true;

		_score++;
	}

	if (_isJump)
	{
		_y -= _jumpPower;
		_jumpPower -= _gravity;
	}
    
	_player = RectMakeCenter(_x, _y, 100, 100);
}

//여기에다 그려라 좀! 쫌!
void playGround::render(HDC hdc)
{
	char str[128];
	sprintf_s(str, "점수 : %d", _score);
	TextOut(hdc, 10, 10, str, strlen(str));

	Rectangle(hdc, _player);
}

선생님께서 사각형과 스페이스를 통한 점프를 주셨다.
이를 기반으로 플래피버드 게임을 제작해보자. 플래피버드 게임이란?

위 사진과 같다.
새가 임의로 생성되는 파이프 사이를 지나가면 되는 게임!

 

 

 


 

 

수업시간 내용 및 메모사항 등 기타 등등 총괄
이게 어찌 돌아가지?
전공자 시점 - 구조를 알고 싶어함.
과제를 주면 - 전체적인 흐름도 이해못했는데 내가 어찌 할수 있겟소?

이게 어찌 돌아가지?
비전공자 시점 - 우와 뭔가 잔뜩 생겼다..
와아ㅏㅏㅏ 할수있을까?


 

반응형