20251213
import pygame
# import pickle
# import random
# pygame.init()
#
# # 색깔
# BLACK = (0, 0, 0)
# RED = (255, 0, 0)
# GREEN = (0, 255, 0)
# BLUE = (0, 0, 255)
# WHITE = (255, 255, 255)
# YELLOW = (255, 255, 0)
# clock = pygame.time.Clock()
#
# # 화면
# screen_width = 900
# screen_height = 900
# screen = pygame.display.set_mode((screen_width, screen_height))
#
# def text_objects(text, font):
# textSurface = font.render(text, True, GREEN)
# return textSurface, textSurface.get_rect()
#
# # 구매버튼(텍스트,x좌표,y좌표,넓이,높이,전 색깔,후 색깔,행동,x,y)
# def button2(txt, x, y, w, h, ic, ac, action, l, m):
# mouse = pygame.mouse.get_pos()
# click = pygame.mouse.get_pressed()
# if x + w > mouse[0] > x and y + h > mouse[1] > y:
# pygame.draw.rect(screen, ac, (x, y, w, h))
# if click[0] == 1 and action != None:
# action(l, m)
# else:
# pygame.draw.rect(screen, ic, (x, y, w, h))
# smallText = pygame.font.SysFont("Arial", 20)
# textSurf, textRect = text_objects(txt, smallText)
# textRect.center = ((x + (w / 2)), (y + (h / 2)))
# screen.blit(textSurf, textRect)
#
# # 버튼(텍스트,x,y,넓이,높이,전 색깔,후 색깔,행동)
# def button(txt, x, y, w, h, ic, ac, action):
# mouse = pygame.mouse.get_pos()
# click = pygame.mouse.get_pressed()
# if x + w > mouse[0] > x and y + h > mouse[1] > y:
# pygame.draw.rect(screen, ac, (x, y, w, h))
# if click[0] == 1 and action != None:
# action()
# else:
# pygame.draw.rect(screen, ic, (x, y, w, h))
# smallText = pygame.font.SysFont("Arial", 20)
# textSurf, textRect = text_objects(txt, smallText)
# textRect.center = ((x + (w / 2)), (y + (h / 2)))
# screen.blit(textSurf, textRect)
#
# #세이브
# def save_game_state(savefile, file_name):
# try:
# with open(file_name, 'wb') as file:
# pickle.dump(savefile, file)
# print("Game state saved successfully!")
# except IOError as tz:
# print("Error: Unable to save game state.",tz)
#
# #불러오기
# def load_game_state(file_name):
# try:
# with open(file_name, 'rb') as file:
# game_state = pickle.load(file)
# print("Game state loaded successfully!")
# return game_state
# except (IOError, pickle.UnpicklingError):
# print("Error: Unable to load game state.")
#
# # item[x]를 y값으로 구매하기
# def item_buy(x, y):
# global item
# global money
#
# if money >= y:
# money = money - y
# item[x] = 1
#
# # item 장착
# def item_equip(x, y):
# equip[y] = x
#
# #공격
# def attack(x, y):
# global m_hp
# global fight
#
# m_hp = m_hp - (x+random.randrange(10,31))
# fight = 1
#
# #방어 선택 창
# def defense() :
# global defense_screen
#
# defense_screen=1
#
# #방어
# def defend() :
# global m_at
# global defense_screen
# global fight
# global defense_state
#
# m_at=m_at/2
# defense_state=1
# fight=1
# defense_screen = 0
#
# #회피
# def evade() :
# global defense_state
# global defense_screen
# global fight
#
# defense_state=2
# fight=1
# defense_screen=0
#
# #아이템 사용 창
# def item_use() :
# global item_screen
#
# item_screen=1
#
# #캔디 사용
# def use_candy() :
# global fight
# global item_screen
# global f_hp
# global item
#
# f_hp=f_hp+10
# item_screen=0
# fight=1
# item[1]=0
#
# def load_file(x,y) :
# global game
# global item
# global exp
# global money
# global equip
# global savefile1
# global savefile2
# global savefile3
# global load
#
# if x==1 :
# savefile1 = load_game_state('savefile1(file)')
#
# item=savefile1[0]
# exp=savefile1[1]
# money=savefile1[2]
# equip=savefile1[3]
# elif x==2:
# savefile2 = load_game_state('savefile2(file)')
#
# item = savefile2[0]
# exp = savefile2[1]
# money = savefile2[2]
# equip = savefile2[3]
# elif x==3:
# savefile3 = load_game_state('savefile3(file)')
#
# item = savefile3[0]
# exp = savefile3[1]
# money = savefile3[2]
# equip = savefile3[3]
#
# game=1
# load=1
#
# def new_start() :
# global game
# global load
#
# game=1
# load=1
#
# #변수
# m_at=0
# fight=0
# defense_screen=0
# item_screen=0
# defense_state=0
# invincible=0
# invincible_time=0
# hit=0
# game=0
# load=0
#
# # 플레이어
# exp = 0
# item = [0] * 5
# money = 10000
# equip = [99, 99]
#
# # 세이브: 저장(파일3개)
# savefile1 = [item, exp, money, equip]
# savefile2 = [item, exp, money, equip]
# savefile3 = [item, exp, money, equip]
#
# def rungame():
# global game
# global exp
# global money
# global m_hp
# global hp
# global f_hp
# global at
# global f_at
# global fight
# global invincible
# global invincible_time
# global hit
# global m_at
# global defense_screen
# global item_screen
# global defense_state
# global savefile1
# global savefile2
# global savefile3
# global load
#
# inventory = 0
#
# if load==1 :
# game=1
# else :
# game=0
#
# # 활동 위치
# player = pygame.Rect(400, 400, 100, 100)
# player_dx = 0
# player_dy = 0
#
# # 전투 위치
# fplayer = pygame.Rect(440, 440, 20, 20)
# fplayer_dx = 0
# fplayer_dy = 0
#
# bullet = pygame.Rect(random.randrange(260,621), random.randrange(260,621), 50, 50)
# bullet_dx = random.randrange(1,3)
# bullet_dy =random.randrange(1,3)
#
# # 레벨 시스템
# if 10 > exp >= 0:
# lv = 1
# elif 30 > exp >= 10:
# lv = 2
# elif 60 > exp >= 30:
# lv = 3
# elif 90 > exp >= 60:
# lv = 4
# elif exp >= 90:
# lv = 5
#
# # 체력,공격력
# hp = 15 + lv * 5
# at = lv * 5
#
# # 전투시 체력
# f_hp = hp
#
# # 몬스터 종류
# monster=random.randrange(1,4)
# if monster==1 :
# m_hp = 100
# m_at=3
# reward_money=100
# reward_exp=10
# elif monster==2 :
# m_hp=200
# m_at=4
# reward_money = 200
# reward_exp =20
# elif monster==3 :
# m_hp=300
# m_at=5
# reward_money = 300
# reward_exp =30
#
# # 세이브 불러오기
# while game==0 :
# button2('savefile1', 100, 350, 100, 50, BLUE, YELLOW, load_file, 1, 1)
# button2('savefile2', 400, 350, 100, 50, BLUE, YELLOW, load_file, 2, 1)
# if savefile3!= None :
# button2('savefile3', 700, 350, 100, 50, BLUE, YELLOW, load_file, 3, 1)
#
# button('new start', 100, 700, 100, 50, BLUE, YELLOW, new_start)
#
# # 튕김 방지?
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# pygame.quit()
# sys.exit()
#
# pygame.display.update()
#
# # 활동
# while game == 1:
# screen.fill(BLACK)
# if inventory == 0:
#
# # 9*9의 공간
# for i in range(9):
# for j in range(5):
# pygame.draw.rect(screen, WHITE, (i * 200, j * 200, 100, 100))
# pygame.draw.rect(screen, WHITE, (i * 200 + 100, j * 200 + 100, 100, 100))
# pygame.draw.rect(screen, BLACK, (i * 200 + 100, j * 200, 100, 100))
# pygame.draw.rect(screen, BLACK, (i * 200, j * 200 + 100, 100, 100))
#
# # 상점
# pygame.draw.rect(screen, BLUE, (0, 0, 100, 100))
#
# # 몬스터
# pygame.draw.rect(screen, RED, (800, 0, 100, 100))
#
# #세이브
# pygame.draw.rect(screen, YELLOW, (400, 0, 100, 100))
#
# # 플레이어 이동
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# break
# elif event.type == pygame.KEYDOWN:
# if event.key == pygame.K_LEFT:
# player_dx = -100
# elif event.key == pygame.K_RIGHT:
# player_dx = 100
# elif event.key == pygame.K_UP:
# player_dy = -100
# elif event.key == pygame.K_DOWN :
# player_dy = 100
# elif event.type == pygame.KEYUP:
# if event.key == pygame.K_LEFT:
# player_dx = 0
# elif event.key == pygame.K_RIGHT:
# player_dx = 0
# elif event.key == pygame.K_UP:
# player_dy = 0
# elif event.key == pygame.K_DOWN:
# player_dy = 0
#
# # 인벤토리 열기
# elif event.key == pygame.K_e:
# inventory = 1
#
# player.left += player_dx
# player.top += player_dy
#
# if player.left < 0:
# player.left = 0
# elif player.left > screen_width - player.width:
# player.left = screen_width - player.width
# if player.top < 0:
# player.top = 0
# elif player.top > screen_width - player.width:
# player.top = screen_width - player.width
# pygame.draw.rect(screen, GREEN, player)
#
# # 몬스터를 만나면 game=2
# if player.left == 800 and player.top == 0:
# game = 2
#
# # 상점에 들어가면 game=3
# if player.left == 0 and player.top == 0:
# game = 3
#
# #세이브 game=4
# if player.left==400 and player.top==0 :
# game=4
#
# # 인벤토리
# while inventory == 1:
# pygame.draw.rect(screen, BLACK, (50, 50, 800, 800))
#
# # 인벤토리 텍스트
# mFont = pygame.font.SysFont("Arial", 50, True, False)
# screen.blit(mFont.render(f'inventory', True, 'green'), (100, 100, 0, 0,))
# screen.blit(mFont.render(f'money: {money}', True, 'green'), (100, 700, 0, 0,))
#
# # 인벤토리 리스트
# mFont = pygame.font.SysFont("Arial", 30, True, False)
#
# # -나무검(0무기): 공격력 10증가 300원
# if equip[0] != 0 and item[0] == 1:
# screen.blit(mFont.render(f'wood sword', True, 'green'), (500, 200, 0, 0,))
# button2('equip', 700, 200, 100, 50, BLUE, YELLOW, item_equip, 0, 0)
#
# # -나무갑옷(2방어구): 데미지 2감소 300원
# if equip[1] != 2 and item[2] == 1:
# screen.blit(mFont.render(f'wood armor', True, 'green'), (100, 200, 0, 0,))
# button2('equip', 300, 200, 100, 50, BLUE, YELLOW, item_equip, 2, 1)
#
# # -나무방패(3무기): 데미지 3감소 막기 상태일시 감소하는 정도가 늘어남 300원
# if equip[0] != 3 and item[3] == 1:
# screen.blit(mFont.render(f'wood shield', True, 'green'), (500, 300, 0, 0,))
# button2('equip', 700, 300, 100, 50, BLUE, YELLOW, item_equip, 3, 0)
#
# # 마법지팡이(4무기): 공격력 20 증가 500원
# if equip[0] != 4 and item[4] == 1:
# screen.blit(mFont.render(f'magic staff', True, 'green'), (500, 400, 0, 0,))
# button2('equip', 700, 400, 100, 50, BLUE, YELLOW, item_equip, 4, 0)
# for event in pygame.event.get():
# if event.type == pygame.KEYDOWN:
# inventory = 0
# pygame.display.update()
#
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# pygame.quit()
# sys.exit()
# pygame.display.update()
#
# # 전투
# while game == 2:
# clock.tick(30)
#
# time=0
#
# screen.fill(BLACK)
#
# # 전투시 공격력
# if equip[0] == 0:
# f_at = at + 10
# elif equip[0] == 4:
# f_at = at + 20
# else:
# f_at = at
#
# # 전투시 방어력
# f_df = 0
# if equip[1] == 2:
# df = 2
# else:
# df = 0
#
# # 플레이어 체력 초과 회복 방지:
# if f_hp > hp :
# f_hp = hp
#
# #체력 표기
# mFont = pygame.font.SysFont("Arial", 30, True, False)
# screen.blit(mFont.render(f'hp:{f_hp}', True, 'green'), (100, 810, 0, 0,))
#
# # 몬스터 :
# # -체력 표기
# mFont = pygame.font.SysFont("Arial", 100, True, False)
# screen.blit(mFont.render(f'{m_hp}', True, 'green'), (350, 200, 0, 0,))
# pygame.draw.rect(screen, GREEN, (50, 400, 800, 200), 5)
#
# # 공격
# if item_screen==0 and defense_screen==0 :
# button2('attack', 50, 700, 100, 50, BLUE, YELLOW, attack, f_at, m_hp)
#
# # 아이템: 아이템 사용
# if item_screen==0 :
# button('item', 550, 700, 100, 50, BLUE, YELLOW, item_use)
# elif item_screen==1 :
# pygame.draw.rect(screen, BLACK, (0, 700, 900, 100))
# button2('attack', 50, 700, 100, 50, BLUE, YELLOW, attack, f_at, m_hp)
# if item[1]==1 :
# button('candy', 200, 470, 100, 50, BLUE, YELLOW, use_candy)
#
# #방어
# if defense_screen==0 and defense_state==0 and item_screen==0 :
# button('defense',300,700,100,50, BLUE, YELLOW, defense)
# elif defense_screen==1 and defense_state==0 :
# pygame.draw.rect(screen, BLACK, (0,700,900,100))
# button2('attack', 50, 700, 100, 50, BLUE, YELLOW, attack, f_at, m_hp)
# button('defend', 200, 470, 100, 50, BLUE, YELLOW, defend)
# button('evade', 400, 470, 100, 50, BLUE, YELLOW, evade)
#
# # 몬스터 턴
# while fight == 1:
# screen.fill(BLACK)
#
# time=time+1
#
# mFont = pygame.font.SysFont("Arial", 30, True, False)
# screen.blit(mFont.render(f'hp:{f_hp}', True, 'green'), (400, 800, 0, 0,))
#
# mFont = pygame.font.SysFont("Arial", 100, True, False)
# screen.blit(mFont.render(f'{m_hp}', True, 'green'), (400, 100, 0, 0,))
# pygame.draw.rect(screen, GREEN, (250, 250, 400, 400), 10)
#
# #플레이어 이동+무적 기믹
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# break
# elif event.type == pygame.KEYDOWN:
# if event.key == pygame.K_LEFT:
# fplayer_dx = -1
# elif event.key == pygame.K_RIGHT:
# fplayer_dx = 1
# elif event.key == pygame.K_UP:
# fplayer_dy = -1
# elif event.key == pygame.K_DOWN:
# fplayer_dy = 1
# elif event.type == pygame.KEYUP:
# if event.key == pygame.K_LEFT:
# fplayer_dx = 0
# elif event.key == pygame.K_RIGHT:
# fplayer_dx = 0
# elif event.key == pygame.K_UP:
# fplayer_dy = 0
# elif event.key == pygame.K_DOWN:
# fplayer_dy = 0
#
# fplayer.left += fplayer_dx
# fplayer.top += fplayer_dy
#
# if fplayer.left < 260:
# fplayer.left = 260
# elif fplayer.left > 620 :
# fplayer.left = 620
# if fplayer.top < 260:
# fplayer.top = 260
# elif fplayer.top > 620 :
# fplayer.top = 620
# if time>=150 and invincible==0 :
# pygame.draw.rect(screen, GREEN, fplayer)
# else :
# pygame.draw.rect(screen,BLUE, fplayer)
# invincible=1
#
# #몬스터 처치시
# if m_hp <= 0:
# # -주는 돈
# money=money+random.randrange(100,reward_money+1)
#
# # -주는 경험치
# exp = exp +reward_exp
#
# #변수 리셋
# fight=0
# defense_screen = 0
# item_screen = 0
# defense_state = 0
#
# rungame()
#
# #탄막
# if bullet.left < 260:
# bullet_dx=random.randrange(1,3)
# elif bullet.left > 590 :
# bullet_dx=-random.randrange(1,3)
# if bullet.top < 260:
# bullet_dy=random.randrange(1,3)
# elif bullet.top > 590 :
# bullet_dy=-random.randrange(1,3)
#
# bullet.left += bullet_dx
# bullet.top += bullet_dy
#
# pygame.draw.rect(screen, RED, bullet)
#
# #무적시간 해제
# if invincible_time==150 :
# invincible=0
# invincible_time=0
#
# #피격시
# if invincible==1 :
# pygame.draw.rect(screen, BLUE, fplayer)
# invincible_time=invincible_time+1
# elif invincible==0 :
# for i in range(20) :
# for j in range(20):
# if bullet.top<=fplayer.top+i<=bullet.top+50 and bullet.left<=fplayer.left+j<=bullet.left+50 :
# hit=1
# invincible = 1
#
# if hit==1 :
# if df>=m_at :
# m_at=0
# df=0
# if defense_state==2 :
# dodge_chance=random.randrange(1,11)
# if dodge_chance>4 :
# f_hp = f_hp - m_at + df
# else :
# f_hp=f_hp-m_at+df
# hit=0
# # 죽을시 게임 강제 종료
# if f_hp <= 0:
# pygame.quit()
#
# #턴 종료
# if time==1000 :
# fplayer_dx = 0
# fplayer_dy = 0
#
# fplayer.top=440
# fplayer.left=440
#
# bullet_dx = random.randrange(1,3)
# bullet_dy = random.randrange(1,3)
# bullet.top=random.randrange(260,621)
# bullet.left=random.randrange(260,621)
#
# defense_screen = 0
# item_screen =0
# fight = 0
#
# pygame.display.update()
#
# # 튕김 방지?
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# pygame.quit()
# sys.exit()
#
# pygame.display.update()
#
# # 상점
# while game == 3:
# screen.fill(BLACK)
#
# # 상점 나가기
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# break
# elif event.type == pygame.KEYUP:
# if event.key == pygame.K_e:
# rungame()
#
# # 상점 텍스트
# mFont = pygame.font.SysFont("Arial", 50, True, False)
# screen.blit(mFont.render(f'shop', True, 'green'), (80, 20, 0, 0,))
# screen.blit(mFont.render(f'press e to quit', True, 'green'), (80, 800, 0, 0,))
# screen.blit(mFont.render(f'money: {money}', True, 'green'), (100, 700, 0, 0,))
#
# # 상점 리스트:
# mFont = pygame.font.SysFont("Arial", 30, True, False)
#
# # -나무검(0무기): 공격력 10만큼 증가 300원
# if item[0] == 0:
# screen.blit(mFont.render(f'wood sword', True, 'green'), (300, 100, 0, 0,))
# screen.blit(mFont.render(f'price: 300', True, 'green'), (550, 100, 0, 0,))
# button2('buy', 700, 100, 100, 50, BLUE, YELLOW, item_buy, 0, 300)
#
# # -사탕(1아이템): 체력10회복 100원
# if item[1] == 0:
# screen.blit(mFont.render(f'candy', True, 'green'), (300, 200, 0, 0,))
# screen.blit(mFont.render(f'price: 100', True, 'green'), (550, 200, 0, 0,))
# button2('buy', 700, 200, 100, 50, BLUE, YELLOW, item_buy, 1, 100)
#
# # -나무갑옷(2방어구): 데미지 10만큼 감소 300원
# if item[2] == 0:
# screen.blit(mFont.render(f'wood armor', True, 'green'), (300, 300, 0, 0,))
# screen.blit(mFont.render(f'price: 300', True, 'green'), (550, 300, 0, 0,))
# button2('buy', 700, 300, 100, 50, BLUE, YELLOW, item_buy, 2, 300)
#
# # -나무방패(3무기): 막기 상태일시 감소하는 정도가 늘어남 300원
# if item[3] == 0:
# screen.blit(mFont.render(f'wood shield', True, 'green'), (300, 400, 0, 0,))
# screen.blit(mFont.render(f'price: 300', True, 'green'), (550, 400, 0, 0,))
# button2('buy', 700, 400, 100, 50, BLUE, YELLOW, item_buy, 3, 300)
#
# # 마법지팡이(4무기): 공격력 20만큼 증가 500원
# if item[4] == 0:
# screen.blit(mFont.render(f'magic staff', True, 'green'), (300, 500, 0, 0,))
# screen.blit(mFont.render(f'price: 500', True, 'green'), (550, 500, 0, 0,))
# button2('buy', 700, 500, 100, 50, BLUE, YELLOW, item_buy, 4, 500)
# # 공격 방식: (나무검보다 공격 방식이 어려움)
#
# pygame.display.update()
#
# #세이브
# while game==4 :
# screen.fill(BLACK)
#
# savefile1 = [item, exp, money, equip]
# savefile2 = [item, exp, money, equip]
# savefile3 = [item, exp, money, equip]
#
# button2('savefile1', 100, 350, 100, 50, BLUE, YELLOW, save_game_state, savefile1, 'savefile1(file)')
# button2('savefile2', 400, 350, 100, 50, BLUE, YELLOW, save_game_state, savefile2, 'savefile2(file)')
# button2('savefile3', 700, 350, 100, 50, BLUE, YELLOW, save_game_state, savefile3, 'savefile3(file)')
#
# button('QUIT', 700, 700, 100, 50, BLUE, YELLOW, rungame)
#
# # 튕김 방지?
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# pygame.quit()
# sys.exit()
#
# pygame.display.update()
#
# pygame.display.update()
#
# rungame()
# pygame.quit()

