https://github.com/seongwonp/shooting_game
C 언어와 Windows 콘솔 환경을 활용해 개발한 우주선 슈팅 게임입니다.
https://github.com/seongwonp/shooting_game
c console-game windows
Last synced: 9 months ago
JSON representation
C 언어와 Windows 콘솔 환경을 활용해 개발한 우주선 슈팅 게임입니다.
- Host: GitHub
- URL: https://github.com/seongwonp/shooting_game
- Owner: Seongwonp
- Created: 2023-12-05T11:13:30.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-09-12T13:35:12.000Z (10 months ago)
- Last Synced: 2025-09-12T16:00:59.722Z (10 months ago)
- Topics: c, console-game, windows
- Language: C
- Homepage:
- Size: 1.39 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 🚀 슈팅 게임 – C 언어 콘솔 프로젝트

> C 언어와 Windows 콘솔 환경을 활용해 개발한 **우주선 슈팅 게임**입니다.
> 시작 화면부터 플레이어/적 이동, 총알 발사, 충돌 판정, 점수 시스템까지
> 다양한 기능을 직접 구현하며 콘솔 기반 게임 프로그래밍을 경험했습니다.
---
## 🎯 주요 특징
- ASCII 아트로 구성된 시작 화면
- 방향키 이동 및 스페이스바 총알 발사
- 적 랜덤 생성 및 충돌 판정
- 점수 집계, 생명 시스템, 게임 오버 화면
- 실시간 입력 처리 (`GetAsyncKeyState`) 및 커서 제어 (`gotoxy`)
---
## 📌 프로젝트 개요
- **언어**: C
- **개발 환경**: Visual Studio (Windows 10)
- **플랫폼**: Windows 콘솔 애플리케이션
- **목표**: Windows API와 C 언어만을 활용하여 고전 슈팅 게임 구현
- **주요 기능**:
- ASCII 아트로 구성된 시작 화면
- 플레이어 및 적 이동
- 총알 발사 및 충돌 판정
- 점수 집계 및 게임 오버 화면
---
## 🔍 기술적 연구
- `windows.h`, `stdbool.h` 헤더 학습
- 커서 이동을 위한 `gotoxy()` 구현
- `kbhit()` 대신 `GetAsyncKeyState()`를 사용하여 실시간 입력 처리
- 캐릭터 겹침 현상 및 무한 생성 버그 해결
- 메모리 최적화 및 성능 개선
---
## 🎮 게임 기능
### 🖼️ 시작 화면
- ASCII 아트 인트로
- 메뉴 옵션: 게임 시작, 도움말, 종료
### 🎮 게임 플레이
- 방향키로 플레이어 이동
- 스페이스바로 총알 발사
- 적은 랜덤 위치에서 생성되어 이동
- 총알과 적의 충돌 판정
- 적 처치 시 점수 +10
### 💥 게임 오버
- 플레이어는 3개의 생명(하트)을 가짐
- 생명 소진 시 게임 종료
- 최종 점수와 "THE END" 메시지 출력
---
## ⚙️ 구현 세부사항
### 📁 헤더 파일
- `player_functions.h`: 텍스트 색상, 커서 숨김, gotoxy 함수
- `game_functions.h`: 메뉴, 도움말 화면, 플레이어 그리기/지우기
### 📂 소스 파일
- `player_functions.c`: Windows API 기반 커서 및 색상 처리
- `game_functions.c`: UI 및 플레이어 렌더링
- `Shooting_game.c`: 메인 게임 루프, 입력 처리, 적 로직, 충돌 판정
### ⌨️ 실시간 입력 처리
```c
if (GetAsyncKeyState(VK_LEFT) & 0x8000) {
*ch = LEFT;
}
```
- 부드러운 이동 지원
- 다중 키 입력 가능
- 게임과 같은 인터랙티브 환경에 적합
---
## 🛠️ 개발 로그
| 날짜 | 진행 내용 |
|--------------|-----------|
| 2023-09-01 | 프로젝트 시작 |
| 2023-09-08 | 주제 선정 및 계획 |
| 2023-09-20 | 기본적인 뼈대 완성 |
| 2023-10-08 | 시작 화면 구현 완료 |
| 2023-10-31 | ASCII 아트 수정, 도움말 화면 추가, 입력 버그 수정 |
| 2023-11-02 | 총알 발사(Space), 속도 조절(Q/E) 기능 추가 |
| 2023-11-15 | 적 랜덤 생성, 겹침 현상 해결 |
| 2023-11-20 | 적 총알 로직, 생명 시스템 추가 |
| 2023-11-25 | 점수 시스템 구현, 충돌 버그 수정 |
| 2023-12-03 | 적 생성 위치 조정, 총알 시각 개선 |
| 2023-12-10 | 시작 화면 리디자인, 최종 테스트 완료 |
| 2023-12-13 | ASCII 문자 → "●" 변경, 테두리 추가 |
---
## 📸 게임 화면
### 🧵 시작 화면 리디자인
**이전 버전**

⬇️
**최신 버전**

---
### ❓ 도움말 페이지
> 조작법 안내 후 키 입력 대기

---
### ❤️ 생명 시스템

➡️

➡️

---
### 🕹️ 게임 플레이 미리보기

---
### 💀 게임 오버 화면

---
## 🔧 예정 기능
- 아이템 드롭 (추가 생명, 무기 강화)
- 단계별 난이도 조절
- 배경음 및 효과음 추가
- 저장 기능 및 최고 점수 랭킹
---
## 🧠 어려웠던 점 & 배운 것
- `kbhit()` 없이 실시간 입력 구현이 까다로웠음
- ASCII 아트 디자인에 많은 시간 소요
- 헤더/소스 파일 분리로 모듈화 학습
- Windows 콘솔 프로그래밍에 대한 이해도 향상
---
## 📚 참고 자료
- 윤성우의 열혈 C 프로그래밍 (2010)
- Dongkyung 블로그
- Cinrueom 블로그
- Coding Factory
- Wikipedia: [windows.h](https://ko.wikipedia.org/wiki/Windows.h)
---
## 💭 회고
이번 슈팅 게임 프로젝트는 단순한 콘솔 게임 구현을 넘어
**C 언어의 구조적 사고와 시스템 프로그래밍의 기초를 몸으로 익히는 과정**이었습니다.
처음에는 단순히 캐릭터를 움직이고 점수를 올리는 기능을 구현하는 데 집중했지만,
점차 게임의 흐름을 제어하고, 사용자 입력을 실시간으로 처리하며,
**모듈화된 구조로 기능을 분리하는 설계의 중요성**을 깊이 체감하게 되었습니다.
특히 `gotoxy()`와 `GetAsyncKeyState()`를 활용한 커서 제어와 실시간 입력 처리 과정은
**콘솔 환경에서도 충분히 인터랙티브한 사용자 경험을 만들 수 있다는 가능성**을 보여주었고,
단순한 텍스트 기반 UI에서도 **몰입감 있는 게임 플레이**를 구현할 수 있다는 점에서 큰 재미와 성취감을 느꼈습니다.
또한, 헤더 파일과 소스 파일을 기능별로 나누고,
게임 루프, 충돌 판정, 점수 시스템 등을 구조적으로 설계하면서
**코드의 가독성과 유지보수성**이 얼마나 중요한지 직접 경험할 수 있었습니다.
무엇보다도, 이 프로젝트는 “C 언어로 무엇을 만들 수 있을까?”라는 질문에
**나만의 답을 찾아가는 여정**이었고,
그 과정에서 얻은 자신감은 앞으로의 콘솔 게임 프로그래밍 학습에 큰 자산이 될 것입니다.