2023년 2학기 Open Source Software 과목에서 진행한 프로젝트.

보통 학교 수업에서 프로젝트를 진행할 때는 교수님이 프로젝트 주제를 좁히거나 기술에 제약을 두시는데, 이 과목에선 오픈 소스 소프트웨어에 걸맞게 제약 조건 없이 원하는 소프트웨어를 만들 수 있었다. (교수님 최고!)

 

복학하고 나서 첫 학기에 진행했던 프로젝트다 보니 해보고 싶은 주제가 굉장히 많았다.

후보 주제가 다음과 같았다.

 

1. 미로 탈출을 인공지능을 이용해서 구현(군대에서 메이즈 러너 시리즈 책 전권을 다 읽을 정도로 인상깊었다)

2. Saleinfo Bot(핫딜을 알려주는 봇이라고 생각하면 된다)

3. 전자기기(노트북, 스마트폰, 테블릿) Benchmark (벤치 마크를 측정한 뒤 GeekBench 표본과 비교하여 내가 뽑은 전자기기가 상위 몇 퍼센트의 성능을 가졌는지 평가하는 프로그램)

4. CV를 이용한 야구 게임(컴퓨터로 하는 스크린 야구라고 생각하면 된다)

 

2번 주제인Saleinfo Bot을 먼저 개발하다가, robots.txt 크롤링 차단으로 인해서 한계에 부딪혔다. 그래서 다른 주제를 택하기로 했다.

3번 주제인 벤치마크 통계 프로그램을 만들다가, low-level 프로그래밍으로도 칩셋의 세부 정보를 식별하는데 실패하여 이것도 중간에 버려졌다는...

그래서 야구 게임을 만들게 되었다.

 

사실 진짜 만들고 싶은 건 "컴투스 프로야구 같은 야구 게임 + 스크린 야구" 였다. 하지만 촉박한 마감기한 + CV, 머신러닝 라이브러리에 대해 무지했기 때문에 프로젝트 목표를 변경하여 타자에 해당하는 기능만 구현하게 되었다.

 

 

자세한 기능은 README.md에 자세히 적어두었다.

 

https://github.com/DawnGlow/Hitting_Ball

 

GitHub - DawnGlow/Hitting_Ball

Contribute to DawnGlow/Hitting_Ball development by creating an account on GitHub.

github.com

 

 

미완성한 부분

야구 방망이를 실내에서 휘두르는 건 위험하니, 볼펜과 같이 일자형 물체를 인식하여 랜덤으로 날라오는 공을 맞출 수 있도록 구현하려고 했다. 하지만 스윙에 대한 기준 측정치를 판별하는게 내 실력으론 어려웠다. 그래서 프로젝트 마감 2일전까지 구현을 못해서 주먹으로 공을 치는 것으로 바꿔서 프로젝트를 마무리할 수 밖에 없었다.

 

 

느낀 점

일단 이 프로젝트에서 걸림돌이었던 부분은 라이브러리에 대한 배경지식이겠지만, 또 다른 문제점으로는 게임 구조 설계였다. 유니티나 언리얼 같은 게임 엔진을 사용한게 아니라 PyGame이라는 라이브러리를 사용했다. 이 라이브러리의 도움을 일부 받았지만, 원하는 게임 구조를 만들기 위해서는 게임 Status 과 관련된 코드를 처음부터 직접 짜야했었고, 여기서 코드가 꼬이게 되었다. 게임에는 항상 Event loop라는게 존재하고 Event가 발생했을 때 특정 함수를 실행해서 동작을 하도록 구현해야 했는데, 이 때 콜백 구조를 이용했다면 더 깔끔하게 코드를 작성하고 개발 난이도가 쉬워졌을텐데, 이벤트 루프를 메인에서 그냥 while문으로 돌리고 Status를 변수로 취급하여 게임을 설계하는 바람에 코드 구조를 많이 잘못 설계한 채로 구현을 진행했다. 이 부분이 너무 아쉬웠고, 다음에 학교 수업에서 게임을 만들어야 할 기회가 생긴다면 이러한 경험을 바탕으로 클래스 설계 등을 잘 해봐야겠다고 생각했다.

+ Recent posts