2017-02-15 2 views
-1

같은 MMO 게임이나 게임에서 무작위로 생성 된 "특전 과제"를 만들려고합니다. 다음과 같이 Python MMO 생성 및 배포

규칙

은 다음과 같습니다

  • 이 하나 개의 컨테이너에 5를 가져야 만 모두 20 점으로 배포 할 수있다
  • 포인트를 배포 할 필요가 5
  • 로 한 용기를 가질 수 있습니다

    import random 
    
    # Variables 
    cont = [0, 0, 0, 0, 0] 
    items = 20 
    maxNum = 5 
    
    # Start our first loop 
    i = 0 
    while items != 0: 
        i = 0 
        while i < len(cont) - 1: 
         num1 = random.randint(3, maxNum) 
         if items < 5: 
          if cont[i] = 00: 
           cont[i] += items 
           items = 0 
           break 
         cont[i] = num1 
         if cont[i] == 5: 
          maxNum = 4 
         i += 1 
         items = items - num1 
    
        print(items) 
    
    print(cont) 
    
    (사용하여 임의) RNG

지금까지 우리가 가진 모든이입니다

이 작업은 가끔씩 끝나지 만 다른 경우에는 루프에 걸려 작동하지 않습니다. 이 코드는 정확할 수

방법은 출력 할 때마다, 그것은 인쇄 것이라는 것이다 :

  • [5,4,4,4,3]
  • [4,4,4,4 4]
  • [5,4,3,4,4]

는 때때로 루프에 걸리면 왜 나를 해결 도와주세요! 고맙습니다!

+2

에서 기존의 시도를 수정에 집중 . 이는 무작위 진술이 때때로 오류의 원인이되는 숫자를 생성한다는 사실을 지적합니다. 생성 할 때마다 'num1'을 인쇄하여 루프가 항상 동일한 번호에서 실패하는지 확인하십시오. 직접 해결하지 못한 경우 결과를 대답으로 편집하십시오. – tburrows13

+0

그리고 루프가 "막히다"는 것은 무엇을 의미합니까? 그것은 추락합니까? 그렇다면 전체 오류 추적을 다시 게시하십시오. – tburrows13

+0

@Gloin 우리가 그 일을 끝냈다. 그리고 그것은 더 큰 숫자를 만들어 내고 더 큰 숫자를 빼고 그것을 네거티브에 들어가서 무한히 반복하도록 만든다. –

답변

1

코드가 모두 5 개 통계가 할당하지만 items는 아직도 0

예입니다 된 경우를 생성 할 수 있기 때문에이 모든 항목에서 3을 할당 유지하면 그것은 때로는 루프에 갇혀 점점 그 다음에 우리는 const = [3,3,3,3,3] 그리고 아직 items = 5으로 끝날 것입니다. const = [5,4,4,4,0]의 경우에도 난수에 4를 굴려서 items < 5이라는 사례를 잡아서 나머지 값을 마지막 통계로 덤프해도 변경된 내용은 다음 줄에서 덮어 쓰게됩니다. 어쨌든 cont[i] = num1을 사용합니다.

우선, cont[i] = num1의 할당은 else 문에 있어야합니다. 또한, 내가 이것을 읽는 방법은 모든 값이 4이거나 하나의 값이 5이고 하나의 값이 3이고 나머지는 모두 4입니다. 당신은 5를 하나만 가질 수 있다고 생각하고 있습니다. 반대로 1 개 밖에 없기 때문에 3 개가 될 수 있습니다. 그렇지 않으면 모두 20 개를 더할 수 없습니다. 따라서 maxNum처럼의 캐치를 추가하십시오. 또한 우리 논리는 이제 최종 값이 20임을 보장하므로 외부 루프가 필요하지 않습니다. items < 5 검사는 또한 최종 값으로 5를 덤프 할 수 있도록 items <= 5이어야합니다. 나는 그것을 스스로 시도했고 그것은 작동하는 것 같다.

최종 결과 :

import random 

# Variables 
cont = [0, 0, 0, 0, 0] 
items = 20 
maxNum = 5 
minNum = 3 

# Start our first loop 
i = 0 
while i < len(cont): 
    num1 = random.randint(minNum, maxNum) 
    if items <= 5: 
     cont[i] = items 
    else: 
     cont[i] = num1 
    if cont[i] == 5: 
     maxNum = 4 
    if cont[i] == 3: 
     minNum = 4 
    items -= cont[i] 
    i += 1 

print(cont) 

내가 대신 시도하고 당신을 위해 더 효율적인 답을 작성하지 않고 당신은 "때때로"작동 말할 솔루션 :

0

처음에는 하나의 컨테이너에 최대 점수를 무작위로 할당 한 다음 나중에 나머지를 채우는 것이 더 쉽습니다.

from random import randint 

def assign(num_containers, container_max, max_points): 
    containers = [0]*num_containers 
    full_container = randint(0, num_containers-1) 
    containers[full_container] = container_max 
    assigned = container_max 

    while assigned < max_points: 
     cont = randint(0, num_containers-1) 
      if cont is not full_container and containers[cont] < container_max - 1: 
       containers[cont] += 1 
       assigned += 1 

    return containers