• [기본] 프로그래밍 좀 아시는 분?2017.01.17 AM 02:13

게시물 주소 FONT글자 작게하기 글자 키우기

슈패미판 드래곤퀘스트2를 하고 있습니다.

일본 쪽에서 공략을 찾다가 본 건데

도구점에서 거래 후의 소지금이 조건에 맞으면 복권을 받을 수 있는데

그 조건이 이렇습니다.

 

(소지금 1바이트째 + 2바이트째 + 3바이트째) and 0x0f 의 값이 1 or 3

 

...뭔 소린지 모르겠습니다.

누가 좀 설명해 주실 분 계십니까.

댓글 : 8 개
  • JOSH
  • 2017/01/17 AM 02:19
소지금의 각 자리 마다 1바이트라고 보면 예를 들어 123 G 를 가지고 있다면
1+2+3 한 다음 이걸 0X0F 라는 값과 AND 연산 했을 때 나오는 결과값이
1 이나 3 이라면 TRUE 가 되어 당첨된다는 의미 같습니다.

다만, 소지금의 1바이트째 2바이트째 기준이 뭔지는 모르겠네요.
앞에서 부터 세는건지 뒤에서 부터 세는건지....
예를 들어 16진수로 4자리 정도라면 그걸 앞에서 세는건지 뒤에서 세는건지

어딘가 다른 자료에 설명이 있을거 같기도 한데요.
  • aksiz
  • 2017/01/17 AM 02:23
소지금을 각 바이트(이진법 8자리수) 별로 나눈뒤 더해서 이진법으로 바꿨을때, 처음 4자리 수가, 0011 (10진법으로 3) 이거나, 0001(=1) 일때 라는 소리입니다.
http://www.binaryhexconverter.com/decimal-to-binary-converter
10진법에서 이진 변환은 위 링크 쓰세요.

1022라면 이진법으로 0000001111111110 가 되고, 8비트씩으로 나누면
00000011+11111110 = 1 00000001
가 되고, 처음 4자리수는 0001 이 되서, 조건이 발동한다 뭐 이런 이야기겠죠.
일단 기초부터.. 우선 컴퓨터에는 논리값이라는 게 있어요 false(거짓)와 true(참). 0은 false, 0이 아니면 (보통 1) 참 이렇게 두 개죠. and나 or은 논리값을 피연산자로 삼는 논리 연산자에요..

논리 합(or): 피연산자 둘 중 하나가 하나라도 참이면 참 (a 이거나 b이면 참)
A + B
0 + 1 = 1 (참)
1 + 0 = 1 (참)
1 + 1 = 2 (참)
0 + 0 = 0 (거짓) (A도 B도 아님)

논리 곱(and): 피연산자가 모두 1이어야 참 (a이고/이면서 b여야 참)
A * B
1 * 1 = 1 (참)
1 * 0 = 0 (거짓)
0 * 1 = 0 (거짓)
0 * 0 = 0 (거짓)
http://www.geocities.jp/gamecentergx/dq12/lottery.html

福引き券は道具屋で購入後の所持金が以下の条件になった場合にもらえる。
条件:(所持金1byte目 + 所持金2byte目 + 所持金3byte目) And 0x0F = 1 or 3

255G以下であれば購入後の所持金÷16の余りが1か3であればもらえます。
1024G以下の福引き券がもらえる購入後所持金をリストにしました。序盤の参考にしてみてください

이거 말하시는거면 그표대로 소지금 참고하시면 될거같네요.
1,2,3바이트 번째는 아마 단위 말하는거같은데....
http://dq.kyokugen.info/dq2/dq2_hukubikiken.html

SFC版での福引券の入手方法
買い物後の所持金を16・256・65536で割った結果に応じて、 (所持金 + [所持金÷256] + [所持金÷65536])を16で割った余りが1か3の時にもらえます。

[所持金÷256] とは、所持金を256で割った際の整数部分を表します。 [所持金÷65536]とは所持金を65536で割った余りですが、65536Gを超えなければ0なので無視して構いません。

이쪽이 오히려 더 이해하기 쉬울듯하네요;
소지금
소지금÷256(소숫점 이하 버림)
소지금÷65536(소숫점 이하 버림)

이 세 값의 합을 16으로 나눠서 그 나머지가 1이나 3이면 되는 것 같습니다. 위 사이트의 표에 있는 값과도 맞아떨어지네요.
감사합니다.
음. 결론만 말씀드리면 JOSH님이 말씀해주신대로, 기준을 모르기 때문에 바로 답은 낼 수 없겠네요.

음.. 우리는 10진수 123이면 1*100 + 2*10 + 3*1로 완전하게 정해져 있잖아요. 맨 뒤에 있는 게 가장 작은 것, 앞으로 갈 수록 커지면서 맨 앞에 있는 게 가장 큰 것.

근데 컴퓨터는 데이터를 저장하는 방법이 두 가지가 있어서 시스템에 따라 우리처럼 할 때도 있고 혹은 거꾸로 하는 경우가 있어요. 즉 맨 앞이 가장 작은 자리수고 맨 뒤가 가장 큰 자리수.

즉 10진수 6을 저장한다고 할 때 1*4 + 1*2 + 0*1로 110(2) 이렇게 저장할 수도 있고 011(2) 이렇게 저장할 수도 있어서.. 먼저 슈패미가 어떤 걸 쓰는지 알아내야 겠네요.
답글 달아주신 분들 모두 정말 감사합니다.
일단 설명은 아직 못 알아먹겠지만(…)
어쨌든 梅桐天土님이 달아주신 정보 덕에 게임은 쉽게 할 수 있을 것 같습니다.
친구글 비밀글 댓글 쓰기

user error : Error. B.