2013-06-04 2 views
0

어제 여기에 사용자가 작성한이 코드가 있는데 이해하는데 어려움이 있습니다. 나는 거래 기능의 9 번 줄까지 모두 이해한다. 그것은 52 자리 숫자 중에서 무작위로 카드를 만들지 만, 다음 줄에는 이것이 무엇을하는지 이해하지 못한다. 누군가이 코드가 무엇을하는지 설명해 주시면 수정하고 확장 할 수 있습니까?자바에서 모듈로 함수 이해하기

//Creates the deck 
var Ace = 1; 
var Face = 10; 
var deck = [Ace, 2, 3, 4, 5, 6, 7, 8, 9, 10, Face, Face, Face]; 
/*Creates a deal function that can deal cards to each player. 
Use object_name.property_name = deal() to call this function.*/ 
var deal = function() { 
    var randomcard = Math.ceil(Math.random() * 52) + 1; 
    return deck[Math.floor(randomcard % 13)]; 
}; 
+0

뿐만 아니라 단지'Math.floor 할 수 있음 (인 Math.random() * 13) '이 속임수 데크이기 때문이다 단 13 장의 카드로 –

답변

0

음, 처음의 코드를 수정 할 수도 Math.ceil(Math.random() * 13) + 1 대신 코드도 소송을 확대 할 필요가 그러나 경우 (52)과 같이 쓸 수 있었다. 원래 코드는 작동 결과를 제공하지만 혼동을 일으 킵니다. 자연스러운 일이 될 0에서 51 사이의 값을 선택하지 않으며, 2에서 53 사이의 값을 선택합니다. (결과는 0과 12 사이의 값을 값에 사용하는 데 여전히 유용하지만 카드의 소송을 얻는 것은 매우 정직하지 않습니다.)

var randomcard = Math.floor(Math.random() * 52); 
return deck[randomcard % 13]; 

모듈로 연산자는 부문에서 알림을 얻는다, 그래서 식의 결과는 카드의 값을 얻을 것입니다. 12까지는 숫자 자체를 반환하고 13에서는 0에서 다시 시작합니다.


카드의 수트 색인을 얻으려면 Math.floor(randomcard/13)을 사용하십시오. 원래 무작위 값 (2 ~ 53)을 사용하면 (Math.floor(randomcard/13) % 4)을 대신 사용해야합니다.

0

데크에는 52 개의 카드가 있습니다. 4 가지 슈트 (클럽/다이아몬드 ...)가있는 13 가지 값. 노트 4 * 13 = 52. 모듈 13은 데크 변수의 값 중 하나가 선택되도록 보장하기 위해 거기에만 있으며, 수트는 무시됩니다.

0

카드에는 13 개 항목의 배열 만 있습니다. 0에서 12까지입니다.

% 13 숫자를 사용하면 항상 0에서 12 사이의 값을 갖게됩니다. 그 숫자의 13을 나눈 나머지 값입니다. 52의 갑판 다음 % 13은 기본적으로 갑판을 줄입니다. 정장 + 카드에서 카드에 이르기까지.

이 동일하게 다음 가능성이

0

코드는 절반 만 유효합니다. 모듈은 갑판에서 꺼낼 카드의 유형을 잘못 선택하지만 카드는 적합하지 않습니다. 또한이 코드는 이미 특정 카드를 처리하지 않은 것을 설명하지 않으므로 여러 플레이어가 동일한 카드를 사용할 수 있습니다.

갑판 구조가 자바 스크립트에 보이는 방법에 대한 자세한 내용은이 페이지를 참조하십시오 :

http://www.brainjar.com/js/cards/default2.asp