{"id":16586144,"url":"https://github.com/dinohan/ssu-programing-project","last_synced_at":"2026-04-16T06:03:57.261Z","repository":{"id":112085881,"uuid":"184207428","full_name":"dinohan/ssu-programing-project","owner":"dinohan","description":null,"archived":false,"fork":false,"pushed_at":"2019-06-09T07:09:23.000Z","size":8396,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-06T07:54:25.282Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dinohan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-30T06:48:16.000Z","updated_at":"2019-06-09T07:09:25.000Z","dependencies_parsed_at":"2023-07-31T13:18:08.852Z","dependency_job_id":null,"html_url":"https://github.com/dinohan/ssu-programing-project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dinohan/ssu-programing-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dinohan%2Fssu-programing-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dinohan%2Fssu-programing-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dinohan%2Fssu-programing-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dinohan%2Fssu-programing-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dinohan","download_url":"https://codeload.github.com/dinohan/ssu-programing-project/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dinohan%2Fssu-programing-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31873607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T22:50:42.956Z","updated_at":"2026-04-16T06:03:57.245Z","avatar_url":"https://github.com/dinohan.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# 소코반 프로젝트\r\n\r\n## 팀원\r\n\r\n#### 이강준 20192852\r\n\r\n* GitHub ID : Ladun\r\n* Part\r\n  * add `MapLoading()`\r\n\r\n#### 이재호 20192860\r\n\r\n* GitHub ID : BBoBLi\r\n* Part\r\n  * 조장\r\n  * add `Render()`, `SetMap()`, `gotoxy()`, `getch()`\r\n\r\n#### 정준서 20192873\r\n\r\n* GitHub ID : juns1s\r\n* Part\r\n  * -\r\n\r\n#### 한도협 20192880\r\n* GitHub ID : dinohan\r\n* Part\r\n  * GitHub 관리\r\n  * add `Input()`, `New()`, `Clear()`\r\n\r\n## 프로그램\r\n\r\n* [main.c](./main.c)\r\n* [map.txt](./map.txt)\r\n* [ranking.txt](./ranking.txt)\r\n* [sokoban.txt](./sokoban.txt)\r\n\r\n프로그램 설명은 [보고서](./REPORT.md) 참조\r\n\r\n## [Notion](https://www.notion.so/dinohan/Sokoban-8149ab2adfbf4249a073d10d1d1a2970)\r\n\r\n##\t[문제 설명](./project.pdf)\r\n\r\n* **목적** : 소코반 게임을 프로그래밍 함으로써 C 프로그래밍 기법을 익히고 프로그래밍 능력 향상\r\n* **팀** : 4인 1팀\r\n* **제출물** : 하드카피(프로그램 개요, 프로그램 소스, 실행 화면), 모든 제출물은 스마트캠퍼스로도 제출. 스마트캠퍼스에 제출할 때 각 파일을 기본 `.zip` 프로그램으로 묶고 파일 이름은 대표 학생 학번으로 할 것\r\n* **기한** : 6월 9일 일요일\r\n\r\n### 요구조건\r\n\r\n0. 프로그램 검사는 요구 조건에 기술된 대로 함. 즉, **요구 조건**을 따르지 않으면 **0점** 처리됨\r\n\r\n1. 맵은 최대 5개가 저장된 파일에서 읽어드림. 맵 파일의 파일명은 `map`으로 하고 다음과 같은 형식으로 저장함(`@`: 창고지기, `#` : 벽, `$` : 박스(금), `O`: 보관장소, 숫자(레벨) : 새로운 맵 시작, `e` : 맵 끝, `.` : blank). 단, 각 맵의 가로와 세로 길이는 각각 최대 `30` 임\r\n\r\n2. `map`을 읽은 다음 각 레벨별로 박스`$`의 개수와 보관장소`O` 개수가 같은지 확인하고 같지 않다면 오류 메시지를 출력하고 종료함 \r\n\r\n3. 프로그램이 시작되면 먼저 **사용자 이름**을 입력받음(영문 최대 `10`문자) \r\n\r\n4. 게임은 입력된 맵을 모두 완수하면 축하메시지 출력하고 종료함\r\n\r\n5. 각 레벨별로 **게임 순위**를 유지해야 함. 순위는 키보드로 창고지기를 움직인 횟수가 짧을수록 순위가 높고 **5명**을 유지함. 만일 움직인 횟수가 같다면 이전에 플레이한 플레이어가 더 높은 순위를 가짐. `undo`도 움직임에 포함되어야 함. 프로그램이 종료되기 전에 `ranking.txt` 파일에 순위를 저장해야 함 \r\n\r\n6. 게임을 중간에 중단하고 다시 시작했으면 움직인 개수를 이어주어야 함 \r\n\r\n7. 다음 명령을 지원해야 함 \r\n  * `h` (왼쪽), `j` (아래), `k` (위), `l` (오른쪽) : 창고지기 조정\r\n\r\n  * `u` (undo) : 최대 5번 할 수 있음\r\n\r\n  * `r` (replay) : 현재 맵을 처음부터 다시 시작(움직임 횟수는 계속 유지)\r\n\r\n  * `n` (new) : 첫 번째 맵부터 다시 시작(움직임 횟수 기록 삭제)\r\n\r\n  * `e` (exit) : 게임 종료. 종료하기 전 필요한 정보 저장해야 함\r\n\r\n  * `s` (save) : 현재 상태 파일에 저장. 파일 이름은 `sokoban`으로 하고 다음에 다시 게임을 연속해서 할 수 있도록 모든 상태 저장해야 함 \r\n\r\n  * `f` (file load) : `sokoban` 파일에서 저장된 내용을 읽어 `save` 시점에서부터 이어서 게임하게 함 \r\n\r\n  * `d` (display help) : 명령 내용 보여줌\r\n\r\n  * `t` (top) : 게임 순위 보여줌. `t` 만 입력하면 전체 순위. `t` 다음 숫자가 오면 해당 맵의 순위\r\n  \r\n8. `map` , `ranking` , `sokoban` 파일은 모두 **텍스트 파일**로 만들어야 함 \r\n\r\n9. `cygwin `에서 **컴파일** 되어야 하며 컴파일 오류는 **0점**\r\n\r\n10. copy 하면 모두 **0점**\r\n\r\n11. 프로젝트 진행은 `GitHub`를 통해서 해야 함 \r\n\r\n12. 프로젝트 제출시 **점수표**에 자체 평가 점수를 적어서 제출하고 거짓으로 평가하면 감점함. **참여율**은 참여도에 따라 기입하는데 팀원 참여율의 합은 100이 되도록 해야 함 \r\n\r\n13. 팀원이 동등하게 프로젝트에 참여했다면 **개인 점수**는 팀이 받은 점수를 받지만, 불균등하게 참여했 다면 참여율에 따라 다음과 같이 개인 점수가 부여됨\r\n\r\n    \u003e점수 = 팀점수 * 참여율 * 팀원수\r\n\r\n14. 프로젝트 검사시 **테스트 방법**\r\n\r\n```\r\n$ cat testfile khhjjhhhhhkke\r\n$ ./a \u003c testfile\r\n```\r\n\r\n15. 예제 화면\r\n\r\n```\r\n$ sokoban\r\nStart....\r\ninput name : kmh\r\n```\r\n\r\n```\r\n\tHello kmh\r\n\r\n    #####\r\n    #   #\r\n    #$  #\r\n  ###  $###\r\n  #  $  $ #\r\n### # ### #     ######\r\n#   # ### #######  OO#\r\n# $  $             OO#\r\n##### #### #@####  OO#\r\n    #     ###  ######\r\n    ########\r\n(Command) // t 명령만 enter로 입력받음, 다른 명령은 누름과 동시에 실행.\r\n```\r\n\r\n```\r\n\tHello kmh\r\n\r\n    #####\r\n    #   #\r\n    #$ $#\r\n  ###   ###\r\n  #       #\r\n### #@### #     ######\r\n#   #$### #######  $$#\r\n#                  OO#\r\n##### #### # ####  O$#\r\n    #     ###  ######\r\n    ########\r\n(Command) h j k l\r\n```\r\n\r\n```\r\n\tHello kmh\r\n\t\r\nh(왼쪽), j(아래), k(위), l(오른쪽) u(undo)\r\nr(replay)\r\nn(new)\r\ne(exit)\r\ns(save)\r\nf(file load) d(display help) t(top)\r\n(Command) d\r\n```\r\n\r\n```\r\n\tHello kmh\r\n\r\nmap 1\r\nkmh 50\r\nkmh 65\r\nlee 70\r\n(Command) t\r\n```\r\n\r\n```\r\nSEE YOU kmh....\r\n\r\n(command) e\r\n```\r\n\r\n\r\n\r\n## 평가\r\n\r\n| 과목  | 프로그래밍 기초 및 실습 | 팀 프로젝트 | 점 |\r\n| :-----: | :-----------------------: | :-----------: | :------: |\r\n|       | **학번**                | **이름**    | **참여율** |\r\n| 팀원1 | 20192852                | 이강준      |        |\r\n| 팀원2 | 20192860                | 이재호      |        |\r\n| 팀원3 | 20192873                | 정준서      |        |\r\n| 팀원4 | 20192880                | 한도협      |        |\r\n\r\n\r\n\r\n| 평가항목                                    | 구현여부 | 배점 | 평가점수 |\r\n| ------------------------------------------- | :--------: | :----: | :--------: |\r\n| 1. 파일로부터 맵을 정상적으로 읽어들이는가? |          | 5    |          |\r\n|2. 읽어드린 맵의 오류를 처리하는가?||4||\r\n|3. 사용자명을 입력받고 유지하는가?||3||\r\n|4. 모든 맵을 완수한 후 프로그램이 종료되는가?||3||\r\n|5. 순위 처리가 정확히 되는가?||4||\r\n|6. 프로그램이 종료되더라도 순위가 유지되는가?||4||\r\n|7. `h`, `j`, `k`, `l` 키로 이동이 제대로 되는가?||5||\r\n|8. `undo` 기능이 제대로 동작하는가?||8||\r\n|9. `replay` 기능이 제대로 동작하는가?||5||\r\n|10. `new` 기능이 제대로 동작하는가?||5||\r\n|11. `exit` 기능이 제대로 동작하는가?||5||\r\n|12. `save` 기능이 제대로 동작하는가?||4||\r\n|13. `file load` 기능이 제대로 동작하는가?||10||\r\n|14. `display help` 기능이 제대로 동작하는가?||3||\r\n|15. `top` 기능이 제대로 동작하는가?||4||\r\n|16. 맵 별 `top` 기능이 제대로 동작하는가?||4||\r\n|17. 프로그램 코드는 함수별로 설계 되었는가?||8||\r\n|18. `GitHub`를 잘 활용했는가?||8||\r\n|19. 출력물에 주석문, 함수 요약 설명, 역할 분담 명시가 잘 되어 있는가?||8||\r\n|합계||100||\r\n\r\n* 팀원들 참여율의 총합이 100%가 되게 명시해야 하며, 각자의 분담 영역을 보고서에 확실히 밝힐 것\r\n* 컴파일 시 오류가 발생하여 실행할 수 없는 경우에는 0점 처리가 됨\r\n* Copy 본으로 판명되면 0점 처리\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdinohan%2Fssu-programing-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdinohan%2Fssu-programing-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdinohan%2Fssu-programing-project/lists"}