Skip to content

Instantly share code, notes, and snippets.

@jskDr
Created December 26, 2014 11:24
Show Gist options
  • Save jskDr/e84cf562325091e743cf to your computer and use it in GitHub Desktop.
Save jskDr/e84cf562325091e743cf to your computer and use it in GitHub Desktop.
Snake code by Korean C programming
// 예제 프로그램 :
// 뱀 경기에서 화면관리를 위해 사용되는 절차를 정의한다.
// 화면을 80*60(가로*세로)단위로 관리한다.
뱀화면 단원 .
사용 뱀입력 .
사용 단말기 .
절차 시작점 ( ) .
절차 마무리 ( ) .
절차 화면공간초기화 ( 정수 배경색 ) .
절차 경기장경계그리기 ( 정수 벽색 ) .
절차 장애물그리기 ( 정수 단계 ) .
절차 화면반칸그리기 ( 정수 가로, 정수 세로, 정수 색 ) => 부울 .
절차 다른색인가 ( 정수 가로, 정수 세로, 정수 색 ) => 부울 .
절차 같은색인가 ( 정수 가로, 정수 세로, 정수 색 ) => 부울 .
// -------------------------------------------------------------------
절차 미음자그리기 ( 정수 왼, 정수 위, 정수 오른, 정수 아래, 정수 색 ) .
절차 선그리기 ( 정수 왼, 정수 위, 정수 오른, 정수 아래, 정수 색 ) .
절차 가로로선그리기 ( 정수 줄수, 정수 가로시작, 정수 가로끝, 정수 색 ) .
절차 세로로선그리기 ( 정수 칸수, 정수 세로시작, 정수 세로끝, 정수 색 ) .
자료형 화면공간형 = 구조물 {
정수 줄_30, 색, 위아래 .
} .
화면공간형[81][61] 화면공간 .
정수 최대가로, 최대세로 .
/* -------------------- */ 구현부 /* ----------------------- */
절차 시작점 ( )
크기수 가로, 세로 .
{
//최대좌표얻기 ( 가로, 세로 ) .
최대좌표얻기 ( 정수(가로), 정수(세로) ) .
가로 > 79 { 참이면 가로 := 79. }
세로 > 29 { 참이면 세로 := 29. }
최대가로 := 가로+1 . 최대세로 := (세로+1)*2 .
}
절차 마무리 ( )
{
화면지우기 ( ) .
}
/* ---------------------------------------------------------------- */
절차 화면공간초기화 ( 정수 배경색 )
정수 가로, 세로 .
{
준비 세로 := 1 . 조절 세로 ++ .
되풀이 세로 <= 최대세로 참인 동안 {
준비 가로 := 1 . 조절 가로 ++ .
되풀이 가로 <= 최대가로 참인 동안 {
화면공간[가로][세로]->줄_30 := (세로+1)/2 .
화면공간[가로][세로]->위아래 := (세로%2)*2-1 . // 위반칸:1, 아래반칸:-1
화면공간[가로][세로]->색 := 배경색 .
}
}
배경색정하기 ( 배경색 ) . 화면지우기 ( ) .
}
절차 경기장경계그리기 ( 정수 벽색 )
{
미음자그리기 ( 1, 4, 최대가로, 최대세로 - 3, 벽색 ) .
}
절차 장애물그리기 ( 정수 단계 )
정수 i .
{
단계 값이 {
1 => .
2 =>
선그리기 ( 20, 25, 최대가로-20, 25, 벽색 ) .
3 =>
선그리기 ( 20, 10, 20, 최대세로-10, 벽색 ) .
선그리기 ( 최대가로-20, 10, 최대가로-20, 최대세로-10, 벽색 ) .
4 =>
선그리기 ( 20, 4, 20, 30, 벽색 ) .
선그리기 ( 60, 23, 60, (최대세로-6), 벽색 ) .
선그리기 ( 2, 38, 40, 38, 벽색 ) .
선그리기 ( 41, 15, 79, 15, 벽색 ) .
5 =>
선그리기 ( 21, 13, 21, 39, 벽색 ) .
선그리기 ( 59, 13, 59, 39, 벽색 ) .
선그리기 ( 23, 11, 57, 11, 벽색 ) .
선그리기 ( 23, 41, 57, 41, 벽색 ) .
6 =>
선그리기 ( 10, 4, 10, 22, 벽색 ) . 선그리기 ( 10, 31, 10, (최대세로-6), 벽색 ) .
선그리기 ( 20, 4, 20, 22, 벽색 ) . 선그리기 ( 20, 31, 20, (최대세로-6), 벽색 ) .
선그리기 ( 30, 4, 30, 22, 벽색 ) . 선그리기 ( 30, 31, 30, (최대세로-6), 벽색 ) .
선그리기 ( 40, 4, 40, 22, 벽색 ) . 선그리기 ( 40, 31, 40, (최대세로-6), 벽색 ) .
선그리기 ( 50, 4, 50, 22, 벽색 ) . 선그리기 ( 50, 31, 50, (최대세로-6), 벽색 ) .
선그리기 ( 60, 4, 60, 22, 벽색 ) . 선그리기 ( 60, 31, 60, (최대세로-6), 벽색 ) .
선그리기 ( 70, 4, 70, 22, 벽색 ) . 선그리기 ( 70, 31, 70, (최대세로-6), 벽색 ) .
7 =>
준비 i := 4 . 조절 i += 2 .
되풀이 i <= (최대세로-6) 참인 동안 { 화면반칸그리기 ( 40, i, 벽색 ) . }
8 =>
선그리기 ( 10, 4, 10, 40, 벽색 ) . 선그리기 ( 20, 13, 20, (최대세로-6), 벽색 ) .
선그리기 ( 30, 4, 30, 40, 벽색 ) . 선그리기 ( 40, 13, 40, (최대세로-6), 벽색 ) .
선그리기 ( 50, 4, 50, 40, 벽색 ) . 선그리기 ( 60, 13, 60, (최대세로-6), 벽색 ) .
선그리기 ( 70, 4, 70, 40, 벽색 ) .
9 =>
색깊이얻기() = 1{
참이면
준비 i := 6 . 조절 i ++ .
되풀이 i <= (최대세로-6) 참인 동안 {
화면반칸그리기 ( i, i, 벽색 ) .
화면반칸그리기 ( i + 28, i, 벽색 ) .
}
거짓이면
준비 i := 6 . 조절 i ++ .
되풀이 i <= 47 참인 동안 {
화면반칸그리기 ( i, i, 벽색 ) .
화면반칸그리기 ( i + 28, i, 벽색 ) .
}
}
그밖 =>
준비 i := 4 . 조절 i += 2 .
되풀이 i <= (최대세로-6) 참인 동안 {
화면반칸그리기 ( 10, i, 벽색 ) . 화면반칸그리기 ( 20, i + 1, 벽색 ) .
화면반칸그리기 ( 30, i, 벽색 ) . 화면반칸그리기 ( 40, i + 1, 벽색 ) .
화면반칸그리기 ( 50, i, 벽색 ) . 화면반칸그리기 ( 60, i + 1, 벽색 ) .
화면반칸그리기 ( 70, i, 벽색 ) .
}
}
}
/* ---------------------------------------------------------------- */
절차 다른색인가 ( 정수 가로, 정수 세로, 정수 색 ) => 부울
{
세로 ~= 0 {
참이면 ( 화면공간[가로][세로]->색 ~= 색 ) 넘긴다 .
}
}
절차 같은색인가 ( 정수 가로, 정수 세로, 정수 색 ) => 부울
{
세로 ~= 0 {
참이면 ( 화면공간[가로][세로]->색 = 색 ) 넘긴다 .
}
참 넘긴다 .
}
절차 화면반칸그리기 ( 정수 가로, 정수 세로, 정수 색 ) => 부울
정수 줄_30 .
정수 위아래_세로, 위아래색, 위아래표시 .
{
세로 <= 0 { 참이면 거짓 넘긴다. }
화면공간[가로][세로]->색 := 색 . /* 화면공간변수 값 설정 */
줄_30 := 화면공간[가로][세로]->줄_30 .
위아래표시 := 화면공간[가로][세로]->위아래 .
위아래_세로 := 세로 + 화면공간[가로][세로]->위아래 .
위아래색 := 화면공간[가로][위아래_세로]->색 .
커서위치정하기 ( 가로-1, 줄_30-1 ) .
색 = 위아래색 { /* 화면에 그린다. */
참이면
글자색정하기 ( 색 ) . 배경색정하기 ( 색 ) .
단말기->글자쓰기 ( 글자(219) ) .
거짓이면
위아래표시 = -1 {
참이면
글자색정하기 ( 색 ) . 배경색정하기 ( 위아래색 ) .
단말기->글자쓰기 ( 글자(220) ) .
거짓이면
글자색정하기 ( 색 ) . 배경색정하기 ( 위아래색 ) .
단말기->글자쓰기 ( 글자(223) ) .
}
}
참 넘긴다.
}
/* ---------------------------------------------------------------- */
절차 미음자그리기 ( 정수 왼, 정수 위, 정수 오른, 정수 아래, 정수 색 )
{
선그리기 ( 왼, 위, 오른, 위, 색 ) .
선그리기 ( 오른, 위+1, 오른, 아래, 색 ) .
선그리기 ( 왼, 아래, 오른-1, 아래, 색 ) .
선그리기 ( 왼, 위+1, 왼, 아래-1, 색 ) .
}
절차 선그리기 ( 정수 왼, 정수 위, 정수 오른, 정수 아래, 정수 색 )
{
확인 { 0<왼 그리고 왼<=오른 그리고 오른<=최대가로. }
확인 { 0<위 그리고 위<=아래 그리고 아래<=최대세로. }
왼 = 오른 {
참이면 세로로선그리기 ( 왼, 위, 아래, 색 ) .
}
위 = 아래 {
참이면 가로로선그리기 ( 위, 왼, 오른, 색 ) .
}
}
절차 가로로선그리기
(
정수 줄수, 정수 가로시작, 정수 가로끝, 정수 색
)
정수 칸수 .
{
확인 { 0<줄수 그리고 줄수<=최대세로 그리고
0<가로시작 그리고 가로시작<=가로끝 그리고 가로끝<=최대가로 . }
준비 칸수 := 가로시작 . 조절 칸수 ++ .
되풀이 칸수 <= 가로끝 참인 동안 {
화면반칸그리기 ( 칸수, 줄수, 색 ) .
}
}
절차 세로로선그리기
(
정수 칸수 , 정수 세로시작, 정수 세로끝, 정수 색
)
정수 줄수 .
{
확인 { 0<칸수 그리고 칸수<=최대가로 그리고
0<세로시작 그리고 세로시작<=세로끝 그리고 세로끝<=최대세로 . }
준비 줄수 := 세로시작 . 조절 줄수 ++ .
되풀이 줄수 <= 세로끝 참인 동안 {
화면반칸그리기 ( 칸수, 줄수, 색 ) .
}
}
[출처] [씨앗] 뱀놀이 예제 - 뱀화면.sd|작성자 안드레아
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment