https://github.com/dinohan/ssu-programing-project
https://github.com/dinohan/ssu-programing-project
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/dinohan/ssu-programing-project
- Owner: dinohan
- Created: 2019-04-30T06:48:16.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-06-09T07:09:23.000Z (about 7 years ago)
- Last Synced: 2025-03-06T07:54:25.282Z (over 1 year ago)
- Language: C
- Size: 8.01 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 소코반 프로젝트
## 팀원
#### 이강준 20192852
* GitHub ID : Ladun
* Part
* add `MapLoading()`
#### 이재호 20192860
* GitHub ID : BBoBLi
* Part
* 조장
* add `Render()`, `SetMap()`, `gotoxy()`, `getch()`
#### 정준서 20192873
* GitHub ID : juns1s
* Part
* -
#### 한도협 20192880
* GitHub ID : dinohan
* Part
* GitHub 관리
* add `Input()`, `New()`, `Clear()`
## 프로그램
* [main.c](./main.c)
* [map.txt](./map.txt)
* [ranking.txt](./ranking.txt)
* [sokoban.txt](./sokoban.txt)
프로그램 설명은 [보고서](./REPORT.md) 참조
## [Notion](https://www.notion.so/dinohan/Sokoban-8149ab2adfbf4249a073d10d1d1a2970)
## [문제 설명](./project.pdf)
* **목적** : 소코반 게임을 프로그래밍 함으로써 C 프로그래밍 기법을 익히고 프로그래밍 능력 향상
* **팀** : 4인 1팀
* **제출물** : 하드카피(프로그램 개요, 프로그램 소스, 실행 화면), 모든 제출물은 스마트캠퍼스로도 제출. 스마트캠퍼스에 제출할 때 각 파일을 기본 `.zip` 프로그램으로 묶고 파일 이름은 대표 학생 학번으로 할 것
* **기한** : 6월 9일 일요일
### 요구조건
0. 프로그램 검사는 요구 조건에 기술된 대로 함. 즉, **요구 조건**을 따르지 않으면 **0점** 처리됨
1. 맵은 최대 5개가 저장된 파일에서 읽어드림. 맵 파일의 파일명은 `map`으로 하고 다음과 같은 형식으로 저장함(`@`: 창고지기, `#` : 벽, `$` : 박스(금), `O`: 보관장소, 숫자(레벨) : 새로운 맵 시작, `e` : 맵 끝, `.` : blank). 단, 각 맵의 가로와 세로 길이는 각각 최대 `30` 임
2. `map`을 읽은 다음 각 레벨별로 박스`$`의 개수와 보관장소`O` 개수가 같은지 확인하고 같지 않다면 오류 메시지를 출력하고 종료함
3. 프로그램이 시작되면 먼저 **사용자 이름**을 입력받음(영문 최대 `10`문자)
4. 게임은 입력된 맵을 모두 완수하면 축하메시지 출력하고 종료함
5. 각 레벨별로 **게임 순위**를 유지해야 함. 순위는 키보드로 창고지기를 움직인 횟수가 짧을수록 순위가 높고 **5명**을 유지함. 만일 움직인 횟수가 같다면 이전에 플레이한 플레이어가 더 높은 순위를 가짐. `undo`도 움직임에 포함되어야 함. 프로그램이 종료되기 전에 `ranking.txt` 파일에 순위를 저장해야 함
6. 게임을 중간에 중단하고 다시 시작했으면 움직인 개수를 이어주어야 함
7. 다음 명령을 지원해야 함
* `h` (왼쪽), `j` (아래), `k` (위), `l` (오른쪽) : 창고지기 조정
* `u` (undo) : 최대 5번 할 수 있음
* `r` (replay) : 현재 맵을 처음부터 다시 시작(움직임 횟수는 계속 유지)
* `n` (new) : 첫 번째 맵부터 다시 시작(움직임 횟수 기록 삭제)
* `e` (exit) : 게임 종료. 종료하기 전 필요한 정보 저장해야 함
* `s` (save) : 현재 상태 파일에 저장. 파일 이름은 `sokoban`으로 하고 다음에 다시 게임을 연속해서 할 수 있도록 모든 상태 저장해야 함
* `f` (file load) : `sokoban` 파일에서 저장된 내용을 읽어 `save` 시점에서부터 이어서 게임하게 함
* `d` (display help) : 명령 내용 보여줌
* `t` (top) : 게임 순위 보여줌. `t` 만 입력하면 전체 순위. `t` 다음 숫자가 오면 해당 맵의 순위
8. `map` , `ranking` , `sokoban` 파일은 모두 **텍스트 파일**로 만들어야 함
9. `cygwin `에서 **컴파일** 되어야 하며 컴파일 오류는 **0점**
10. copy 하면 모두 **0점**
11. 프로젝트 진행은 `GitHub`를 통해서 해야 함
12. 프로젝트 제출시 **점수표**에 자체 평가 점수를 적어서 제출하고 거짓으로 평가하면 감점함. **참여율**은 참여도에 따라 기입하는데 팀원 참여율의 합은 100이 되도록 해야 함
13. 팀원이 동등하게 프로젝트에 참여했다면 **개인 점수**는 팀이 받은 점수를 받지만, 불균등하게 참여했 다면 참여율에 따라 다음과 같이 개인 점수가 부여됨
>점수 = 팀점수 * 참여율 * 팀원수
14. 프로젝트 검사시 **테스트 방법**
```
$ cat testfile khhjjhhhhhkke
$ ./a < testfile
```
15. 예제 화면
```
$ sokoban
Start....
input name : kmh
```
```
Hello kmh
#####
# #
#$ #
### $###
# $ $ #
### # ### # ######
# # ### ####### OO#
# $ $ OO#
##### #### #@#### OO#
# ### ######
########
(Command) // t 명령만 enter로 입력받음, 다른 명령은 누름과 동시에 실행.
```
```
Hello kmh
#####
# #
#$ $#
### ###
# #
### #@### # ######
# #$### ####### $$#
# OO#
##### #### # #### O$#
# ### ######
########
(Command) h j k l
```
```
Hello kmh
h(왼쪽), j(아래), k(위), l(오른쪽) u(undo)
r(replay)
n(new)
e(exit)
s(save)
f(file load) d(display help) t(top)
(Command) d
```
```
Hello kmh
map 1
kmh 50
kmh 65
lee 70
(Command) t
```
```
SEE YOU kmh....
(command) e
```
## 평가
| 과목 | 프로그래밍 기초 및 실습 | 팀 프로젝트 | 점 |
| :-----: | :-----------------------: | :-----------: | :------: |
| | **학번** | **이름** | **참여율** |
| 팀원1 | 20192852 | 이강준 | |
| 팀원2 | 20192860 | 이재호 | |
| 팀원3 | 20192873 | 정준서 | |
| 팀원4 | 20192880 | 한도협 | |
| 평가항목 | 구현여부 | 배점 | 평가점수 |
| ------------------------------------------- | :--------: | :----: | :--------: |
| 1. 파일로부터 맵을 정상적으로 읽어들이는가? | | 5 | |
|2. 읽어드린 맵의 오류를 처리하는가?||4||
|3. 사용자명을 입력받고 유지하는가?||3||
|4. 모든 맵을 완수한 후 프로그램이 종료되는가?||3||
|5. 순위 처리가 정확히 되는가?||4||
|6. 프로그램이 종료되더라도 순위가 유지되는가?||4||
|7. `h`, `j`, `k`, `l` 키로 이동이 제대로 되는가?||5||
|8. `undo` 기능이 제대로 동작하는가?||8||
|9. `replay` 기능이 제대로 동작하는가?||5||
|10. `new` 기능이 제대로 동작하는가?||5||
|11. `exit` 기능이 제대로 동작하는가?||5||
|12. `save` 기능이 제대로 동작하는가?||4||
|13. `file load` 기능이 제대로 동작하는가?||10||
|14. `display help` 기능이 제대로 동작하는가?||3||
|15. `top` 기능이 제대로 동작하는가?||4||
|16. 맵 별 `top` 기능이 제대로 동작하는가?||4||
|17. 프로그램 코드는 함수별로 설계 되었는가?||8||
|18. `GitHub`를 잘 활용했는가?||8||
|19. 출력물에 주석문, 함수 요약 설명, 역할 분담 명시가 잘 되어 있는가?||8||
|합계||100||
* 팀원들 참여율의 총합이 100%가 되게 명시해야 하며, 각자의 분담 영역을 보고서에 확실히 밝힐 것
* 컴파일 시 오류가 발생하여 실행할 수 없는 경우에는 0점 처리가 됨
* Copy 본으로 판명되면 0점 처리