작동은 영상에서 보시는 대로입니다.
부끄럽지만 영상에 나오지 않는 버그도 있습니다.
지금은 달리 할 말이 없네요.
지금까지 작성에 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
}
}
}
(IP보기클릭)175.196.***.***
(IP보기클릭)175.196.***.***
10년 개발자이상 되시는 50대 되시는 선생님도 중요한 코드나 자주 사용하는 코드는 티스토리에 비공개로 올리셔서 필요할 때, 꺼내서 사용하시죠. | 17.02.04 11:09 | |
(IP보기클릭)175.196.***.***
(IP보기클릭)175.196.***.***
왠만하면 1~2시에 주무세요. | 17.02.04 11:15 | |
(IP보기클릭)1.224.***.***
(IP보기클릭)113.60.***.***
세레비넷 참고했습니다. 맵에 따른 조우 레벨까지도 정리되어 있더군요... 일단 조금씩 속성을 추가할 거라 2마리 데이터만 베껴서 작성했습니다. 이미지 파일의 경우 스프라이트를 추출하는 집단이 있습니다. | 17.02.04 12:32 | |
(IP보기클릭)1.224.***.***
json도 직접 작성하신 건가요???ㅎㄷㄷ 아니면 세레비넷에서 따로 제공을 하나요?? | 17.02.04 12:39 | |
(IP보기클릭)113.60.***.***
300마리 타이핑해야죠 뭐 =ㅅ= | 17.02.04 12:41 | |