1. 개요
1. 개요
플레이봇 / playbot공식 홈페이지
고등학교 정보 교사들이 만든 교육용 프로그래밍 언어 플랫폼. 알만툴처럼 기본적으로 캐릭터(봇)이 있어 이 녀석에게 무언가를 시킬 수 있다. 독자적인 스크립트 언어(?)를 사용하는데 코드 만들기에서 맨 밑으로 내려가 명령어 사전을 눌러보면 이 플랫폼의 언어를 보고 배울 수 있다.[1] 나중에 C언어, 자바, C#, C++같은 프로그래밍언어나 자바스크립트, 파이썬과 같은 스크립트 언어를 배우는데 실질적으로 도움이 안되지만, 적어도 프로그래밍에 관해 백지인 상태에선 컴퓨터가 컴파일을 하는 방식을 이해하는데 그 언어들보다는 훨씬 더 도움이 된다.
로그인을 하면 플랫폼의 클라우드에 작업한 파일의 내용을 저장해 놓을 수 있다. 이 저장에는 코드 저장과 월드 저장이 있는데, 웬만해서는 그냥 코드 저장으로 하는 것이 좋다. 그 이유는 월드 저장은 코드를 저장해 주지 않고 코드를 따로 저장해도 월드 불러오기가 코드를 안 불러와 주는데 코드 저장은 월드를 같이 저장해 주고 코드 불러오기는 코드와 월드를 같이 불러와 주기 때문이다. 잘 못하겠다면 분홍색 코드 블록의 모두 부분을 이용하자. 이걸 배워야 하는 사람은 손으로 move()를 치는 것보다 마우스로 누르는 것이 빠를 수 있다.
알만툴 이야기를 다시 하자면, 이 플랫폼에도 물품이라는 것이 있어 기본 오브젝트를 이용하여 배경을 꾸밀 수 있다. 물건, 비퍼 란에서 할 수 있다. 그런데 여기 물건 주기에 공식 물건과 사용자 물건이 있는데 이 사용자 물건은 요청하여 업로드 하는 것. 시작할 때 월드 설정에서 크기를 원하는 바에 맞게 알맞게 조정하는 일을 첫번째로 하길 추천한다. 30*20이 최대 크기이고 기본 크기는 10*10인데 나중에 바꾸려고 들면 미리 맵에 작업해 놓은 오브젝트와 맵 편집이 다 사라질 수 있기 때문. 방금 말한 월드 편집으로 벽을 만들 수 있다.
오브젝트를 맵에 추가하는 방법은 '월드 편집'을 누르고 원하는 칸을 클릭하고 토마토를 누르자. 그러면 그냥 '물건, 비퍼'를 눌렀을 때 나오는 창이 나온다. 참고로 이 창을 이용하면 봇한테 물건을 줄 수 있다.
어지간해서는 로봇을 둘 이상 만들지 말자. 모든 코드마다 어떤 로봇한테 일을 행하는지 다 붙여줘야 하고 로봇을 다시 지워도 스크립트 찌꺼기가 남는지 계속 붙이라고 한다. 만약 실수로 만들었는데 못해먹겠다면 코드는 복사하고 맵은 포기해서 다시 시작하는 것이 나을 수도 있다.
이 예제들 중 플레이 봇 샘플 예제 15번 미로 찾기 예제의 코드를 가져와도, 다른 맵에서는 미로의 섬에서 헤어나오지 못하고 허우적 대는 등 모든 미로를 통과할 수 있는 예제는 아니다. 우수법이라는, 100% 미로 찾기가 가능하다고[2] 어떤 수학자가 증명한 방식을 이용하면 위의 사태가 일어나지 않는데 그 예시는 다음과 같다. (아래는 플레이봇 코드에 맞게 설정된 우수법이다.)
#!syntax javascript
function turn_right() {
turn_left()
turn_left()
turn_left()
}
function a()
{
if(front_is_clear())
{if(right_is_wall()){move()}
}
}
function b() {
if(front_is_wall())
{
if(right_is_wall())
{turn_left()}
}
}
function c()
{
if(right_is_wall())
{if(front_is_clear()){move()}
}
}
function d()
{
if(front_is_clear())
{
if(right_is_clear())
{turn_right()
move()
}
}
}
function e()
{
if(front_is_wall())
{
if(right_is_clear())
{turn_right()
move()
}
}
}
function z()
{
if(a())
{}
else{
b()
c()
d()
e()
}
}
repeat("z()",999999999999999999999999999999999999999999999999999999999999999999999999999999999999999)
이런 식으로 예제라고 모두 믿을 수 있는 것은 아니다. 다만 그런 예제들은 위 처럼 조잡하게 프로그래밍되어있지 않고 체계적으로 잘 되어있으므로 예제를 잘 이해하고 그런 방식들을 익히면 알고리즘 면에서나 최적화 면에서 이득을 보는 법을 깨닫게 되므로 이후 프로그래밍을 배울 때 도움을 받을 수 있을 것이다.
여담으로 프로그래밍 창에서 캐릭터를 계속 클릭하면 그만 누르라고 하고, 그래도 계속 누르면 짜증나니까 답하지 않겠다고 하면서 응답하지 않는다.[3]
[1] ; 등이 필요하지 않지만 /*과 같은 주석은 먹히는 것으로 봐서 대략 자바스크립트와 비슷한 것으로 추측된다.[2] 얘도 시작할 때 우수, 플레이 봇의 경우 시작하는 곳의 봇의 오른쪽이 미로의 섬일 경우에는 불가능하다. 이 경우 밑에 나오는 코드를 좌수법으로 바꾸고 위에서 설명한 예시의 스택제를 적용하여 섬에 스택이 쫙 쌓이는 것을 감지할 수 있게 하고 그럴 경우 좌수법을 이용하게 if문 등을 이용해 코드를 설정해 놓으면 해결된다. 참고로 좌수법도 시작할 때 왼손이 미로의 섬만 아니면 모든 맵을 통과할 수 있기에 두 가지를 조합하면 완벽하다. 다만 우수법이나 좌수법을 옳게 사용하고 있는 상황에서 스택제가 문제를 또 발생 시킬 수 있으니 스택이 적어도 3번 이상 쌓였을 때 반응하게 만드는 것이 좋다. 무슨 말이냐면 우수법이나 좌수법이나 지나가다 보면 분명 막힌 길을 돌아 나오면서 갔던 길을 다시 되돌아오는 경우가 많기에 스택2로서는 미로의 섬만 감지할 수는 없다는 것.[3] 근데 5번 더 누르면 다시 자기 이름을 이야기한다.
\