LogoLogo
  • Guide of goorm
  • ENGLISH
    • goorm account (for all services)
    • goormIDE
      • 01. Getting Started
        • What is goormIDE?
        • Key Terms
        • Quickstart
        • Build
          • C/C++
          • JAVA
          • Node.js
          • Python
          • Ruby
          • JSP
          • PHP
          • .NET
          • Spring-Maven
      • 02. Container
        • Container Specifications
        • Image: Packs
        • Inactive Container
        • Automatic Stop
      • 03. Workspace
        • Introduction to the Workspace
        • Collaboration
          • Contaienr Sharing
          • Co-Editing
          • Chatting
        • Keyboard Shortcut
        • Import Github Repos
        • Workspace Features
          • Init Script
          • Environment Variables
          • Commands
          • URL/Port
          • Application Modes
          • Muti Project
          • Merge Code
          • AI code completion
        • Source Code Management - Git
          • Git
          • Status
          • Add
          • Commit
          • Push
          • Pull
          • Ignore
          • Branch
          • Log
          • Event tab
          • Diff
        • File Management
          • Move
          • Open / Close
          • Properties
        • Terminal
        • Extra features
          • Auto Complete / Auto Import
          • Bug Reporting
          • Language Support
          • SBOM Management
      • 04. GPU
        • Introduction to the GPU
      • 05. Credits
        • About Credits
        • How credits are calculated
      • 06. Membership
        • About Membership
      • 07. FAQ
        • SSH / Port Forwarding Configuration
        • Why my container is blocked?
        • Can I use goormIDE on a mobile device?
        • React Native Container is not working
        • How to run as background process?
        • Using MySQL Workbench with goormIDE
        • I want to use Selenium.
        • How do I copy/paste from the terminal?
    • goormDEVTH (for applicants)
      • Access Evaluation
      • Proceed Evaluation
      • FAQ
        • The answer is correct, but it conflicts with the test case.
    • goormDEVTH (for interviewers)
      • Quick Start
        • Sign In & Sign Up
        • Reset Password
        • Free Trial
      • Management and Settings
        • New Assessment
        • Assessment Management
        • Assessment Information
        • Assessment Settings
        • Activity Log
      • Quiz Management
        • Making a New Quiz
        • Quiz Management
        • Import Quiz and General Settings
        • New Quiz(Different Types)
      • Test Management
        • Assessment List(New Assessment/Assessment Management)
        • Exam Result Management
        • Real Time Status
      • Applicant Management and Grade Report
        • Applicant Management
        • Applicant Invitation
        • Applicant Group Management
        • Grade Report
  • 한국어
    • 구름 계정(공통)
    • 구름IDE 사용법
      • 01. 시작하기
        • 구름IDE가 무엇인가요?
        • 주요 용어
        • 빠르게 사용해보기
        • 빌드
          • C/C++
          • JAVA
          • Node.js
          • Python
          • Ruby
          • JSP
          • PHP
          • .NET
          • Spring-Maven
        • 디버그
      • 02. 컨테이너
        • 컨테이너 성능
        • 이미지팩
        • 컨테이너 동면
        • 자동 정지
      • 03. 워크스페이스
        • 워크스페이스 소개
        • 협업 기능
          • 컨테이너 공유
          • 동시 편집
          • 채팅
        • 단축키
        • Github 저장소 불러오기
        • 편의 기능
          • 시작 스크립트
          • 환경 변수
          • 명령어
          • URL/Port
          • 애플리케이션 모드
          • 멀티 프로젝트
          • 코드 병합
          • AI 코드 자동완성 기능
        • 소스 코드 관리 - Git
          • Git
          • Status
          • Add
          • Commit
          • Push
          • Pull
          • Ignore
          • Branch
          • Log
          • Event tab
          • Diff
        • 파일 관리
          • 이동
          • 열기 / 닫기
          • 속성
        • 터미널
        • 기타 기능
          • 자동 완성 / 자동 Import
          • 버그 리포트
          • 다국어 지원
          • SBOM 관리
      • 04. GPU
        • GPU 소개
      • 05. 크레딧
        • 크레딧이란?
        • 크레딧 계산하기
      • 06. 멤버십
        • 멤버십이란?
      • 07. 자주 묻는 질문(FAQ)
        • SSH / 포트포워딩 설정 방법
        • 차단이 됐는데 이유를 모르겠어요
        • 모바일 기기에서 구름IDE를 사용할 수 있나요?
        • React Native 컨테이너가 실행이 안 돼요
        • 백그라운드 프로세스로 실행하는 방법
        • 구름IDE 에서 MySQL Workbench를 사용하고 싶어요
        • Selenium을 사용하고 싶습니다
        • 터미널에서 복사/붙여넣기는 어떻게 하나요?
    • 구름EDU 사용법(수강자용)
      • 00. 소개
      • 01. 회원 가입 & 로그인
        • 회원 가입 & 로그인
        • 비밀번호 재설정하기
        • 메인 페이지 안내
      • 02. 수강하기
        • 강좌 찾기
        • 무료 강좌 수강하기
        • 유료 강좌 수강하기
        • 내 수강 정보 화면 안내
        • 수강 평가하기
        • 수강 취소하기
      • 03. 학습 진행
        • 강의 시작하기
        • 수강화면 인터페이스
        • 실습화면 인터페이스
          • 채점 모드 / 제출 모드 / 실행 모드
      • 04. 시험/과제
        • 모니터 화면 공유(스크린캡쳐)/웹캠 권한 허용
        • 모바일(핸드폰) 카메라 설정
        • 시험/과제 화면 인터페이스
        • (동영상가이드)시험/과제 화면 인터페이스
      • 05. 문제 유형 소개
        • 스크래치 프로그래밍 문제 유형
        • 일반 프로그래밍 문제 유형
        • GUI 프로그래밍 문제 유형
        • 거북이 문제 (Skulpt) 유형
        • 유닛 테스트 문제 유형
        • 로보코드(코드) 문제 유형
        • 웹 서비스/애플리케이션 개발 문제 유형
        • HTML/CSS/JS 프로그래밍 문제 유형
        • RESTful API 실습 유형
        • 아두이노 스케치 개발 문제 유형
        • 스크래치두이노 개발 문제 유형
        • 일반 문제 유형
      • 06. 구름IDE를 이용한 강좌 수강
        • 구름IDE와 강좌의 연결
      • 07. 학교/기관/기업 채널 서비스 수강자
        • 채널 가입
          • 채널 가입하기
          • 초등학교 전용 채널 그림 로그인
        • 채널 검색
        • 수강 신청
          • 강좌 찾기
          • 수강 신청하기
          • 수강정보 화면 안내
        • 학습 진행
          • 출석
          • 온라인 튜터링
          • 시험 응시하기 & 과제 제출하기
      • 08. 구름LIVE Playground
        • 카메라와 마이크를 설정 할 수 없는 경우
      • 자주 묻는 질문(FAQ)
        • 채널 가입 신청이 승인 대기중이라고 나옵니다
        • 수강 신청을 했는데 강좌가 안 보입니다.
        • 실수로 시험을 종료했을 때, 다시 시험을 칠 수 있나요?
        • 수강 취소를 하고 싶어요
        • 수강취소했는데 환불이 안되었습니다
        • 모바일 버전 지원도 되나요?
        • [화상강의] 카메라와 마이크가 안 뜹니다.
    • 구름EDU 사용법(강의자용)
      • 01. 구름EDU 강의 관리 도구
        • 소개
        • 회원가입 & 로그인
        • 강의자 권한 신청
      • 02. 강좌 관리 및 설정
        • 강의자 홈
        • 강좌 만들기
        • 강좌 홈
        • 설정
        • 활동 내역
        • 뼈대 강좌로 강좌 생성하기
      • 03. 교육 컨텐츠 만들기
        • 강좌 컨텐츠의 구성
        • 챕터/강의 추가 및 삭제, 이름 변경, 위치 변경
        • 이론 중심 강의 편집하기
        • 동영상 한 번에 올리기
        • 실습 중심 강의 편집하기
        • 공개 기간 / 배지
        • 체험 강의 설정
      • 04. 문제 관리
        • 문제 가져오기 및 공통 설정
        • 스크래치 문제 만들기
          • 확장 기능 이용하기
        • 엔트리 문제 만들기
        • 일반 프로그래밍 문제 만들기
        • GUI/GAME 프로그래밍 문제 만들기
        • 유닛 테스트 문제 만들기
        • 로보코드 문제 만들기
        • 크루세이더 퀘스트 문제 만들기
        • 거북이 문제(Skulpt) 만들기
        • GlowScript 문제(VPython) 만들기
        • 웹 서비스/애플리케이션 개발 문제 만들기
        • 웹 서비스/애플리케이션 개발 문제 실행해보기
        • HTML/CSS/JS 프로그래밍 문제 만들기
        • 채점 스크립트 작성하기
        • RESTful API 문제 만들기
        • 아두이노 개발 문제 만들기
        • 스크래치두이노 개발 문제 만들기
        • O/X 문제 만들기
        • 주관식 문제 만들기
        • 객관식 문제 만들기
        • 선긋기 문제 만들기
        • 서술형 문제 만들기
        • 파일 제출 문제 만들기
        • 문제 검색, 수정, 삭제
      • 05. 시험/과제 관리
        • 시험/과제의 개념
        • 시험/과제 생성
        • 결과 분석
        • 실시간 시험 현황
      • 06. 수강자 관리
        • 수강자 관리
        • 신규 수강자 초대하기
        • 초대 메일 발송
        • 강좌 코드로 초대하기
        • 계정 만들어 주기
        • 출석 관리
        • 온라인 튜터링
      • 07. 성적 관리
        • 성취도 분석
        • 성적 보고서 만들기
      • 08. 기업/학교/학원/기관별 채널
        • 채널이란
        • 채널 신청 방법
        • 채널 관리
        • 사용자 관리
        • 채널 사용자 추가
          • 초대 메일 발송
          • 초대 링크로 사용자 초대하기
          • 계정 만들어주기
        • 강좌에 수강자 초대하기
          • 초대 메일 발송
          • 초대 코드 전달
          • 계정 만들어 주기
          • 임시 수강생 등록
        • 공동강의자 추가하기
        • 채널 활동 기록
          • 자동/수동 채점 및 채점 기록
        • 채널 설정
        • 채널 강좌 관리
      • 09. 구름LIVE Studio
      • 자주 묻는 질문(FAQ)
        • 내 강좌 교육과정에 뼈대 과목에 있는 몇 개의 강의를 복사하고 싶습니다
        • 시험 끝내기 버튼이 보이지 않습니다
        • 수강생의 학년/반/번호를 수정하고 싶습니다
        • 코드 에디터에서 복사/붙여넣기가 동작하지 않습니다
        • 수강생들이 제출한 파일은 어디에서 볼 수 있나요?
        • 제출시 프로그램 수행시간 제한과 실행시 프로그램 수행시간 제한의 차이점인 뭔가요?
        • 문제 가져오기에 보이는 문제와 안 보이는 문제는 무슨 차이가 있나요?
        • 시험과 과제는 어떤 차이점이 있는 건가요?
        • 성취도 보기에 완료로 되어있는데 제출 결과는 없습니다
        • 시험 가져오기를 통해 가져올 수 있는 시험은 어떤 건가요?
        • 채팅은 강의자와 수강생 1:1로만 대화가 가능한가요?
        • 기업, 학교 등 기관 회원 가입은 어떻게 하나요?
        • 강좌 개설 후 공개 설정을 했는데, 채널 메인에서 확인이 안 됩니다
        • 관리자 권한이 없습니다 / 관리자 페이지를 못찾겠습니다
        • 답안을 정규표현식으로 어떻게 작성할 수 있나요?
        • 구름EDU 강의자의 혜택이 궁금합니다
        • Interactice shell이 뭔가요?
        • 함수형 문제를 만들고 싶습니다
    • 구름DEVTH 사용법(지원자용)
      • 평가 접속하기
      • 평가 진행하기
        • 모니터화면공유(스크린캡쳐)/웹캠 권한 허용
        • 모바일(핸드폰) 카메라 설정
        • 스마트폰에서 QR코드 인식 방법
      • 평가 종료하기
      • 자주 묻는 질문(FAQ)
        • 로그인 시 정보가 일치하지 않는다고 합니다
        • 실행이 안됩니다
        • 시험을 종료하고 싶습니다
        • 채점 결과는 정답인데, 테스트케이스를 실행하면 불일치라고 합니다.
        • 사용 가능 언어를 알고 싶습니다 / 언어를 변경하고 싶습니다
        • 컴파일러 버전이 궁금합니다
        • 붙여넣기를 하지 않았는데, 경고문구가 뜹니다.
        • 초대 메일이 도착하지 않았습니다
        • 시험 응시를 위한 권장 환경은 어떻게 되나요?
    • 구름DEVTH 사용법(평가자용)
      • Quick Start
        • 평가/시험/문제
        • 평가 생성
        • 문제 생성
        • 시험 생성
        • 지원자 초대
        • 무료 체험 사용 신청
      • 평가 관리 및 설정
        • 평가 생성
        • 평가 관리
        • 평가 정보
        • 평가 설정
        • 활동 기록
      • 문제 관리
        • 문제 생성
        • 문제 관리
        • 문제 가져오기 및 공통 설정
        • 문제만들기(유형별)
      • 시험 관리
        • 평가 목록(시험 생성/관리)
          • 순위 보여주기
          • 구름IDE로 시험 보기
        • 결과 관리
          • 부정행위 방지 기능
            • 웹캠 / 스크린(화면) 캡쳐
            • 소스 코드 유사도 검사
            • 작성 이력 재생
        • 실시간 평가 현황
      • 지원자 및 성적 관리
        • 지원자 관리
        • 지원자 초대
        • 지원자 그룹 관리
        • 성적 보고서
      • 자주 묻는 질문(FAQ)
        • 문제, 답안, 채점결과까지 한 문서에 출력하고 싶습니다.
        • 기업용 문제은행은 어떻게 사용할 수 있나요?
        • 함수형 문제를 만들고 싶습니다
        • 구름DEVTH 옵저뷰 사용을 위한 권장 환경은 어떻게 되나요?
  • RELEASE NOTES
    • goormIDE
      • Jan 10, 2025
      • Nov 28, 2024
      • Nov 7, 2024
      • Oct 17, 2024
      • Sep 26, 2024
      • Sep 12, 2024
      • Aug 16, 2024
      • Jul 30, 2024
      • Jul 04, 2024
      • Jun 13, 2024
      • May 24, 2024
      • May 2, 2024
      • Apr 18, 2024
      • Mar 27, 2024
      • Oct 05, 2023
      • May 15, 2023
      • Apr 03, 2023
      • Feb 17, 2023
      • Jan 12, 2023
      • Nov 29, 2022
      • Nov 10, 2022
      • Oct 13, 2022
      • Sep 28, 2022
      • Sep 09, 2022
      • Jul 25, 2022
      • Jul 04, 2022
      • Jun. 21, 2022
      • May. 24, 2022
      • May. 2, 2022
      • Apr. 11, 2022
      • Mar. 24, 2022
      • Mar. 7, 2022
      • Feb. 10, 2022
      • Jan. 19, 2022
      • Dec. 23, 2021
      • Dec. 2, 2021
      • Nov. 11, 2021
      • Oct. 28, 2021
      • Sep. 29, 2021
      • Sep. 14, 2021
      • Aug. 19, 2021
      • Aug. 3, 2021
      • Jul. 13, 2021
      • May. 24, 2021
      • Apr. 9, 2021
      • Mar. 22, 2021
      • Jan. 7, 2021
      • Nov. 3, 2020
      • Jul. 23, 2020
      • May. 26, 2020
      • Apr. 20, 2020
      • Mar. 20, 2020
      • Feb. 21, 2020
      • Sep. 17, 2019
      • Nov. 28, 2019
    • goormEDU
      • Aug. 4, 2022
      • Jul. 1, 2022
      • May. 23, 2022
      • Mar. 23, 2022
      • Feb. 8, 2022
      • Dec. 24, 2021
      • Nov. 13, 2021
      • Oct. 23, 2021
      • Sep. 11, 2021
      • Aug. 21, 2021
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 9, 2021
      • Jan. 20, 2021
      • Dec. 7, 2020
      • Nov. 19, 2020
      • Nov. 3, 2020
      • Jun. 30, 2020
      • Jun. 16, 2020
      • May. 16, 2020
      • Apr. 14, 2020
      • Feb. 14, 2020
      • Dec. 27, 2019
      • Nov. 18, 2019
    • goormEDU Channel
      • May. 16, 2025
      • Apr. 25, 2025
      • Sep. 5, 2022
      • Jul. 25, 2022
      • Jul. 1, 2022
      • Apr. 28, 2022
      • Mar. 24, 2022
      • Feb. 8, 2022
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 14, 2021
      • Jan. 20, 2021
    • goormDEVTH
      • May. 15th, 2025
      • Apr. 24th, 2025
      • Apr. 4th, 2025
      • Mar. 17, 2025
      • Feb. 20, 2025
      • Apr.25, 2024
      • Jul. 19, 2022
      • May. 24, 2022
      • Mar. 29, 2022
      • Jan. 17, 2022
      • Dec. 24, 2021
      • Nov. 12, 2021
      • Oct. 22, 2021
      • Sep. 10, 2021
      • Aug. 20, 2021
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 9, 2021
      • Jan. 20, 2021
Powered by GitBook
On this page
  • 로보코드 문제 (Robocode)
  • 1. 로보코드 기본 정보
  • 1-1.게임 방식
  • 1-2.턴 개념
  • 1-3.이벤트 처리
  • 1-4.이벤트 우선 순위
  • 1-5.좌표
  • 1-6.각도
  • 1-7.이동
  • 1-8.충돌
  • 2. 이벤트 목록
  • 2-1.대기중일때
  • 2-2.벽에 충돌했을때
  • 2-3.로봇과 충돌했을때
  • 2-4.미사일에 맞았을 때
  • 2-5.적을 발견했을때
  • 3. 로봇 제어 함수
  • this.moveForwards(입력값);
  • this.moveBackwards(입력값);
  • this.turnRight(입력값);
  • this.turnLeft(입력값);
  • this.turnTurretRight(입력값);
  • this.turnTurretLeft(입력값);
  • this.turnRadarRight(입력값);
  • this.turnRadarLeft(입력값);
  • this.shoot(입력값);
  • this.setMaxVelocity(입력값);
  • this.setMaxTurnRate(입력값);
  • this.setTurnRight(입력값);
  • this.setTurnLeft(입력값);
  • this.setTurnTurretRight(입력값);
  • this.setTurnTurretLeft(입력값);
  • this.setTurnRadarRight(입력값);
  • this.setTurnRadarLeft(입력값);
  • 4. 정보 가져오기
  • this.getBattleFieldWidth();
  • this.getBattleFieldHeight();
  • this.getHp();
  • this.getHeading();
  • this.getTurretHeading();
  • this.getRadarHeading();
  • this.getVelocity();
  • this.getX();
  • this.getY();
  • 5. onEnemySpot 이벤트
  • e.getDistance();
  • e.getHp();
  • e.getVelocity();
  • e.getHeading();
  • e.getBearing();
  • 6. 점수표
  • 7. 디버깅
  • this.debug(내용);
  • 8. 스크래치를 이용한 로보코드

Was this helpful?

  1. 한국어
  2. 구름EDU 사용법(수강자용)
  3. 05. 문제 유형 소개

로보코드(코드) 문제 유형

Previous유닛 테스트 문제 유형Next웹 서비스/애플리케이션 개발 문제 유형

Last updated 4 years ago

Was this helpful?

학습진행 장에서 실습화면 인터페이스를 확인하지 않으셨다면 아래 링크를 먼저 확인하시기를 권장합니다.

로보코드 문제 (Robocode)

로보코드(코드) 문제는 로봇의 움직임을 프로그래밍하여 상대 로봇을 이기는 문제 형태입니다. 수강자님께서는 주어진 문제 내용과 로보코드에서 제공하는 함수를 확인하여, 이를 기반으로 프로그램을 작성하게 됩니다.

Javascript를 이용하여 프로그램을 작성할 수 있습니다.

1. 로보코드 기본 정보

1-1.게임 방식

로보코드는 Javascript로 로봇을 움직이는 코드를 작성하여 전장내의 다른 로봇을 파괴하는 게임입니다.

로봇의 기본 체력은 100입니다. 미사일을 맞거나 충돌이 발생하면 로봇의 체력이 감소하고, 0보다 낮아지면 파괴됩니다.

게임에서 로봇이 1개가 남았을 때 게임이 종료되며, 승리 조건은 단판승, 다전제, 점수제가 있습니다.

  • 단판승: 단 1라운드의 경기로 승/패가 결정되는 방식입니다.

  • 다전제: 3라운드 이상의 경기를 진행하며, 모든 라운드가 끝났을 때 더 많은 라운드에서 승리한 로봇이 최종 승리합니다.

  • 점수제: 1라운드 이상의 경기에서 각 라운드마다 게임 내용에 의해 점수가 결정되고, 모든 라운드가 끝났을 때 점수의 합계가 높은 로봇이 승리합니다. 점수 계산에 대한 자세한 정보는 6번 항목 점수표에서 확인할 수 있습니다.

1-2.턴 개념

로봇은 1턴 단위로 움직이게되며, 기본 게임속도는 1초에 30턴이 진행되는 속도입니다. 예를들어 10만큼 이동하라는 명령어를 수행한다면, 1턴에 10만큼 이동하는 것이 아닌, 조건에 의해 여러 턴동안 10만큼 움직이게 됩니다.

마찬가지로 20만큼 회전하라는 명령어는 조건에 의해 여러 턴 동안 20만큼 회전합니다. 이 개념은 더 나은 로봇을 만들기 위해서 이해가 필요합니다.

1-3.이벤트 처리

로보코드는 이벤트에 의해 동작합니다. 기본적으로 onIdle이라는 기본함수가 반복적으로 동작하면서, 특정 상황에 이벤트가 발생한다면 해당 이벤트를 우선으로 로보코드가 동작합니다.

예를 들어 대기 중일때 로봇을 회전하면서 적을 찾게되면, onEnemySpot이라는 이벤트가 발생하여, 해당 이벤트의 함수들을 우선적으로 동작시킵니다. 만약 기본함수 내의 함수들과 이벤트 내의 함수가 동시에 실행할 수 있는 함수라면 (직진과 회전) 동시에 실행됩니다.

1-4.이벤트 우선 순위

각 이벤트에는 우선순위가 지정되어있습니다. 우선순위는 아래와 같습니다.

onHit(미사일에 맞았을 때) - 40 onWallCollide(벽에 충돌했을 때) - 30 onRobotCollide(다른 로봇과 충돌했을 때) - 20 onEnemySpot(다른 로봇을 발견했을 때) - 10

이에 대한 설명은 아래와 같습니다.

1. A 이벤트가 동작중일 때, A보다 우선순위가 높은 B 이벤트가 발생한다면, A는 중지되고 B이벤트가 동작한다. 2. A 이벤트가 동작중일 때, A보다 우선순위가 낮은 B 이벤트가 발생한다면, B는 동작하지 않는다. 3. 2개의 이벤트가 한 턴에 동시에 발생한다면, 우선순위가 높은 이벤트가 실행된다.

설명이 어려울 수 있지만, 직접 해본다면 쉽게 알 수 있을 것입니다.

1-5.좌표

로보코드에서 위치는 (x, y)로 표시됩니다. 전장의 가장 왼쪽 위가 (0, 0)이며, 오른쪽으로 갈수록 x값이 증가하며, 아래로 갈수록 y값이 증가합니다.

1-6.각도

로보코드에서 각도는 (0 <= 각도 < 360) 로 표시됩니다. 북쪽이 0도이며, 시계방향으로 증가합니다. 즉, 동쪽은 90도, 남쪽은 180도, 서쪽은 270도입니다.

1-7.이동

로봇은 이동함수(this.moveForwards, this.moveBackwards)에 의해 움직입니다.

속도가 증가할때는 최대 1씩 증가하며, 감소할때는 최대 2씩 감소합니다. 최대 속도는 8입니다.

만약 정지상태에서 this.moveForwards(100)의 함수로 100만큼 움직이게 했다면, 속도는 0부터 8까지 1씩 증가하여 8인상태 (1턴당 8만큼 움직임)로 움직이다가 정지할때쯤 2씩 감소하여 0의 속도가 되어 정지하게됩니다.

1-8.충돌

로봇은 벽이나 다른 로봇과 충돌할 때 피해를 입습니다. 벽에 부딪힌다면 체력이 0.2 감소하고, 다른 로봇과 부딪힌다면 체력이 0.6 감소합니다.

2. 이벤트 목록

2-1.대기중일때

위의 함수는 이벤트가 아닌 로봇의 기본 동작함수로서, 로봇이 다른 이벤트가 없을 때 기본적으로 계속 반복되는 함수입니다.

이곳에 코드를 작성하면 로봇이 대기중인 상태에서의 동작을 구현할 수 있습니다.

2-2.벽에 충돌했을때

위의 이벤트는 로봇이 벽에 충돌하는 상황에서 발생하는 이벤트입니다. 이곳에 코드를 작성하면 로봇이 벽에 충돌했을 때의 동작을 구현할 수 있습니다.

2-3.로봇과 충돌했을때

위의 이벤트는 로봇이 다른 로봇과 충돌하는 상황에서 발생하는 이벤트입니다. 이곳에 코드를 작성하면 로봇이 다른 로봇과 충돌했을 때의 동작을 구현할 수 있습니다.

2-4.미사일에 맞았을 때

위의 이벤트는 로봇이 미사일에 맞았을 때 발생하는 이벤트입니다. 이곳에 코드를 작성하면 로봇이 다른 로봇과 충돌했을 때의 동작을 구현할 수 있습니다.

2-5.적을 발견했을때

위의 이벤트는 로봇이 미사일에 맞았을 때 발생하는 이벤트입니다. 이곳에 코드를 작성하면 다른 로봇을 발견했을 때의 동작을 구현할 수 있습니다.

이 이벤트에서 사용 할 수 있는 함수가 추가적으로 있습니다. 자세히 알아보려면 하단 5번 항목을 참조하시기 바랍니다.

3. 로봇 제어 함수

this.moveForwards(입력값);

입력값(거리)만큼 로봇을 전진시키는 함수입니다.

this.moveBackwards(입력값);

입력값(거리)만큼 로봇을 후진시키는 함수입니다.

this.turnRight(입력값);

입력값(각도)만큼 로봇을 오른쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 왼쪽으로 회전합니다.

1턴에 회전할 수 있는 각도는 최대 10도입니다. (10 - 속도 * 0.75)

this.turnLeft(입력값);

입력값(각도)만큼 로봇을 왼쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 오른쪽으로 회전합니다.

1턴에 회전할 수 있는 각도는 최대 10도입니다. (10 - 속도 * 0.75)

this.turnTurretRight(입력값);

입력값(각도)만큼 대포를 오른쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 왼쪽으로 회전합니다.

1턴에 회전할 수 있는 각도는 최대 20도입니다.

this.turnTurretLeft(입력값);

입력값(각도)만큼 대포를 왼쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 오른쪽으로 회전합니다.

한번에 회전할 수 있는 각도는 최대 20도입니다.

this.turnRadarRight(입력값);

입력값(각도)만큼 레이더를 오른쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 왼쪽으로 회전합니다.

1턴에 회전할 수 있는 각도는 최대 45도입니다.

this.turnRadarLeft(입력값);

입력값(각도)만큼 레이더를 왼쪽으로 회전시키는 함수입니다. 만약 입력값이 0보다 작으면 오른쪽으로 회전합니다.

1턴에 회전할 수 있는 각도는 최대 45도입니다.

this.shoot(입력값);

입력값에 의해 결정된 공격력과 속도를 갖는 미사일을 발사합니다.

1. 입력값만큼 내 로봇의 체력이 소모됩니다.

2. 입력값 * 4 (만약 입력값이 1이상이면 2 * (입력값 - 1) 추가) 의 공격력을 갖습니다.

3. 20 - 3 * 입력값 만큼의 속도를 갖습니다. 4. 미사일이 명중하면 적은 공격력만큼의 체력이 감소합니다.

5. 미사일이 명중하면 내 로봇은 공격력 * 3 만큼의 체력을 회복합니다.

6. (입력값 / 5) + 1 만큼 대포가 가열됩니다. (대포는 1턴에 0.1만큼 식고, 가열이 0이되어야 미사일을 발사 할 수 있습니다.)

this.setMaxVelocity(입력값);

로봇의 최대 속도를 입력값으로 설정하는 함수입니다. 입력값은 0보다 크고 8보다 같거나 작아야 합니다.

this.setMaxTurnRate(입력값);

로봇의 최대 회전각도를 입력값으로 설정하는 함수입니다. 로봇의 최대 회전각도는 입력값과 속도에 의해 결정된 값 중 작은값으로 결정됩니다.

입력값은 0보다 크고 10보다 같거나 작아야합니다.

this.setTurnRight(입력값);

로봇의 다음 이동 함수가 실행될 때 동시에 로봇을 입력값만큼 오른쪽으로 회전시키는 함수입니다.

this.setTurnRight(20);을 호출하고 그 뒤에this.moveForwards(100);을 호출한다면 로봇이 100을 이동함과 동시에 로봇을 20도만큼 오른쪽으로 회전시킵니다.

this.setTurnLeft(입력값);

로봇의 다음 이동함수가 실행될 때 동시에 로봇을 입력값만큼 왼쪽으로 회전시키는 함수입니다.

this.setTurnTurretRight(입력값);

로봇의 다음 이동함수가 실행될 때 동시에 대포를 입력값만큼 오른쪽으로 회전시키는 함수입니다.

this.setTurnTurretLeft(입력값);

로봇의 다음 이동함수가 실행될 때 동시에 대포를 입력값만큼 왼쪽으로 회전시키는 함수입니다.

this.setTurnRadarRight(입력값);

로봇의 다음 이동함수가 실행될 때 동시에 레이더를 입력값만큼 오른쪽으로 회전시키는 함수입니다.

this.setTurnRadarLeft(입력값);

로봇의 다음 이동함수가 실행될 때 동시에 레이더를 입력값만큼 왼쪽으로 회전시키는 함수입니다.

4. 정보 가져오기

this.getBattleFieldWidth();

전장의 가로 크기를 가져오는 함수입니다.

this.getBattleFieldHeight();

전장의 세로 크기를 가져오는 함수입니다.

this.getHp();

내 로봇의 현재 체력을 가져오는 함수입니다.

this.getHeading();

내 로봇이 바라보는 방향을 각도(0 <= 각도 < 360)로 가져오는 함수입니다.

this.getTurretHeading();

내 대포가 바라보는 방향을 각도(0 <= 각도 < 360)로 가져오는 함수입니다.

this.getRadarHeading();

내 레이더가 바라보는 방향을 각도(0 <= 각도 < 360)로 가져오는 함수입니다.

this.getVelocity();

내 로봇의 현재 속도를 가져오는 함수입니다.

this.getX();

내 로봇의 x좌표를 가져오는 함수입니다.

this.getY();

내 로봇의 y좌표를 가져오는 함수입니다.

5. onEnemySpot 이벤트

prototype.onEnemySpot = function(e) {};와 같은 형태로 onEnemySpot 이벤트에 파라미터를 받아온다면 아래와 같은 함수를 쓸 수 있습니다.

e.getDistance();

발견한 적과 내 로봇의 거리를 가져오는 함수입니다.

e.getHp();

발견한 적의 현재 체력을 가져오는 함수입니다.

e.getVelocity();

발견한 적의 속도를 가져오는 함수입니다.

e.getHeading();

발견한 적의 로봇이 바라보는 방향을 각도(0 <= 각도 < 360)로 가져오는 함수입니다.

e.getBearing();

발견한 적의 방향과 내 로봇이 바라보는 방향의 차이를 각도로 가져오는 함수입니다. (-180 < 각도 <= 180)

만약 내 로봇이 20도방향을 바라보고 있는데 적 로봇이 50도의 위치에서 감지된다면 결과는 30이되고, 만약 내 로봇이 270도 방향을 바라보고 있는데 적 로봇이 180도 위치에서 감지된다면, 결과는 -90이 됩니다.

6. 점수표

점수제 게임에서의 점수계산항목은 다음과 같습니다.

  • 총 점수: 다른 모든 항목들의 점수를 더한 점수입니다. 이 점수로 승패가 결정됩니다.

  • 생존 점수: 각 라운드에서 다른 로봇이 파괴될 때 마다 살아있는 모든 로봇은 50점을 얻습니다.

  • 생존 보너스: 각 라운드에서 마지막으로 살아남은 로봇은 그 라운드에서 파괴된 로봇 수 * 10점을 얻습니다.

  • 대포 점수: 대포를 발사해 다른 로봇을 명중시킬때 로봇에게 입힌 피해만큼 점수를 얻습니다.

  • 대포 보너스: 대포를 발사해 다른 로봇을 명중시켜, 그 로봇이 파괴되면 해당 라운드에서 그 로봇에게 입힌 피해 * 0.2 만큼 점수를 얻습니다.

  • 충돌 점수: 다른 로봇에게 일방적으로 접근하여 충돌을 발생시키면 충돌로 입힌 피해 * 2 만큼 점수를 얻습니다.

  • 충돌 보너스 다른 로봇에게 일방적으로 접근하여 충돌을 발생시켜, 그 로봇이 파괴되면 해당 라운드에서 그 로봇에게 입힌 피해 * 0.3 만큼 점수를 얻습니다.

해당 문제가 포함된 시험에서 얻을 수 있는 점수의 비율은 시험 점수 * 나의 총 점수 / 적 로봇중 가장 높은 순위의 로봇의 총점수 입니다. 즉, 위의 표대로라면 30점을 얻을 수 있는 시험에서 30 * 50/110 = 약 13.63점을 얻게됩니다.

7. 디버깅

this.debug(내용);

위 함수를 통해 하단 터미널에서 확인하고 싶은 내용을 출력할 수 있습니다. 문자, 숫자, boolean만 출력 가능합니다.

8. 스크래치를 이용한 로보코드

아래와 같이 스크래치를 이용하여 로보코드 문제를 작성할 수 있습니다.

실습화면 인터페이스