랄라라룽
대표칭호 없음
이해도 | 중급자 |
---|---|
게임버전 (JE) | 1.19.4, 1.20, 1.20.1 |
게임버전 (BE) | 관련없음 |
안녕하세요 취미로 커맨드 하고 있는 그냥 사람입니다.
단도직입적으로 말씀드리면 damage 명령어 이용하는 것 말고 스코어보드 자체 값을 피해화 해서 데미지를 줄 수 있다고 들었던 것 같은데 이게 커맨드작인지 데이터 팩인지 기억이 안나네요..
가능하시다면 예시문 하나만 들어주면 감사하겠습니다
감사합니다.
김형원
2023.08.20데이터팩이라면 재귀함수를 이용하시면 됩니다
만약 스냅샷이라면 매크로를 쓰시면 되고요
IRONBLOCK
2023.08.20재귀함수로 어떤식으로 하는지 자세하게 설명해주실 수 있나요?
김형원
2023.08.21프로그래밍에서 기본적인 반복문의 구조는 다음과 같습니다
-----------------------------
for(int i = 0; i < 10; i++){
개쩌는 코드
}
-----------------------------
이를 풀어쓰면 다음과 같습니다
-----------------------------
int i = 0;
while(i < 10){
개쩌는 코드
i++;
}
-----------------------------
마인크래프트에서 조건문은 execute if로 쓸 수 있고 다시 실행하는건 재귀함수로 할 수 있습니다.
여기서 재귀함수가 뭔지 잘 모르는 사람을 위해 설명하자면 재귀함수는 "자기 자신을 실행하는 함수"입니다
아래와 같은 내용의 asdf.mcfunction이라는 함수가 있다고 생각해봅시다
-----------------------------
#asdf.mcfunction
function pack:asdf
-----------------------------
이때 asdf를 실행시키면 어떻게 될까요?
첫번째 실행된 asdf는 다시 asdf를 실행시킬 것입니다. 이때 실행된 asdf 역시 마찬가지로 asdf를 실행시킬 것입니다.
이런 식으로 무한하게 asdf가 호출되면서 결국 끝나지 않는 함수가 될 것입니다
다행히도 마크엔 1틱 안의 실행 횟수 제한이 있기에 영원히 안 끝나진 않습니다
다시 주제로 돌아와 반복문 이야기를 해봅시다
위에서 언급한 while문을 데이터팩으로 구현하면 아래와 같습니다
-----------------------------
#run.mcfunction
scoreboard players set i num 0
function pack:while
#while.mcfunction
개쩌는 코드
scoreboard players add i num 1
execute if score i num matches ..9 run function pack:while
-----------------------------
이제 한줄씩 설명해보자 run을 실행시키면 i를 0으로 만듭니다. while문 이전에 있는 int i = 0;과 같은 역할입니다.
이후 while함수를 살펴보면 개쩌는 코드 뒤에 i에 1을 더하고 i가 9 이하라면 다시 while을 호출합니다.
while(i < 10)에서 i < 10이 execute if인거죠. 스코어보드는 정수만 넣을 수 있기 때문에 i <= 9와 i < 10은 같은 조건이라고 봐도 무방합니다.
IRONBLOCK
2023.08.22아니아니 재귀함수는 대충 이해했는데 스코어보드 값으로 피해를 어케주는지 궁금해서요
김형원
2023.08.22damage 명령어를 사용하시면 됩니다
"개쩌는 코드" 부분에 실행자에게 데미지를 주는 명령어를 넣으면 될거에요