728x90
반응형
Today I Learned
어떤 문제가 있었는지
오늘 python 기초 수업을 들으면서 간단하게 게임을 만들어 봤는데
공격력이나 스피드 등을 매 턴마다 랜덤하게 만들고 싶었다
다음 코드는 처음 만든 코드이다
import random
class You():
hp = 100
alive = True
dice = random.randrange(1, 3)
status = random.choice(['공격', '방어', '신속'])
if status == '공격':
attack = random.randrange(5, 10) + dice
else :
attack = random.randrange(5, 10)
if status == '방어':
shield = 1 + dice
else :
shield = 1
if status == '신속':
speed = random.randrange(1, 12) + dice
else :
speed = random.randrange(1, 12)
그런데 문제는 처음 You 클래스를 불러올때 랜덤파라메터가 한번 정해지고 바뀌지 않았다
내가 시도해 본 것들
그럼 while문이 돌때마다 처음에 You클래스를 불러오면 어떨까?
while(True):
y = You()
m = Monster()
m.damege(y.attack)
y.damege(m.attack)
if m.alive == False:
print('당신이 이겼습니다')
break
if y.alive == False:
print('당신이 졌습니다')
break
이렇게 하면 while이 돌때마다 You()안의 랜덤 파라메터들 값은 바뀌지만 y자체가 초기화가 된다
그럼 y와 m은 while 밖에서 지정해주고
class You() 안에 랜덤 파라메터들의 값을 초기화 해주는 함수를 만들면 될거 같다
어떻게 해결 했는지
# class You()에 랜덤 파라메터를 초기화해주는 함수 추가
Class You():
def update():
self.attack = random.randrange(10,20)
self.speed = random.randrange(1,10)
# 이 함수를 while문 끝부분에 넣으면 한바퀴 돌 때마다 랜덤 파라메터가 초기화된다
y = You()
m = Monster()
while(True):
m.damege(y.attack)
y.damege(m.attack)
y.update()
m.update()
if m.alive == False:
print('당신이 이겼습니다')
break
if y.alive == False:
print('당신이 졌습니다')
break
이런식으로 while밖에서 한번 선언 후 랜덤 파라메터를 따로 선언해주면 문제 해결 !
무엇을 새롭게 배웠는지
결국엔 알고리즘을 어떻게 짜느냐에 따라서 결과값이 천차만별이다
한번 코드를 짜기 전에 미리 어느정도 알고리즘을 짜놓는게 좋을것 같다
728x90
반응형