Python 13 - pickle, Class(Feat_Starcraft)

2021. 5. 5. 16:14python

반응형

#pickle

 

#study.txt파일이 생기고 그안에 파이썬을 열심히 공부하고 있어요가 출력되어 저장된다.

import pickle
with open("study.txt", "w", encoding="utf8") as study_file:
	study_file.write("파이썬을 열심히 공부하고 있어요.")

#study.txt 파일에 내용을 terminal에 출력한다.

#간단하게 두문장으로 출력이 가능하고 close또한 해줄 필요가 없어서 코드가 간단해진다.

import pickle
with open("study.txt", "r", encoding="utf8") as study_file:
	print(study_file.read())

#클래스 class (Feat_Starcraft)

# 마린 : 공격 유닛, 군인. 총을 쓸 수 있음
name = "마린"
hp = 40
damage = 5
print("{0} 유닛이 생성되었습니다." .format(name))
print("체력{0}, 공격력 {1}\n" .format(hp, damage))


# 탱크 : 공격유닛, 탱크. 포를 쏠 수 있는데, 일반모드 / 시즈모드.
tank_name = "탱크"
tank_hp = 150
tank_damage = 35
print("{0} 유닛이 생성되었습니다." .format(tank_name))
print("체력{0}, 공격력 {1}\n" .format(tank_hp, tank_damage))

tank2_name = "탱크"
tank2_hp = 150
tank2_damage = 35
print("{0} 유닛이 생성되었습니다." .format(tank2_name))
print("체력{0}, 공격력 {1}\n" .format(tank2_hp, tank2_damage))



def attack(name, location, damage):
	print("{0} : {1} 방향으로 적군을 공격 합니다. [공격력 {2}]" .format( name, location, damage))
attack(name, "1시", damage)
attack(tank_name, "1시", tank_damage)
attack(tank2_name, "1시", tank2_damage)

# 자 이런식으로 탱크를 계속해서 뽑으려면 계속 복붙 탱크3 4 5 계속 입력해야하는데 이럴 때 필요한게
# 클래스 라는 것인데, 비유를 하면 붕어빵을 만드는 틀 과 같다고 생각하며 좋다.

# 아래는 클래스로 변경한 코드이다.

class Unit:
	def __init__(self, name, hp, damage):
		self.name = name
		self.hp = hp
		self.damage = damage
		print("{0} 유닛이 생성 되었습니다." .format(self.name))
		print("체력 {0}, 공격력{1}" .format(self.hp, self.damage))
marine1 = Unit("마린", 40, 5)
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35) # class를 활용함으로써 훨씬 간편해졌다.
#__init__ 은 python에서 쓰이는 생성자 이다.


# __init__
class Unit:
	def __init__(self, name, hp, damage):
		self.name = name
		self.hp = hp
		self.damage = damage
		print("{0} 유닛이 생성 되었습니다." .format(self.name))
		print("체력 {0}, 공격력{1}" .format(self.hp, self.damage))


# 레이스 : 공중 유닛, 비행기. 클로킹 (상대방에게 보이지 않음)
wraith1 = Unit("레이스", 80, 5)
print("유닛 이름 : {0}, 공격력 : {1}" .format(wraith1.name, wraith1.damage))


# 마인드 컨트롤 : 상대방 유닛을 내 것으로 만드는 것 (빼았음)
wraith2 = Unit("래이스", 80, 5)
wraith2.clocking = True
#clocking이라는 변수를 추가로 할당을 해서 True라는 값을 넣은것 #이런식으로 추가로 변수를 만들어서 쓸 수 있다.

if wraith2.clocking == True:
	print("{0} 는 현재 클로킹 상태입니다." .format(wraith2.name))
#이런 식으로 class 외부에서 내가 원하는 변수를 확장 할 수 있다.
#그 확장된 변수는 내가 확장한 변수에만 적용이되고 기존에 있던 다른객체에는 적용이 되지 않는다.

-------------------------출 력 결 과---------------------------

마린 유닛이 생성되었습니다.
체력40, 공격력 5

탱크 유닛이 생성되었습니다.
체력150, 공격력 35

탱크 유닛이 생성되었습니다.
체력150, 공격력 35

마린 : 1시 방향으로 적군을 공격 합니다. [공격력 5]
탱크 : 1시 방향으로 적군을 공격 합니다. [공격력 35]
탱크 : 1시 방향으로 적군을 공격 합니다. [공격력 35]
마린 유닛이 생성 되었습니다.
체력 40, 공격력5
마린 유닛이 생성 되었습니다.
체력 40, 공격력5
탱크 유닛이 생성 되었습니다.
체력 150, 공격력35
레이스 유닛이 생성 되었습니다.
체력 80, 공격력5
유닛 이름 : 레이스, 공격력 : 5
래이스 유닛이 생성 되었습니다.
체력 80, 공격력5
래이스 는 현재 클로킹 상태입니다.

반응형