뱀놀이 예제

차례
 
지금까지의 글들에서 씨앗의 코드 조각들을 많이 보았기 때문이 여기에서는 씨앗으로 된 완전한 응용 프로그램 하나를 소개한다.
이 예제는 씨앗으로 만들어진 '뱀놀이'로, 2인용 게임이 가능하다. 모두 다섯 개의 단원으로 되어 있다.
 

뱀놀이.sd

Copyright © 1994 by 나눔기술. All rights reserved.
 
뱀놀이 단원 . 사용 뱀일반, 뱀입력, 뱀화면, 뱀조절 . 사용 바탕, 단말기, 단말흐름 . 절차 시작점 ( ) . /* -------------------- */ 구현부 /* ----------------------- */ 절차 철수뱀순이뱀만들기 ( ) . 절차 경기하기 ( ) . 절차 단계정하기 ( 정수 어떻게 ) . 절차 글쇠받아처리하기 ( ) . 상수 시작단계=1, 다음단계=2, 현단계그대로=3 . 정수 현단계 . 큰정수 속도 . 정수 장애물뱀수, 경기장단계 . 부울 철수하나요, 순이하나요, 칼라화면인가, 속도증가하는가 . 정수 철수뱀, 순이뱀 . 절차 시작점 ( ) 정수 속도단계 . { 선택사항입력받기 ( 철수하나요, 순이하나요, 장애물뱀수, 속도단계, 속도증가하는가, 칼라화면인가, 경기장단계 ) . ~철수하나요 그리고 ~순이하나요 그리고 장애물뱀수=0 { 참이면 마치기(0) . } 색설정하기 ( 칼라화면인가 ) . 속도 := 200-속도단계 . 모아쓰기끄기() . 철수뱀순이뱀만들기 ( ) . 현단계 := --경기장단계 . 단계정하기 ( 다음단계 ) . 자동뱀만들기 ( 장애물뱀수, 벽색 ) . 전체뱀속도정하기 ( 속도 ) . 경기시작 ( 547 ) . 되풀이 { 경기하기 ( ) . 모아쓰기켜기 ( ) . 또합니까 ( 최대세로 ) { 참이면 모아쓰기끄기 ( ) . 철수하나요 { 참이면 뱀초기화 ( 철수뱀, 뱀1색, 5, 0, 수동동작 ) . } 순이하나요 { 참이면 뱀초기화 ( 순이뱀, 뱀2색, 5, 0, 수동동작 ) . } 단계정하기 ( 현단계그대로 ) . 거짓이면 나간다 . } } 철수하나요 { 참이면 뱀없애기 ( 철수뱀 ) . } 순이하나요 { 참이면 뱀없애기 ( 순이뱀 ) . } 자동뱀없애기 ( ) . 모아쓰기켜기() . 글자색정하기 ( 15 ) . 배경색정하기 ( 0 ) . 화면지우기 ( ) . } 절차 경기하기 ( ) 정수 경기장상태 . 정수 뱀번호 . { 되풀이 { 글쇠받아처리하기 ( ) . 경기장상태 := 모든뱀움직이기 ( 뱀번호 ) . 경기장상태 값이 { 뱀다죽었다 => 나간다. 먹이다먹었다 => 자동뱀없애기 ( ) . 단계정하기 ( 다음단계 ) . 자동뱀만들기 ( 장애물뱀수, 벽색 ) . 경기시작 ( 547 ) . 조건 { 철수하나요 참이면 뱀이름붙여점수산놈수출력하기 ( 철수뱀, 우상, "철수뱀" ) . 순이하나요 참이면 . 뱀이름붙여점수산놈수출력하기 ( 순이뱀, 좌상, "순이뱀" ) . 아니면 . } 먹이먹었다 => 조건 { 뱀번호=철수뱀 참이면 뱀이름붙여점수산놈수출력하기 ( 철수뱀, 우상, "철수뱀" ) . 뱀번호=순이뱀 참이면 . 뱀이름붙여점수산놈수출력하기 ( 순이뱀, 좌상, "순이뱀" ) . 아니면 . } } } } 절차 철수뱀순이뱀만들기 ( ) { 철수하나요 { 참이면 철수뱀:=뱀만들기(뱀1색) . 뱀초기화 ( 철수뱀, 뱀1색, 5, 0, 수동동작 ) . 뱀위치방향초기화 ( 철수뱀, 1, 3, 45, 34, 위, 80, 참 ) . } 순이하나요 { 참이면 순이뱀 := 뱀만들기 ( 뱀2색 ) . 뱀초기화 ( 순이뱀, 뱀2색, 5, 0, 수동동작 ) . 뱀위치방향초기화 ( 순이뱀, 1, 3, 45, 34, 위, 80, 참 ) . } } 절차 단계정하기 ( 정수 어떻게 ) { 화면공간초기화 ( 배경색 ) . 경기장경계그리기 ( 벽색 ) . 어떻게 값이 { 시작단계 => 현단계 := 1 . 다음단계 => 현단계 ++ . 그밖 => . } 장애물그리기 ( 현단계 ) . 현단계 값이 { 1 => . 뱀위치방향초기화 ( 철수뱀, 1, 2, 50, 25, 오른, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 30, 25, 왼, 80, 참 ) . 2 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 60, 7, 왼, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 20, 43, 오른, 80, 참 ) . 3 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 50, 25, 위, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 30, 25, 아래, 80, 참 ) . 4 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 60, 7, 왼, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 20, 43, 오른, 80, 참 ) . 5 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 50, 25, 위, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 30, 25, 아래, 80, 참 ) . 9 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 75, 40, 위, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 5, 15, 아래, 80, 참 ) . 6 => . | 7 => . | 8 => . | 그밖 => 뱀위치방향초기화 ( 철수뱀, 1, 2, 65, 7, 아래, 80, 참 ) . 뱀위치방향초기화 ( 순이뱀, 1, 2, 15, 43, 위, 80, 참 ) . } } 절차 글쇠받아처리하기 ( ) 크기수 가상글쇠하나 . { 가상글쇠하나 := 가상글쇠부호얻기 ( ~기다려라 ) . 가상글쇠하나 값이 { 글쇠_처음 => 가상글쇠부호얻기 ( 기다려라 ) . 글쇠_끝 => 마치기 ( 0 ) . 글쇠_쪽위로 => 속도 -= 10 . 전체뱀속도정하기 ( 속도 ) . 글쇠_쪽아래로 => 속도 += 10 . 전체뱀속도정하기 ( 속도 ) . } 철수하나요 { 참이면 가상글쇠하나 값이 { 글쇠_위로 => 뱀방향정하기 ( 철수뱀, 위 ) . 글쇠_아래로 => 뱀방향정하기 ( 철수뱀, 아래 ) . 글쇠_왼쪽으로 => 뱀방향정하기 ( 철수뱀, 왼 ) . 글쇠_오른쪽으로 => 뱀방향정하기 ( 철수뱀, 오른 ) . } } 순이하나요 { 참이면 가상글쇠하나 값이 { 글쇠_받침ㄹ => 뱀방향정하기 ( 순이뱀, 위 ) . 글쇠_받침ㄴ => 뱀방향정하기 ( 순이뱀, 아래 ) . 글쇠_받침ㅇ => 뱀방향정하기 ( 순이뱀, 왼 ) . 글쇠_모음이 => 뱀방향정하기 ( 순이뱀, 오른 ) . } } 가상글쇠부호얻기 ( ~기다려라 ) . }

뱀일반.sd

 
// 예제 프로그램 : 뱀 경기에서 쓰이는 절차들중 독립적인 것들을 모아 놓았다. // : 현 기본 묶음 단원들에서 제공하지 않는 절차들을 // : 간단하게 만들었다. 뱀일반 단원 . 사용 시간, 단말기 . 절차 시작점 ( ) . 절차 난수얻기 ( 정수 난수씨 ) => 실수 . 절차 초당똑딱수얻기 ( ) => 정수 . 절차 몇초간기다리기 ( 정수 천분의일초 ) . 상수 기다려라 = 참 . 절차 가상글쇠부호얻기 ( 부울 기다리까요 ) => 크기수 . /* -------------------- */ 구현부 /* ----------------------- */ 정수 초당똑딱수 . 큰정수 난수씨앗 . 상수 난수최대값 = 0#7바바바 . 절차 시작점 ( ) { 난수씨앗 := 큰크기수 ( 시간얻기 ( ) ) . 커서위치정하기 ( 20, 15 ) . 글줄쓰기 ( "시스템속도를 측정하고 있습니다." ) . 초당똑딱수 := 초당똑딱수얻기 ( ) . } 절차 난수얻기 ( 정수 난수씨 ) => 실수 실수 실수하나, 실수둘, 실수넘김 . 정수 정수하나 . { 난수씨 = -1 { 참이면 난수씨앗 := 난수씨앗 * 1103515245 + 12345 . 거짓이면 난수씨앗 := 난수씨 * 1103515245 + 12345 . } 정수하나 := 크기수(난수씨앗>>16)&난수최대값 . 실수하나 := 정수하나 . 정수하나 := 난수최대값 . 실수둘 := 정수하나 . 실수넘김 := 실수하나/실수둘 . 확인 { 0 <= 실수넘김 그리고 실수넘김 <= 1 . } ( 실수하나/실수둘 ) 넘긴다. } 절차 가상글쇠부호얻기 ( 부울 기다리까요 ) => 크기수 글자입력형 글자입력 . { 기다리까요 { 참이면 글자입력얻기 ( 글자입력 ) . 글자입력->글쇠부호&0#00바바 넘긴다. 거짓이면 다음입력있는가 () { 참이면 글자입력얻기 ( 글자입력 ) . 글자입력->글쇠부호&0#00바바 넘긴다. 거짓이면 0 넘긴다 . } } } 절차 초당똑딱수얻기 ( ) => 정수 시간형 시작시간 . 큰정수 몇번 . 정수 그냥 . { 시작시간 := 시간얻기 ( ) . 되풀이 시간차이얻기 ( 시작시간, 시간얻기() ) <= 1.0 참인 동안 { . } 준비 몇번 := 0 . 조절 몇번 ++ . 되풀이 시간차이얻기 ( 시작시간, 시간얻기() ) <= 2.0 참인 동안 { 준비 그냥 := 0 . 조절 그냥 ++ . 되풀이 그냥 < 1000 참인 동안 { . } } 몇번 넘긴다. } 절차 몇초간기다리기 ( 정수 천분의일초 ) 정수 번수, 몇번, 그냥 . { 번수 := 정수 ( 실수(초당똑딱수)*실수(천분의일초) / 1000.0 ) . 준비 몇번 := 0 . 조절 몇번 ++ . 되풀이 몇번 < 번수 참인 동안 { 준비 그냥 := 0 . 조절 그냥 ++ . 되풀이 그냥 < 1000 참인 동안 { . } } }

 

뱀입력.sd

 
// 예제 프로그램 : // 뱀 경기에서 사용자와의 대화를 위한 절차들을 정의한다. 뱀입력 단원 . 사용 뱀일반 . 사용 단말기, 단말흐름 . 절차 시작점 ( ) . 절차 소개화면보이기 ( ) . 절차 색설정하기 ( 부울 칼라화면인가 ) . 절차 또합니까 ( 정수 세로 ) => 부울 . 절차 말하고기다리기 ( &글자[] 말한마디, 정수 세로 ) . 절차 선택사항입력받기 ( &부울 철수하나요, &부울 순이하나요, &정수 장애물뱀수, &정수 속도, &부울 속도증가하는가, &부울 칼라화면인가, &정수 경기장단계 ) . 절차 줄가운데출력하기 ( 정수 세로, &글자[] 말한마디 ) . 정수 배경색, 벽색, 뱀1색, 뱀2색, 대화글자색, 대화배경색 . /* -------------------- */ 구현부 /* ----------------------- */ 절차 시작점 ( ) { 소개화면보이기 ( ) . 색깊이얻기 ( ) 값이 { 1 => 색설정하기 ( 거짓 ) . 그밖 => 색설정하기 ( 참 ) . } } 절차 소개화면보이기 ( ) { 글자색정하기 ( 15 ) . 배경색정하기 ( 0 ) . 화면지우기 ( ) . 글자속성정하기 ( 윤곽속성 ) . 줄가운데출력하기 ( 5, "씨앗으로 만든 뱀 뱀 뱀 ! ! ! " ) . 글자속성정하기 ( 보통속성 ) . 글자색정하기 ( 7 ) . 줄가운데출력하기 ( 8, "이 오락은 뱀이 정해진 공간을 왔다 갔다 하면서 " ) . 줄가운데출력하기 ( 9, "화면에 있는 숫자를 먹는 경기이다. " ) . 줄가운데출력하기 ( 10, "뱀이 좌, 우, 상, 하 벽에 부딛히거나, " ) . 줄가운데출력하기 ( 11, "뱀머리가 자기몸에 부딪히거나, " ) . 줄가운데출력하기 ( 12, "뱀머리가 다른 뱀머리에 부딪히면 죽는다. " ) . 줄가운데출력하기 ( 15, " 사용 글쇠 " ) . 줄가운데출력하기 ( 16, " [ 순이 ] [ 철수 ] " ) . 줄가운데출력하기 ( 17, " W 위로 " ) . 줄가운데출력하기 ( 18, " S 아래로 " ) . 줄가운데출력하기 ( 19, " A 왼쪽으로 " ) . 줄가운데출력하기 ( 20, " D 오른쪽으로 " ) . 줄가운데출력하기 ( 22, " [ Home :잠시멈춤, End :마치기 ] " ) . 줄가운데출력하기 ( 23, " [ PageUp:속도증가, PageDown:속도감소 ] " ) . 줄가운데출력하기 ( 24, " 아무 글쇠나 치세요 . " ) . 기다리기 ( ) . } 절차 색설정하기 ( 부울 칼라화면인가 ) { 칼라화면인가 { 참이면 뱀1색 := 14 . 뱀2색 := 13. 벽색 := 12. 배경색 := 1 . 대화배경색 := 15. 대화글자색 := 4 . 거짓이면 뱀1색 := 15 . 뱀2색 := 7 . 벽색 := 7 . 배경색 := 0 . 대화글자색 := 15. 대화배경색 := 0 . } } 절차 또합니까 ( 정수 세로 ) => 부울 정수 또하나요 . { 글자색정하기 ( 대화글자색 ) . 배경색정하기 ( 대화배경색 ) . 줄가운데출력하기 ( 세로 , "끝났습니다. 또 할까요? (예=1, 아니오=2) : " ) . 되풀이 { 커서위치정하기 ( 61, 세로 ) . 단말기->글줄쓰기 ( " " ) . 커서위치정하기 ( 61, 세로 ) . 틀짜기("%십") . 정수읽기 ( 또하나요 ) . 틀짜기("%십"). 정수쓰기(또하나요). 또하나요=1 또는 또하나요=2 { 참이면 나간다. } } 글자색정하기 ( 15 ) . 배경색정하기 ( 배경색 ) . 커서위치정하기 ( 0, 세로 ) . 줄끝까지지우기 ( ) . 또하나요 = 1 { 참이면 참 넘긴다. 거짓이면 글자색정하기(7) . 배경색정하기 (0) . 화면지우기 () . 거짓 넘긴다. } } 절차 말하고기다리기 ( &글자[] 말한마디, 정수 세로 ) { 글자색정하기 ( 대화글자색 ) . 배경색정하기 ( 대화배경색 ) . 줄가운데출력하기 ( 세로, 말한마디 ) . 단말흐름->기다리기 . 글자색정하기 ( 15 ) . 배경색정하기 ( 배경색 ) . 커서위치정하기 ( 0, 세로 ) . 줄끝까지지우기 ( ) . } 절차 선택사항입력받기 ( &부울 철수하나요, &부울 순이하나요, &정수 장애물뱀수, &정수 속도, &부울 속도증가하는가, &부울 칼라화면인가, &정수 경기장단계 ) 정수 선택 . { 글자색정하기 ( 7 ) . 배경색정하기 ( 0 ) . 화면지우기 ( ) . 되풀이 { 커서위치정하기 ( 10, 6 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "철수가 경기를 합니까 ? ( 예=1, 아니오=2 ) : ") . 정수읽기 ( 선택 ) . ( 1=선택 또는 선택=2 ) { 참이면 나간다. } } 철수하나요 := (선택=1) . 되풀이 { 커서위치정하기 ( 10, 7 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "순이가 경기를 합니까 ? ( 예=1, 아니오=2 ) : ") . 정수읽기 ( 선택 ) . ( 1=선택 또는 선택=2 ) { 참이면 나간다. } } 순이하나요 := (선택=1) . 되풀이 { 커서위치정하기 ( 10, 9 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "장애물 뱀수는? ( 0-3 명) : " ) . 단말흐름->정수읽기 ( 장애물뱀수 ) . (0<=장애물뱀수) 그리고 (장애물뱀수<=3) { 참이면 나간다. } } 되풀이 { 커서위치정하기 ( 10, 12 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "속도를 얼마로 할까요 ? ( 1 - 100 ) : " ) . 정수읽기 ( 속도 ) . ( 1<=속도 그리고 속도<100 ) { 참이면 나간다. } } 되풀이 { 커서위치정하기 ( 10, 15 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "경기도중 속도를 증가시킬까요? ( 예=1, 아니오=2 ) : ") . 정수읽기 ( 선택 ) . ( 1=선택 또는 선택=2 ) { 참이면 나간다. } } 속도증가하는가 := ( 선택=1 ) . 되풀이 { 커서위치정하기 ( 10, 18 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "칼라모니터입니까 ? ( 예=1, 아니오=2 ) : " ) . 정수읽기 ( 선택 ) . ( 1=선택 또는 선택=2 ) { 참이면 나간다. } } 칼라화면인가 := ( 선택=1 ) . 되풀이 { 커서위치정하기 ( 10, 21 ) . 줄끝까지지우기 ( ) . 단말흐름->글줄쓰기 ( "경기장 단계는 얼마로 ? ( 1 - 10 ) : " ) . (정수읽기 ( 경기장단계 )) { 거짓이면 단말흐름->글줄쓰기("\줄읽지를 못했습니다.\줄"). } 단말흐름->틀짜기("\줄읽은단계는 %십입니다.\줄"). 단말흐름->정수쓰기(경기장단계). ( 1<=경기장단계 그리고 경기장단계<=10 ) { 참이면 나간다. } } } 절차 줄가운데출력하기 ( 정수 세로, &글자[] 말한마디 ) { 커서위치정하기 ( 41-글줄폭얻기(말한마디)/2 , 세로 ) . 단말기->글줄쓰기 ( 말한마디 ) . }

 

뱀조절.sd

 
뱀조절 단원 . 사용 뱀일반 . 사용 뱀입력 . 사용 뱀화면 . 사용 바탕, 단말기, 단말흐름 . // ------------------------------------------------------------------- 상수 위=0, 왼=1, 아래=2, 오른=3 . // 뱀의 이동방향 상수 최대뱀길이 = 1000, 최대뱀수 = 20 . // 만들 수 있는 뱀의 총갯수, 총길이 정수 현재뱀수 . // 현재까지 만든 뱀의 수 자료형 뱀형 = 구조물 { 정수 머리, 길이, 가로, 세로, 방향, 몇마리, 몇점, 색, 속도 . 부울 살았나, 자동동작여부 . } . 상수 자동동작=참, 수동동작=거짓 . 큰크기수 뱀길이늘일간격 := 20 . 큰크기수 경기시작후얼마나 . // ------------------------------------------------------------------- 절차 시작점 ( ) . 절차 뱀만들기 ( 정수 색 ) => 정수 . 절차 이용가능한뱀손잡이얻기 ( ) => 정수 . 절차 뱀손잡이가유효한가 ( 정수 뱀번호 ) => 부울 . 절차 뱀없애기 ( 정수 뱀번호 ) => 부울 . 절차 뱀초기화 ( 정수 뱀번호, 정수 색, 정수 마리수, 정수 점수, 부울 자동동작여부 ) . 상수 그대로 = -1 . 절차 뱀위치방향초기화 ( 정수 뱀번호, 정수 머리, 정수 길이, 정수 가로, 정수 세로, 정수 방향, 정수 속도, 부울 살았나 ) . // ------------------------------------------------------------------- 절차 뱀보이기 ( 정수 뱀번호 ) . 절차 뱀머리그리기 ( 정수 뱀번호 ) . 절차 뱀꼬리지우기 ( 정수 뱀번호 ) . 절차 뱀이동하기 ( 정수 뱀번호 ) . 절차 뱀방향정하기 ( 정수 뱀번호, 정수 방향 ) . 절차 뱀늘이기 ( 정수 뱀번호, 정수 늘일길이 ) . // ------------------------------------------------------------------- 절차 뱀이죽었나 ( 정수 뱀번호 ) => 부울 . 상수 { 좌상, 우상, 좌하, 우하 } . // 점수산놈수출력하기의 위치 인자에 사용 절차 점수산놈수출력하기 ( 정수 뱀번호, 정수 위치 ) . 절차 뱀이름붙여점수산놈수출력하기 ( 정수 뱀번호, 정수 위치, &글자[] 뱀이름 ) . // ------------------------------------------------------------------- 절차 경기시작 ( 큰크기수 뱀길이늘일간격 ) . 절차 자동뱀만들기 ( 정수 마리수, 정수 자동뱀색 ) . 절차 자동뱀없애기 ( ) . 절차 위치잡아먹이놓기 ( 글자 먹이글자, &정수 먹이가로, &정수 먹이세로, 정수 먹이색 ) . // ------------------------------------------------------------------- 상수 { 뱀다죽었다, 다시시작, 먹이다먹었다, 아무일없음, 먹이먹었다, 뱀죽었다 } . 절차 모든뱀움직이기 ( &정수 넘김뱀번호 ) => 정수 . // ------------------------------------------------------------------- 절차 장애물보고방향정하기 ( 정수 뱀번호 ) . 절차 장애물까지거리구하기 ( 정수 뱀번호 ) => 정수 . 절차 장애물있나 ( 정수 뱀번호, &정수 장애물거리 ) => 부울 . 절차 먹이보고방향정하기 ( 정수 뱀번호 ) . 절차 먹이보고장애물보고방향정하기 ( 정수 뱀번호 ) . 절차 전체뱀속도정하기 ( 정수 전체뱀속도 ) . /* -------------------- */ 구현부 /* ----------------------- */ 뱀형^ [최대뱀수+1] 뱀 . // 각 뱀을 나타내기 위한 점보 부울[최대뱀수+1] 사용중 . 자료형 몸통한조각형 = 구조물 { 정수 세로, 가로 . } . 자료형 몸형 = 몸통한조각형[최대뱀길이+1] . 몸형^ [최대뱀수+1] 몸 . // 뱀의 몸체가 화면어디에 있는지 나타낸다 정수 장애물접근최소반경:=2, 최대반경:=5 . 정수 뱀속도 . 글자[15] 먹이글자 := "0123456789" . 정수 먹이번호:=0, 먹이가로, 먹이세로, 먹이색:= 7 . /* ---------------------------------------------------------------- */ 절차 시작점 ( ) 정수 가 . { 준비 가 := 0 . 조절 가 ++ . 되풀이 가 <= 최대뱀수 참인 동안 { 사용중[가] := 거짓 . } } 절차 뱀만들기 ( 정수 색 ) => 정수 정수 뱀손잡이 . 헛 ^ 주소하나 . { 0 >= ( 뱀손잡이:=이용가능한뱀손잡이얻기() ) { 참이면 -2 넘긴다. } 공백 = ( 주소하나:=공백얻기(크기값(뱀형)) ) { 참이면 -1 넘긴다 . } 뱀[뱀손잡이] := 뱀형^ ( 주소하나 ) . 공백 = ( 주소하나:=공백얻기(크기값(몸형)) ) { 참이면 -1 넘긴다 . } 몸[뱀손잡이] := 몸형^ ( 주소하나 ) . 사용중[뱀손잡이] := 참 . 뱀[뱀손잡이]->색 := 색 . 뱀손잡이 넘긴다 . } 절차 이용가능한뱀손잡이얻기 ( ) => 정수 정수 손잡이 . { 준비 손잡이 := 1 . 조절 손잡이 ++ . 되풀이 사용중[손잡이] 참인 동안 { . } 손잡이 > 최대뱀수 { 참이면 -1 넘긴다. 거짓이면 손잡이 넘긴다. } } 절차 뱀없애기 ( 정수 뱀번호 ) => 부울 { 내놓기(뱀[뱀번호]) . 내놓기(몸[뱀번호]) . 사용중[뱀번호] := 거짓 . 참 넘긴다 . } 절차 뱀손잡이가유효한가 ( 정수 뱀번호 ) => 부울 { 사용중[뱀번호] 넘긴다 . } 절차 뱀초기화 ( 정수 뱀번호, 정수 색, 정수 마리수, 정수 점수, 부울 자동동작여부 ) { 확인 { 뱀손잡이가유효한가 ( 뱀번호 ) . } 뱀[뱀번호]->몇마리 := 마리수 . 뱀[뱀번호]->몇점 := 점수 . 뱀[뱀번호]->색 := 색 . 뱀[뱀번호]->자동동작여부 := 자동동작여부 . } 절차 뱀위치방향초기화 ( 정수 뱀번호, 정수 머리, 정수 길이, 정수 가로, 정수 세로, 정수 방향 , 정수 속도, 부울 살았나 ) { 뱀손잡이가유효한가 ( 뱀번호 ) { 거짓이면 넘긴다. } 뱀[뱀번호]->머리 := 머리 . 뱀[뱀번호]->길이 := 길이 . 뱀[뱀번호]->가로 := 가로 . 뱀[뱀번호]->세로 := 세로 . 뱀[뱀번호]->방향 := 방향 . 속도 = 그대로 { 거짓이면 뱀[뱀번호]->속도 := 속도 . } 뱀[뱀번호]->살았나 := 살았나 . } 절차 뱀방향정하기 ( 정수 뱀번호, 정수 방향 ) { 방향 = 위 그리고 뱀[뱀번호]->방향 ~= 아래 { 참이면 뱀[뱀번호]->방향 := 위. } 방향 = 아래 그리고 뱀[뱀번호]->방향 ~= 위 { 참이면 뱀[뱀번호]->방향 := 아래. } 방향 = 왼 그리고 뱀[뱀번호]->방향 ~= 오른 { 참이면 뱀[뱀번호]->방향 := 왼. } 방향 = 오른 그리고 뱀[뱀번호]->방향 ~= 왼 { 참이면 뱀[뱀번호]->방향 := 오른. } } 절차 뱀늘이기 ( 정수 뱀번호, 정수 늘일길이 ) { 뱀[뱀번호]->길이+늘일길이 < 최대뱀길이 { 참이면 뱀[뱀번호]->길이 += 늘일길이 . } } 절차 위치잡아먹이놓기 ( 글자 먹이글자, &정수 먹이가로, &정수 먹이세로, 정수 먹이색 ) 정수 먹이위아래줄 . { 되풀이 { 먹이가로 := 정수 ( 난수얻기(-1)*(최대가로-2) + 1) . 먹이세로 := 정수 ( 난수얻기(-1)*(최대세로-6) + 3) . 먹이위아래줄 := 먹이세로 + 화면공간[먹이가로][먹이세로]->위아래 . 같은색인가 ( 먹이가로, 먹이세로, 배경색 ) 그리고 같은색인가 ( 먹이가로, 먹이위아래줄, 배경색 ) { 참이면 나간다 . } } 먹이세로 := 화면공간[먹이가로][먹이세로]->줄_30 . 글자색정하기 ( 먹이색 ) . 배경색정하기 ( 배경색 ) . 커서위치정하기 ( 먹이가로-1, 먹이세로-1 ) . 단말기->글자쓰기 ( 먹이글자 ) . } /* ---------------------------------------------------------------- */ 절차 뱀보이기 ( 정수 뱀번호 ) { 확인 { 뱀손잡이가유효한가 ( 뱀번호 ) . } 뱀머리그리기 ( 뱀번호 ) . 뱀꼬리지우기 ( 뱀번호 ) . } 절차 뱀머리그리기 ( 정수 뱀번호 ) { 확인 { 뱀손잡이가유효한가 ( 뱀번호 ) . } 뱀[뱀번호]->머리 := (뱀[뱀번호]->머리 + 1) % 최대뱀길이 . 몸[뱀번호]^ [ 뱀[뱀번호]->머리 ]->세로 := 뱀[뱀번호]->세로 . // 머리옮기기 몸[뱀번호]^ [ 뱀[뱀번호]->머리 ]->가로 := 뱀[뱀번호]->가로 . 화면반칸그리기 ( 뱀[뱀번호]->가로, 뱀[뱀번호]->세로, 뱀[뱀번호]->색 ) . } 절차 뱀꼬리지우기 ( 정수 뱀번호 ) 정수 꼬리 . { 확인 { 뱀손잡이가유효한가 ( 뱀번호 ) . } 꼬리 := ( 뱀[뱀번호]->머리 + 최대뱀길이 - 뱀[뱀번호]->길이) % 최대뱀길이 . 화면반칸그리기 ( 몸[뱀번호]^ [꼬리]->가로, 몸[뱀번호]^ [꼬리]->세로, 배경색 ) . 몸[뱀번호]^ [꼬리]->세로 := 0 . } /* ---------------------------------------------------------------- */ 절차 뱀이동하기 ( 정수 뱀번호 ) { 뱀[뱀번호]->방향 값이 { 위 => 뱀[뱀번호]->세로 -- . 아래 => 뱀[뱀번호]->세로 ++ . 왼 => 뱀[뱀번호]->가로 -- . 오른 => 뱀[뱀번호]->가로 ++ . 그밖 => . } } 절차 뱀이죽었나 ( 정수 뱀번호 ) => 부울 정수 모든뱀 . { 같은색인가 ( 뱀[뱀번호]->가로, 뱀[뱀번호]->세로, 벽색 ) { 참이면 뱀[뱀번호]->살았나 := 거짓 . 뱀[뱀번호]->몇마리 -- . 참 넘긴다. } 같은색인가 ( 뱀[뱀번호]->가로, 뱀[뱀번호]->세로, 뱀[뱀번호]->색 ) { 참이면 뱀[뱀번호]->살았나 := 거짓 . 뱀[뱀번호]->몇마리 -- . 참 넘긴다. } 거짓 넘긴다. } 절차 뱀이먹이먹었나 ( 정수 뱀번호 ) => 부울 { (먹이세로=정수((뱀[뱀번호]->세로+1)/2) 그리고 먹이가로=뱀[뱀번호]->가로) 넘긴다 . } 절차 점수산놈수출력하기 ( 정수 뱀번호, 정수 위치 ) { 글자색정하기 ( 15 ) . 배경색정하기 ( 배경색 ) . 위치 값이 { 좌상 => 커서위치정하기 ( 0, 0 ) . 우상 => 커서위치정하기 ( 최대가로/2, 0 ) . 좌하 => 커서위치정하기 ( 0, 최대세로/2-1 ) . 우하 => 커서위치정하기 ( 최대가로/2, 최대세로/2-1 ) . } 단말흐름->틀짜기 ( "%십번 뱀 => %5십점 %2십마리 남았음" ) . 정수쓰기 ( 뱀번호 ) . 정수쓰기 ( 뱀[뱀번호]->몇점 ) . 정수쓰기 ( 뱀[뱀번호]->몇마리 ) . } 절차 뱀이름붙여점수산놈수출력하기 ( 정수 뱀번호, 정수 위치, &글자[] 뱀이름 ) { 글자색정하기 ( 15 ) . 배경색정하기 ( 배경색 ) . 위치 값이 { 좌상 => 커서위치정하기 ( 0, 0 ) . 우상 => 커서위치정하기 ( 최대가로/2, 0 ) . 좌하 => 커서위치정하기 ( 0, 최대세로/2-1 ) . 우하 => 커서위치정하기 ( 최대가로/2, 최대세로/2-1 ) . } 단말흐름->틀짜기 ( "%줄 => %5십점 %2십마리 남았음" ) . 단말흐름->글줄쓰기 ( 뱀이름 ) . 정수쓰기 ( 뱀[뱀번호]->몇점 ) . 정수쓰기 ( 뱀[뱀번호]->몇마리 ) . } /* ---------------------------------------------------------------- */ 절차 경기시작 ( 큰크기수 간격 ) { 경기시작후얼마나 := 0 . 뱀길이늘일간격 := 간격 . 위치잡아먹이놓기 ( 먹이글자[먹이번호], 먹이가로, 먹이세로, 먹이색 ) . } 절차 모든뱀움직이기 ( &정수 넘김뱀번호 ) => 정수 정수 뱀번호, 넘김값 . { 넘김값 := 아무일없음 . 경기시작후얼마나 ++ . 몇초간기다리기 ( 뱀속도 ) . 준비 뱀번호 := 1 . 조절 뱀번호 ++ . 되풀이 뱀번호 <= 최대뱀수 참인 동안 { 사용중[뱀번호] { 참이면 경기시작후얼마나%뱀길이늘일간격 = 0 { 참이면 뱀늘이기 ( 뱀번호, 5 ) . } 뱀이동하기 ( 뱀번호 ) . 뱀이죽었나 ( 뱀번호 ) { 참이면 뱀[뱀번호]->몇마리 <= 0 { 참이면 뱀다죽었다 넘긴다 . 거짓이면 뱀위치방향초기화 ( 뱀번호, 1, 3, 45, 34, 위, 그대로, 참 ) . 다시시작 넘긴다 . } } 뱀이먹이먹었나 ( 뱀번호 ) { 참이면 뱀[뱀번호]->몇점 += 먹이번호*10 . 먹이번호++ . 0 = (먹이번호:=먹이번호%10 ) { 참이면 먹이번호 := 0 . 뱀보이기 ( 뱀번호 ) . 먹이다먹었다 넘긴다. 거짓이면 넘김뱀번호 := 뱀번호 . 넘김값 := 먹이먹었다 . } 위치잡아먹이놓기 ( 먹이글자[먹이번호], 먹이가로, 먹이세로, 먹이색 ) . 뱀늘이기 ( 뱀번호, 5 ) . } 뱀보이기 ( 뱀번호 ) . 뱀[뱀번호]->자동동작여부 { 참이면 먹이보고장애물보고방향정하기 ( 뱀번호 ) . } } } 넘김값 넘긴다 . } 절차 자동뱀만들기 ( 정수 마리수, 정수 자동뱀색 ) 정수 되풀이번호, 뱀번호, 가로, 세로, 위아래줄 . { 준비 되풀이번호 := 1 . 조절 되풀이번호 ++ . 되풀이 되풀이번호 <= 마리수 참인 동안 { 뱀번호 := 뱀만들기 ( 자동뱀색 ) . 뱀초기화 ( 뱀번호, 자동뱀색, 5, 0, 자동동작 ) . 되풀이 { 가로 := 정수 ( 난수얻기(-1)*(최대가로-2) + 1) . 세로 := 정수 ( 난수얻기(-1)*(최대세로-6) + 3) . 위아래줄 := 세로 + 화면공간[가로][세로]->위아래 . 같은색인가 ( 가로, 세로, 배경색 ) 그리고 같은색인가 ( 가로, 위아래줄, 배경색 ) { 참이면 나간다 . } } 뱀위치방향초기화 ( 뱀번호, 1, 3, 가로, 세로, 아래, 80, 참 ) . } } 절차 자동뱀없애기 ( ) 정수 뱀번호 . { 준비 뱀번호 := 1 . 조절 뱀번호 ++ . 되풀이 뱀번호 <= 최대뱀수 참인 동안 { 사용중[뱀번호] 이때 뱀[뱀번호]->자동동작여부 { 참이면 뱀없애기 ( 뱀번호 ) . } } } 절차 먹이보고방향정하기 ( 정수 뱀번호 ) 정수 세로_60 . { 세로_60 := 먹이세로 * 2 . 뱀[뱀번호]->방향 값이 { 위 => 뱀[뱀번호]->세로 <= 세로_60 { 참이면 뱀[뱀번호]->가로 > 먹이가로 { 참이면 뱀방향정하기 ( 뱀번호, 왼 ) . 거짓이면 뱀방향정하기 ( 뱀번호, 오른 ) . } } 아래 => 뱀[뱀번호]->세로 >= 세로_60 { 참이면 뱀[뱀번호]->가로 > 먹이가로 { 참이면 뱀방향정하기 ( 뱀번호, 왼 ) . 거짓이면 뱀방향정하기 ( 뱀번호, 오른 ) . } } 왼 => 뱀[뱀번호]->가로 <= 먹이가로 { 참이면 뱀[뱀번호]->세로 > 세로_60 { 참이면 뱀방향정하기 ( 뱀번호, 위 ) . 거짓이면 뱀방향정하기 ( 뱀번호, 아래 ) . } } 오른 => 뱀[뱀번호]->가로 >= 먹이가로 { 참이면 뱀[뱀번호]->세로 > 세로_60 { 참이면 뱀방향정하기 ( 뱀번호, 위 ) . 거짓이면 뱀방향정하기 ( 뱀번호, 아래 ) . } } } } 절차 장애물보고방향정하기 ( 정수 뱀번호 ) 정수 최대거리, 장애물거리, 최대방향, 이전방향 . 정수 되풀이횟수 . { 이전방향 := 뱀[뱀번호]->방향 . 최대방향 := 뱀[뱀번호]->방향 . 최대거리 := 장애물까지거리구하기 ( 뱀번호 ) . 최대거리 >= 장애물접근최소반경 { 참이면 넘긴다. } 준비 되풀이횟수 := 1 . 조절 되풀이횟수 := 되풀이횟수 + 2 . 되풀이 되풀이횟수 < 4 참인 동안 { 뱀방향정하기 ( 뱀번호, (이전방향+되풀이횟수)%4 ) . 장애물거리 := 장애물까지거리구하기 ( 뱀번호 ) . 장애물거리 > 최대거리 { 참이면 최대거리 := 장애물거리 . 최대방향 := (이전방향+되풀이횟수)%4 . } 뱀방향정하기 ( 뱀번호, 이전방향 ) . } 뱀방향정하기 ( 뱀번호, 최대방향 ) . } 절차 장애물까지거리구하기 ( 정수 뱀번호 ) => 정수 정수 현재가로, 현재세로 . 정수 장애물거리 . { 현재가로 := 뱀[뱀번호]->가로 . 현재세로 := 뱀[뱀번호]->세로 . 준비 장애물거리 := 1 . 조절 장애물거리 ++ . 되풀이 장애물거리<=최대반경 참인 동안 { 뱀이동하기 ( 뱀번호 ) . 다른색인가 ( 뱀[뱀번호]->가로, 뱀[뱀번호]->세로, 배경색 ) { 참이면 나간다 . } } 뱀[뱀번호]->가로 := 현재가로 . 뱀[뱀번호]->세로 := 현재세로 . 장애물거리 넘긴다. } 절차 장애물있나 ( 정수 뱀번호, &정수 장애물거리 ) => 부울 정수 현재가로, 현재세로 . 정수 거리 . { 현재가로 := 뱀[뱀번호]->가로 . 현재세로 := 뱀[뱀번호]->세로 . 준비 거리 := 1 . 조절 거리 ++ . 되풀이 거리<=장애물접근최소반경 참인 동안 { 뱀이동하기 ( 뱀번호 ) . 다른색인가 ( 뱀[뱀번호]->가로, 뱀[뱀번호]->세로, 배경색 ) { 참이면 뱀[뱀번호]->가로 := 현재가로 . 뱀[뱀번호]->세로 := 현재세로 . 장애물거리 := 거리 . 참 넘긴다 . } } 뱀[뱀번호]->가로 := 현재가로 . 뱀[뱀번호]->세로 := 현재세로 . 장애물거리 := 거리 . 거짓 넘긴다. } 절차 먹이보고장애물보고방향정하기 ( 정수 뱀번호 ) 정수 원래방향 . 정수 장애물거리 . { 원래방향 := 뱀[뱀번호]->방향 . 먹이보고방향정하기 ( 뱀번호 ) . 장애물있나 ( 뱀번호, 장애물거리 ) { 참이면 뱀[뱀번호]->방향 := 원래방향 . 장애물보고방향정하기 ( 뱀번호 ) . } } 절차 전체뱀속도정하기 ( 정수 전체뱀속도 ) { 전체뱀속도 > 10 { 참이면 뱀속도 := 전체뱀속도 . 거짓이면 뱀속도 := 1 . } }

 

뱀화면.sd

 
/ 예제 프로그램 : // 뱀 경기에서 화면관리를 위해 사용되는 절차를 정의한다. // 화면을 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<세로시작 그리고 세로시작<=세로끝 그리고 세로끝<=최대세로 . } 준비 줄수 := 세로시작 . 조절 줄수 ++ . 되풀이 줄수 <= 세로끝 참인 동안 { 화면반칸그리기 ( 칸수, 줄수, 색 ) . } }

 
👉 이전 글:
C에서 씨앗으로
👉 다음 글:
봄부터 겨울까지