작동은 영상에서 보시는 대로입니다.
부끄럽지만 영상에 나오지 않는 버그도 있습니다.
지금은 달리 할 말이 없네요.
지금까지 작성에 13시간 정도 걸렸습니다.
필요한 모든 도감 데이터를 주고 받고, 받은 데이터에 따라 이미지와 특성의 설명 자료 등이 나오게 하는 것이 목표입니다.
소스 코드 :
# CHS
# version : alpha
#
# coded by 채(anatra95) anatra95@gmail.com
# This Program has not been released yet
import pygame, sys, os, time, json
from pygame.locals import *
PROJECTNAME = 'CHS'
VERSION = 'alpha'
FPS = 30
WINDOWWIDTH = 600
WINDOWHEIGHT = 400
FONTSIZE = 24
FONTDIST = 8
# COLOR = R G B
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
BGCOLOR = WHITE
TEXTCOLOR = BLACK
DEXDATA = {}
DEXDATA_FILE = 'data/pokedex_data.json'
def main():
global FPSCLOCK, DISPLAYSURF, BASICFONT
global IMAGESDICT, DEXDATA, DEXDATA_FILE
global DEX1ST, DEX2ND, DEX3RD
pygame.init()
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('%s ver. %s' % (PROJECTNAME, VERSION))
BASICFONT = pygame.font.SysFont(None, FONTSIZE)
IMAGESDICT = { 'dex1st': pygame.image.load('graphics/dex1st.png'),
'dex2nd': pygame.image.load('graphics/dex2nd.png'),
'dex3rd': pygame.image.load('graphics/dex3rd.png'),
'dex4th': pygame.image.load('graphics/dex4th.png'),
'dex5th': pygame.image.load('graphics/dex5th.png'),
'dex6th': pygame.image.load('graphics/dex6th.png'),
'dex7th': pygame.image.load('graphics/dex7th.png')}
DEXDATA = readDexData(DEXDATA_FILE)
while True: # main loop
DISPLAYSURF.fill(BGCOLOR)
chain = 0
firstMonster, secondMonster, myMonster = resetMonster()
checkForQuit()
drawText('debug %s %s %s' % (firstMonster, secondMonster, myMonster), BASICFONT, DISPLAYSURF, 0, 0)
# Eevee Eevee Pikachu 가 출력되면 정상이다. 첫번째 몬스터, 두번째 몬스터, 자신의 몬스터가 각각 초기화되는 과정
debugText = 'Eevee'
drawText('%s No. %s' % (debugText, getAloladexNumber(debugText),), BASICFONT, DISPLAYSURF, 0, 16)
drawSprite('Pikachu', 0, DISPLAYSURF, 0, 32)
# 이 코드는 아직 작동하지 않는다
pygame.display.update()
FPSCLOCK.tick(FPS)
def terminate():
pygame.quit()
sys.exit()
def checkForQuit():
for event in pygame.event.get(QUIT): # QUIT 이벤트를 가져온다.
terminate() # QUIT 이벤트가 발생했다면 프로그램을 종료한다.
for event in pygame.event.get(KEYUP): # 모든 KEYUP 이벤트를 가져온다.
if event.key == K_ESCAPE:
terminate() # ESC 키 KEYUP 이벤트가 발생했으면 프로그램을 종료한다.
pygame.event.post(event) # 다른 KEYUP 이벤트 객체는 다시 돌려준다.
def drawText(text, font, surface, x, y):
# 화면 상에 글자를 렌더링하여 보여준다.
textobj = font.render(text, 1, TEXTCOLOR)
textrect = textobj.get_rect()
textrect.topleft = (x, y)
surface.blit(textobj, textrect)
def drawSprite(monsterName, formChange, surface, x, y):
pass
def readDexData(filename):
f = open(filename, 'r')
js = json.loads(f.read())
f.close()
return js
def resetMonster():
# 초기화 함수
firstMonster = getMonsterNameFromDex(123)
secondMonster = getMonsterNameFromDex(123)
myMonster = getMonsterNameFromDex(25)
return [firstMonster, secondMonster, myMonster]
def getMonsterNameFromDex(aloladexNumber):
keys = list((list(DEXDATA.values())[0]).keys()) # DEXDATA에서 key 부분만을 추출한다.
valuesdict = {}
values = []
monsterName = ''
for i in range(0, len(keys)):
valuesdict = (((list((list(DEXDATA.values())[0]).values()))[i]))
values = (list(valuesdict.values())) # DEXDATA에서 값 부분만을 추출한다.
if aloladexNumber in values: # 지정한 알로라 도감 번호가 값에 포함되어 있을 때 반복문을 멈춰서 values 변수를 고정한다.
break
for i in range(0, len(keys)):
if values.count(keys[i]) == 1: # key의 목록 중, 고정된 values 변수와 겹치는 값(key의 포켓몬 명칭과 value의 포켓몬 명칭)이 있을 때
monsterName = keys[i] # 그 값을 monsterName 변수에 저장하고 반복문을 종료한다.
break
return monsterName # 그대로 반환한다.
def getAloladexNumber(monsterName):
number = DEXDATA['pokedex_data'][monsterName]['alolaDexNo.']
return number
if __name__ == '__main__':
main()
도감 데이터 (JSON) :
{
"pokedex_data": {
"Eevee": {
"pokeDexNo.": 133,
"alolaDexNo.": 123,
"formChange": 0,
"nameKo": "이브이",
"nameJp": "イ?ブイ",
"nameEn": "Eevee",
"firstType": "normal",
"secondType": "None",
"firstAbility": "run away",
"secondAbility": "adaptability",
"hiddenAbility": "anticipation",
"holdItem": "None",
"holdItemFreq": 0
},
"Pikachu": {
"pokeDexNo.": 25,
"alolaDexNo.": 25,
"formChange": 0,
"nameKo": "피카츄",
"nameJp": "ピカチュウ",
"nameEn": "Pikachu",
"firstType": "electric",
"secondType": "None",
"firstAbility": "static",
"secondAbility": "None",
"hiddenAbility": "lightningrod",
"holdItem": "Light Ball",
"holdItemFreq": 5
}
}
}
JSON 파일은 기획성이 높아서, 이런거는 티스토리에 같은데 올려 놓으시거나, 코딩은 빼시고..., 동영상만 올리시는게 좋을 거 같해요. 다음팟에서도 검색이 안되게 하고, 직접링크를 주어야 될 수 있게끔... 주석 다신거는 좋아요. 개발자들은 티스토리에 올려놓고, 비공개로 해서 많이 활용해요.
10년 개발자이상 되시는 50대 되시는 선생님도 중요한 코드나 자주 사용하는 코드는 티스토리에 비공개로 올리셔서 필요할 때, 꺼내서 사용하시죠.
그리고 낮에 일어나고 밤에 자는 습관을 지니셔야 할듯... 저처럼 1년동안 낮밤이 깨지면 건강에 안 좋아요. 10시에 일어나셨으면..., 강제로라도 3시에 자는 습관을... 저는 오늘 뱅크 정리하다 3시에 잤어요...
왠만하면 1~2시에 주무세요.
포켓몬 데이터 같은건 어디서 받아오나요? (궁금)
세레비넷 참고했습니다. 맵에 따른 조우 레벨까지도 정리되어 있더군요... 일단 조금씩 속성을 추가할 거라 2마리 데이터만 베껴서 작성했습니다. 이미지 파일의 경우 스프라이트를 추출하는 집단이 있습니다.
json도 직접 작성하신 건가요???ㅎㄷㄷ 아니면 세레비넷에서 따로 제공을 하나요??
300마리 타이핑해야죠 뭐 =ㅅ=