파이썬 배우고 처음 만든 게임(?)

김도원·2023년 6월 7일
0

처음 구상은 여러 만화책의 캐릭터가 팀을 이뤄서 배틀하는 kof느낌의 태그배틀을 만들려고 했습니다.

csv에 캐릭터, 만화명(팀명), 전투력, 기술이펙트, 팀 이펙트 크롤링 하려 했으나 못해서 직접 입력했습니다.

게임 진행방식 (//뒤는 초기 구상입니다.)

  1. 만화명(팀명) 선택 하면 자동으로 상대(컴퓨터) 선택됨 //여러 팀을 만들려고 했으나 시간관계상 2개팀만 만듬

  2. 컴퓨터의 캐릭터 출전순서 랜덤 배분 // 여러 캐릭터중에 5명을 뽑는 방식으로 하려했으나 5명만 만들어서 고정함

  3. 캐릭터 5명만 만들어서 삭제//랜덤으로 캐릭터 선택시 전투력 총합은 어느 값을 넘으면 안된다.

  4. 5판 전부 경기 해서 승패결정 비기면 팀은 그대로 재경기 // 3선승 하려고 했으나 비기는 경우가 있어서 바꿈

  5. 배분받은 카드 나오고 캐릭터 입력하면 파워 비교해서 승패결정

  6. 매판 이길때마다 승리선수 승리 이펙트 출력

  7. 다음판 진행시 남은선수 출력

  8. 오타, 나온선수 입력하면 남은선수목록 재출력 해주면서 재입력

  9. 팀 승리시 팀 이펙트 출력, 비길경우 팀은 그대로 재경기 시작

import csv
import random

character_team_dict = {}
character_power_dict = {}
character_skill_dict = {}
team_effect_dict = {}
teams = []

with open("./data/cartoon.csv", "r", encoding="utf-8") as f:
    reader = csv.reader(f)
    next(reader)
    for row in reader:
        team = row[1]
        if team not in teams:
            teams.append(team)
        character = row[2]
        power = row[3]
        skill = row[4]
        team_effect = row[5]
        character_team_dict[character] = team
        character_power_dict[character] = power
        character_skill_dict[character] = skill
        team_effect_dict[team] = team_effect


## cartoon.csv 불러와서 필요한 딕셔너리 만들어준다.

def load_characters():
    with open("./data/cartoon.csv", "r", encoding="utf-8") as f:
        reader = csv.reader(f)
        next(reader)
        characters = []
        for row in reader:
            characters.append(row[2])
    return characters


## 캐릭터 전부 불러온다

def play_game():
    characters = load_characters()
    used_characters = []
    end_code = ("end", "close", "xxx", "ㅌㅌㅌ", "종료")

    while True:
        team = input("팀을 선택하세요! (원피스 or 드래곤볼): ")
        if team in end_code:
            print("게임종료")
            return
        if team in teams:
            computer_team = "드래곤볼" if team == "원피스" else "원피스"
            print("대결을 시작합니다.!")
            break
        else:
            print("없는 팀입니다.")

    win_count = 0
    loss_count = 0
    tie_count = 0

    print("나의 팀 선수입니다.:", [c for c in characters if character_team_dict[c] == team])

    while len(characters) > 0:
        character = input("선수를 선택하세요!: ")
        if character in end_code:
            print("게임종료")
            return
        if character in used_characters:
            print("이미 출전한 선수입니다. 다른 선수를 선택하세요!")
            continue

        if character not in characters:
            print("없는 선수입니다. 나의 선수 중에 선택하세요.")
            print("나의 팀 선수 입니다.:", [c for c in characters if character_team_dict[c] == team])
            continue

        used_characters.append(character)
        characters.remove(character)

        computer_characters = [c for c in characters if character_team_dict[c] == computer_team]
        computer_character = random.choice(computer_characters)
        characters.remove(computer_character)

        player_power = int(character_power_dict[character])
        computer_power = int(character_power_dict[computer_character])

        print("You:", character, "Power:", player_power)
        print("Computer:", computer_character, "Power:", computer_power)

        if player_power > computer_power:
            print("축하합니다! You win!")
            win_count += 1
            print("승리 선수의 Skill:", character_skill_dict[character])
        elif player_power < computer_power:
            print("아쉽게 패배했습니다.")
            loss_count += 1
            print("승리 선수의 Skill:", character_skill_dict[computer_character])
        else:
            print("비겼습니다.")
            tie_count += 1

        print("승 - 패 :", win_count, "-", loss_count)
        print("나의 팀 선수 입니다.:", [c for c in characters if character_team_dict[c] == team])
        print("------------------------")

    print("게임이 끝났습니다! 모든 선수가 출전했습니다.")

    if win_count > loss_count:
        winning_team = team
    elif win_count < loss_count:
        winning_team = computer_team

    if win_count != loss_count:
        print("최종 {}팀이 승리했습니다!: {}".format(winning_team, team_effect_dict[winning_team]))  # 최종 승리 팀과 승리 이펙트 출력
    else:
        print("최종 비겼습니다. 재경기를 시작합니다!")  # 최종 비김 메시지 출력
        play_game(team)  # 재경기 시작


while True:
    play_game()
    play_again = input("게임을 다시 시작하시겠습니까? (yes/no): ")
    if play_again.lower() != "yes":
        break
profile
그냥 사는 사람

0개의 댓글