| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준
- 가상환경
- re-id
- 정보처리기사실기
- Commpot
- WIL
- 정보처리기사
- channels
- Class
- 장고
- WHERE절
- 개발일지
- js
- poetry
- 프로그래머스
- 2주차
- 1주차
- vscode
- github
- 마스킹
- WebSocket
- 프로젝트
- 알고리즘
- 파이썬
- sql
- Git
- 미니프로젝트
- REDIS
- resnet50
- 채팅
- Today
- Total
개발일기
개인과제) 게임만들기 본문
어제 오늘, 개인과제로 게임만들기를 했다.
어제 아파서.. 과제도 많이 못하고.. TIL도 적지 못했다ㅠㅠ (몸관리 잘하자ㅠㅠ)
어제 하고 싶었던 말까지 TIL에 열심히 적도록 하자!!
개인과제는, class 상속 연습할 때 만들어둔 게임을 좀 더 발전시켜서 완성했다.
https://github.com/jisukim908/game.git
GitHub - jisukim908/game
Contribute to jisukim908/game development by creating an account on GitHub.
github.com
자세한 코드는 위에 깃허브에 들어가면 볼 수 있다.
여기서는 일부 코드만 가지고 의도한 점, 시도한 점, 느낀 점 등을 작성하도록 하겠다.
지난 번과 다른 점
- 치유스킬, 공격스킬(일반, 마법)을 추가
- 랜덤성을 준 요소들을 추가
- 비슷한 코드는 함수로 만들어서 코드 줄이기
- 스토리라인을 더 탄탄하게..
- 지난 번엔 확률게임이었지만, 지금은 전투게임의 성격을 가진다. 공격방식을 잘 선택하면 이길 수 있다.
#power를 기준으로 데미지 값이 변하도록 설정했다.
#비슷하게 heal를 기준으로 회복값도 변하도록 설정했다.
damage = random.randint(self.power-5,self.power+1)
plus = random.randint(self.heal-2,self.heal+5)
#이렇게 데미지값이 파워값에서 3을 뺀 값보다 작으면 공격 miss라는 메세지를 주도록 했다.
#일반공격의 경우, 약간의 hp회복이 있도록 했다.
#마법공격은 데미지가 강하다.
if damage < self.power-3:
print(f'{self.name}의 공격 miss!! {other.name}에게 {damage}의 데미지를 입혔습니다. {self.name}은 {heal}의 hp를 회복했습니다.')
else:
print(f'{self.name}의 공격! {other.name}에게 {damage}의 데미지를 입혔습니다. {self.name}은 {heal}의 hp를 회복했습니다.')
클래스 상속을 활용하여 악당, 플레이어들의 속성을 설정했다.
여러 번 게임을 실행해보면서.. 게임의 난이도를 조절했다.
약간은 어렵지만 플레이어가 이길 수 있도록 랜덤값(악당 hp, 플레이어 공격데미지값, 회복값 등등)을 조절했다.
#스토리라인
player = input("환영합니다. 당신의 이름은?").strip()
print(f"{player}님! 다시 한 번 환영합니다~ 이곳은 몬스터 세상! 당신의 몬스터를 고르세요.")
time.sleep(1)
print("물 속성 몬스터(1): power= 10, heal=12 / 불 속성 몬스터(2): power = 12, heal = 10")
time.sleep(1)
choice = input("당신의 선택은? 1 또는 2를 입력하세요.").strip()
나는 포켓몬몬스터라는 게임을 재밌게 했었기 때문에..
모험을 떠나는 지후처럼 ㅎㅎ 모험을 떠나는 플레이어의 설정을 가지고 스토리를 만들었다.
#전투
#자주 나오는 코드라서 함수로 만들었다.
def test(fight, a, b):
if fight == "1":
a.attack(b)
time.sleep(1)
if b.hp>0:
print(f'드래곤의 반격')
b.attack(a)
time.sleep(1)
a.status_check(b)
time.sleep(2)
elif fight == "2":
a.special_attack(b)
time.sleep(1)
if b.hp>0:
print(f'드래곤의 반격')
b.attack(a)
time.sleep(1)
a.status_check(b)
time.sleep(2)
elif fight == "3":
a.healing()
time.sleep(1)
if b.hp>0:
print(f'드래곤의 반격')
b.attack(a)
time.sleep(1)
a.status_check(b)
time.sleep(2)
else:
print("잘못 입력하셨습니다. 다시 입력하세요.")
전투장면에는 while문과 if문을 활용했으며, 전투 코드 중에서 반복되는 코드가 있어서 이렇게 함수로 만들었다.
공격방식을 선택하면 fight라는 값이 받고, a, b는 각각 플레이어와 악당을 지칭하는 요소이다.
이 과정은 alive=False가 될 때까지 반복되고, alive=False가 되면 break로 while문이 끝난다.
원래는 함수가 아니라 if문 안에 코드가 다 들어가있었는데, 그렇게 하니 코드가 너무 길어지고.. 보기 힘들어서 함수를 이용해서 코드를 정리하였다.
#물 속성 몬스터를 선택한 경우
if choice == "1":
mname = input("당신의 몬스터의 이름을 지어주세요.")
time.sleep(1)
print(f'준비는 끝났습니다. {player}님과 {mname}, 모험을 떠나세요!')
e = EvilMonster()
w = WaterMonster(mname)
print(f'앗.. 출발하자마자 드래곤을 발견!!! 드래곤이 {mname}을(를) 사냥하려고 한다!! 싸워서 당신의 몬스터를 지키세요. 드래곤 hp: {e.max_hp}')
time.sleep(2)
while(True):
print('공격스킬 1: 물총쏘기(일반+약간의 hp 회복), 2 : 용오름(마법), 3: 족욕타임(hp회복)')
fight = input(f'{player}님, 공격방식을 고르세요. (1/2/3)').strip()
time.sleep(1)
test(fight, w, e)
if w.alive == False or e.alive == False:
break
게임을 여러 번 해보면서, 되도록 플레이어가 이길 수 있는 환경을 만들어두었다.
둘 중 하나가 죽을 때까지 서로 공격과 수비를 주고받으면서 게임이 진행된다.
느낀 점
코드에 차이를 조금 준 것일뿐인데 게임의 성격이 완전히 바뀌었다니 신기하다. 지난 번에는 정말 확률게임이었는데, 지금은 플레이어의 선택에 따라 승부가 갈린다. 선택을 개똥같이 하지 않는 한, 이길 수 있도록 프로그래밍이 되었고, 그렇다고 너무 쉽게 이기진 않도록 hp, heal, damage의 값을 조절했다. 전보다 스토리라인이 좀 더 생겨서 게임같은 게임이 된 것은 같은데.. 아쉬움은 여전히 남는다ㅠㅠ
이틀이라는 시간이 주어졌지만.. 요 며칠 몸이 좋지 못해서 원래 만들어둔 게임을 조금 변형해서 제작했다는 점이 아쉽다. 클래스를 활용해서 좀 더 좋은 게임을 만들어볼 수 있을텐데.. 새로운 시도를 하지 못한 점이 걸린다. 그래도 전과 비교해서 정교화되었으니 이만하고, 몸이 좀 더 좋아지면 다시 해보는 걸로 하자.
'오늘의 공부일기 > 파이썬 공부일기' 카테고리의 다른 글
| [Windows] poetry 설치 및 clone해온 repository의 의존성 설치하기 (0) | 2023.05.23 |
|---|---|
| 객체지향프로그래밍 OOP (0) | 2023.05.04 |
| #9 파이썬 연습 (데코레이터) (0) | 2023.03.24 |
| #8 파이썬 심화 (정규표현식, 파일과 디렉토리, csv파일 다루기) (0) | 2023.03.24 |
| #8 파이썬 연습 (클래스를 활용하여 게임 만들기) (0) | 2023.03.24 |