코딩한걸음
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
반응형
profile

코딩한걸음

@Joonyeol_Yoon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!