12월, 2020의 게시물 표시

std::vector, Iterator 직접 구현하며 이해하기

이미지
들어가며  C++ 표준 라이브러리 (STL) std::vector 는 순차적인 자료(배열)를 저장하는 템플릿 클래스입니다.  처음 프로그래밍을 배우던 시절 수년간 동적 메모리 할당(Dynamic Allocation) 을 오직 new, delete 구문에만 의존해 왔습니다. (STL이 뭔지 몰랐습니다.) 그러던 어느날 std::vector 를 처음 사용해 본 후 그 편리함과 왜 이런 존재를 나는 몰랐지라는 허무함이 공존했던 기억이 납니다. 하지만 new, delete를 다년간 사용하며 배웠던 포인터, 메모리에 대한 깊은 이해 는 현재까지도 프로그래밍 지식의 좋은 밑바탕이 되었음을 스스로 느낍니다. 편리함의 이면 std::vector를 접한 후 대부분의 동적 배열, 동적메모리 할당 은 제 코드에서 사라지게 되었고, 남이 만든 클래스(물론 표준이지만)의 사용법을 배우는 것에만 집착하게 됩니다. "이게 어떻게 만들어져 있지" 보다 "어떻게 이것을 사용하지" 라는 생각만 남아 깊은 공부에 별 도움이 되지 않는 도구의 사용법에만 관심이 있었습니다.  대학시절의 자신에게 돌아간다면, 그건 (사용법은) 별로 중요하지 않다고 말해주고 싶군요. 오히려 " 비슷하게 직접 한번 만들어 보는 것은 어때 " 라고 권해주고 싶습니다. 또한, STL은 C++의 강력한 표준 라이브러리이지만 언제나 사용가능한 것은 아닙니다. (아두이노 IDE는 C++언어를 지원하지만 STL은 사용이 불가, 작은 메모리환경)   std::vector 그럼 직접 나만의 벡터 를 만들어 보겠습니다. 앞으로 소개할 예제는 vector Class, Nested Class로 iterator Class 구현까지 포함한 내용입니다. 물론 표준 라이브러리만큼 훌륭하진 않지만 좋은 공부가 될 것입니다.

PyQt를 이용해 날아오는 적군 피하기 게임

이미지
개요 이번 주제는 Python과 PyQt5를 이용한 피하기 게임 입니다. 기본 구성은 주인공이 키보드 화살표(상, 하, 좌, 우)로 이동하고, 모든 방향에서 출현하는 적을 피하는 게임입니다. 지뢰라는 아군의 무기를 도입해 스페이스 키를 누르면 동그란 원이 생기고 적으로부터 1회의 방어막을 생성합니다. (쿨타임 3초) 가끔씩 등작하는 "갈색 적군" 은 아군과 접촉하면 모든 적이 한번에 사라집니다.   [실행 화면] PyGame 을 활용해 더 비주얼하고 멋진 게임 코드를 작성할 수도 있지만, 여러분이 개발 가능한 영역을 더 확장(유틸리티, 시스템소프트웨어, 네트워크 등)하기 좋은 Qt를 배우는 것을 권장하고 싶습니다. 예제를 작성시 아래 사항들에 대해 주의를 기울여 코드를 작성해 보았습니다. 객체 지향적 으로 만들자 화면 갱신을 최소화해 CPU 점유율 을 낮추자   소스코드 그럼 소스코드를 한번 살펴보겠습니다. 게임은 총 3개의 파이썬 파일 ( main.py, game.py, unit.py ) 로 구성되어 있습니다.   unit.py 파일 이 파일은 Unit, Enemy, My 3개의 Class 선언 입니다. from PyQt5.QtCore import Qt, QRectF from PyQt5.QtGui import QColor class Unit: def __init__(self, r=QRectF(), c=QColor()): self.rect = r self.color = c class Enemy(Unit): def __init__(self, dir=0, type=0, r=QRectF(), c=QColor()): super().__init__(r, c) #

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기