본문 바로가기

카테고리 없음

플로우고리즘으로 프로그래밍 언어 입문하기

게임 기획이랑 직접적으로 관련은 없지만 알아두면 좋은 툴을 소개해 드립니다 'ㅁ' 플로우고리즘이라는건데 이름처럼 플로우 차트로 알고리즘을 짜면 그것을 다양한 코드로 변환시켜주고 실제 실행도 가능하게 해 줍니다! 시스템 기획 기반 지식용으로 프로그래밍을 살짝 찍먹 하고 싶을 때 입문용으로 너무 좋아 보입니다. 왜 내가 학교 다닐 때 이런 툴을 몰랐던 걸까 ㅠ_ㅠ

 

다운로드는 여기서 할 수 있고요! (광고 아님, 저랑 아무 상관없음..)

http://www.flowgorithm.org/

 

Flowgorithm - Flowchart Programming Language

Welcome to the Flowgorithm Homepage! Flowgorithm is a free beginner's programming language that is based on simple graphical flowcharts. Typically, when a student first learns to program, they often use one of the text-based programming languages. Dependin

www.flowgorithm.org

플로우 차트 그리기

도형 그리기

설치받고 처음 실행하면 이렇게 텅 비어 있을 거예요.

선을 클릭하면 이렇게 플로우 차트 도형을 선택하라고 나옵니다.

변수 선언, 배정, 출력

요렇게 도형을 넣은 뒤

도형을 더블클릭해 주면

이렇게 세부 정의를 할 수 있습니다. 일단 유형은 정수(Integer) 형, 변수명은 도토리 가격으로 해보죠!

변수를 선언했다면 기본값을 배정해 줘야 합니다. 기본값 배정을 안 해도 되는 경우도 있긴 한데 잘 모르겠으면 그냥 다 배정해 주세요! 크크

기본값 배정이 잘 되었는지 확인을 위해 출력문을 작성해 보죠'ㅁ' 

"[메뉴판] " & " 도토리 : " & 도토리가격 & "원"

눈치채셨나요? 변수명일때는 " " 따옴표를 쓰지 않고, 변수명이 아니라 출력할 문구를 넣고 싶을 때는 " " 따옴표를 쓰면 됩니다. 이렇게 넣고 실행하면

[메뉴판] 도토리 : 20원

라고 뜰 겁니다! 정말 이렇게 되는지 실행해 보죠!

실행

실행은 그냥 상단 메뉴바에서 ▶ 를 눌러주면 됩니다.

잘 되네요 :) 

도토리 가격, 토끼고기 가격, 소지금까지 다 넣어 주시고 다음으로 넘어가 봅시다!

입력, 분기, 연산자

실행 도중 사용자에게 입력을 받는 것도 가능합니다. 입력 도형을 넣어 주시고, 입력받은 내용을 어느 변수에 배정할 것인지 작성해 주세요. 입력받기 전에 반드시 해당 변수의 이름을 선언해 줘야 합니다!

예시는 '아이템이름'이라는 문자열을 변수로 선언해줬고, 사용자에게 입력받은 내용을 '아이템이름'이라는 변수로 보내주겠다는 의미입니다.

분기를 넣고 싶을 때는 마름모 도형을 사용하면 됩니다. 분기의 '참'에 해당하는 조건이 여러 가지라면 &&이나 || 연산자를 사용하면 되어요. 둘 다 만족해야 할 때는 AND의 의미로 &&을 쓰고 둘 중에 하나만 만족해도 된다면 OR의 의미로 ||를 씁니다. (ii나 LL이나 11이 아닙니다! 키보드에 따라 다르긴 한데, \키를 쉬프트 누른 채 누르면 나오는 기호예요!)

 

아이템이름="도토리" || 아이템이름="토끼고기"

예시는 사용자에게 입력받은 아이템이름이라는 변수가, 도토리거나 토끼고기일때 참, 둘 다 아닐 때 거짓이라는 의미입니다. 실행하면 이렇게 되지요.

아직 "몇 개 살래?"라는 것에 대한 처리를 안 해서 대화가 이상해졌지만, 여하튼 도토리나 토끼고기를 말하면 "몇 개 살래?"라고 묻고, 둘 다 아닌 이상한 말을 입력하면 "그런 물건은 안 팔아"라고 나오죠. 쉽죠?

 

이 프로그램에서 사용할 수 있는 연산자는 다음과 같습니다 :) 잘 응용해 보세요!

연산자 C언어 BASIC 유니코드
같다 == = =
다르다, 아니다 != <>
앞의 것이 뒤의 것보다 작거나 같다 <= <=
앞의 것이 뒤의 것보다 크거나 같다 >= >=
~이 아닌 것 ! not ~
그리고 && and
또는 || or
더하기 + + +
빼기 - - -
곱하기 * * ×
나누기 / / ÷
나눠서 나머지만 구하기 % mod  

곱하기 (*), 빼기 (-), 크거나 같음 (>=)를 응용해서 내용을 좀 더 추가해 보았습니다.

아이템이름="도토리"

앞 분기에서 도토리나 토끼고기를 말해야만 참 분기로 내려올 수 있으므로, 다음 분기에서는 아이템 이름이 도토리인지 아닌지만 검사해도 도토리의 상황과 토끼고기의 상황을 구분해서 쓸 수 있게 되지요. 

가격 ← 토끼고기가격*토끼고기개수
가격 ← 도토리가격*도토리개수

도토리를 입력받은 경우에는 도토리 개수를 입력받아서 도토리 가격을 곱해 최종 가격으로 뽑고, 토끼고기를 입력받은 경우에는 토끼고기 개수를 입력받아서 토끼고기 가격을 곱해 최종 가격으로 뽑아내는 과정입니다.

물론 도토리 개수, 토끼고기 개수, 가격 역시 변수이므로, 미리 선언과 초기값 배정을 해 줘야 합니다. 가격의 경우에는 입력받은 값을 통해 계산해서 넣어줄 거라 초기값을 넣어주지 않아도 되는데, 역시 잘 모르겠으면 그냥 다 배정해 주세요 ㅎ_ㅎ

소지금>=가격

소지금이 지불해야 할 가격보다 많으면 구매가 이루어지고, 소지금이 지불해야 할 가격보다 적으면 구매가 이루어지지 않게 하는 분기 연산입니다. '소지금> 가격'으로 할 경우, 소지금이 1천 원일 때 1천 원어치를 못 사는 상황이 발생하므로 반드시 크거나 같다는 의미의 '소지금>=가격'으로 써 줘야 합니다.

토끼고기 20개는 2천 원이므로 돈이 부족해서 살 수 없고, 토끼고기 5개는 500원이라서 살 수 있습니다. 그리고 수중에는 500원이 남겠죠. 

반복문

사용자가 이제 그만...!이라고 말할 때까지 계속해서 더 살래?라고 묻도록 만들어 봅시다.

반복문 도형을 사용하면 되는데요, 우선, 선조건 반복은... 설명하기 난해하니 그냥 예시를 보면서 따라 해 볼까요 (ㅋㅋ)

문자열 '대답'이라는 변수를 선언한 다음, 사용자에게 '대답'을 입력받아서, '응'이라고 하면 "뭐 살래?"하고 또 묻고, '응'이 아닌 다른 것을 입력하면 "잘 가~"라고 말하고 실행을 종료하는 구조입니다. 이것은 '후조건반복' 도형을 사용하면 됩니다.

입력:대답 위에다가, 기존 플로우 차트를 오려내기, 붙여 넣기 해 주시면 됩니다. 그럼 모든 반복의 끝에는 항상 대답을 입력받고, 그 대답이 '응'이면 다시 한번 위 상황을 반복하게 되는 거지요. 후조건반복을 사용한 이유는, 상점에 처음 입장한 상황에서는 '응'이라고 안 해도, 뭐 살지 물어봐줄 것이기 때문입니다. 처음 한 번의 티키타카가 끝난 뒤에야 더 살 것이 있는지 물어보기 위함이죠. 맥락 상 처음부터 물어보고 싶다면 (예를 들어 '물건 사러 왔어'라고 말할 때마다 '뭐 살래?'라고 물어봐주고 싶을 때) 선조건 반복을 사용하면 됩니다! 쉽죠(?)

 

실행하면 이렇게 됩니다! 응이 아닌 답을 할 때까지 '뭐 살래?'를 계속해서 물어봐 줍니다. 신기한 것은 소지금이 초기화되지 않고, 기존 소지금에서 추가로 차감한다는 것! 반복문 안에서 [소지금←소지금-가격]이란 연산도 함께 루프를 돌기 때문이어요. 직전에 물건을 사서 줄어든 소지금을 프로그램은 기억을 해 주고, 다음에 살 때 그 소지금을 기준으로 계산을 해 주죠.

 

물론 프로그램을 아예 껐다 켜면 이 기억은 날아갑니다. 프로그램을 꺼도 계속 기억하게 하고 싶을 때 필요한 것이 바로 서버인 것이죠...! (이 프로그램에서는 당연히 안 됨)

이제 이 상점을 여러 번 이용할 수 있게 되었으니, 그동안 내가 몇 개를 샀는지 알 수 있도록 '도토리 보유량'과 '토끼고기 보유량' 변수를 선언하고 초기값 0으로 배정해 줍니다. 그리고 도토리를 구매하기로 했다면 기존 도토리 보유량과 도토리 개수를 더해 누적 값을 구해 주고, 토끼고기를 구매하기로 했다면 기존 토끼고기 보유량과 토끼고기 개수를 더해 누적 값을 구해 주면 됩니다. 눈치 채신 분이 있을까 모르겠는데 프로그래밍 언어에서는 결괏값이 연산자의 앞에 위치합니다 :)

기존 도토리보유량+도토리개수 → 누적 도토리보유량

이 아니라

누적 도토리보유량 ← 기존 도토리보유량+도토리개수

인 거지요. 왜냐면... 그게 규칙이기 때문이다. (끄덕)

또한, 잘 보시면 누적 도토리 보유량과 기존 도토리 보유량을 별도로 구분하지 않은 것을 알 수 있는데, 이것도 소지금과 마찬가지로, 이 연산이 루프에 함께 포함되어 있기 때문이어요.

실행해보면, 내가 전에 구매한 도토리와 토끼고기 개수를 기억하고 있다는 걸 알 수 있죠?

변수 추적

우리는 변수를 한 번씩만 선언했지만, 프로그램은 그 변수를 계속 재활용해 상황에 따라 다른 값을 출력하고 있는 것을 알 수 있습니다. 그럼 지금 이 시점에 각 변수에 어떤 값이 저장되어있는지, '출력'기능을 사용하지 않고도 미리 알 수 있는 방법은 없을까요? 있어요!

메뉴 버튼들 중에서 '변수 감시'라고 쓰여있는 것을 누르면 됩니다. 그럼 내가 실행 화면에서 이것저것 입력할 때마다 변수가 바뀌는 것을 바로바로 볼 수 있어요. 신기하쥬 'ㅁ'

코드 변환

그리고 지금까지 만든 플로우 차트를 코드로 변환할 수도 있습니다! 코드 뷰어를 누르면 되죠!

뿐만 아니라 어떤 프로그래밍 언어를 사용할지 선택할 수도 있습니다. 게임을 만든다면 C# (여기에는 C샤프라고 쓰여있는데 보통은 씨샵이라고 읽습니다.), C++, 자바를 주로 쓰지요. 플로우 차트가 어떤 식으로 동작하는지 알았으니 이제 코드를 보고도 대충 이해할 수 있겠죠?

 

물론 이 프로그램은 완전한 코딩 툴이 아니기 때문에 매우 기초적인 상황들만 구현할 수 있습니다. 조금만 상황이 복잡해져도...

플로우 차트가 지저분해지고...

코드도 현실과 동떨어지게 나옵니다.. 이럴 때는 if에 if에 if를 더해서 쓰는 게 아니라 switch 같은 것을 쓰지요. 더 정확히는 테이블에서 값을 받아오는 식인데, 당연히 그런 기능도 지원하지 않습니다!

 

하지만 이 정도만 해도 기본적인 코드 구조 이해에 큰 도움이 되니까 게임 시스템 기획자 지망생이라면 꼭 한번 써보시길 바랄게요!

반응형