DICERS - 2 Rank, Rank_cal
게임 결과 랭킹 계산, 저장
Rank_cal
import operator
def r_sort():
with open('ranks/rich.txt', 'r', encoding='utf-8') as f:
r_list = f.readline()[:-1].split(",")
if len(r_list) > 22:
del r_list[23:]
r_dict = {}
for i in range(0, len(r_list), 2):
if not r_list[i] in r_dict:
r_dict[r_list[i]] = int(r_list[i+1])
if r_list[i] in r_dict:
if int(r_dict[r_list[i]]) >= int(r_list[i+1]):
pass
elif int(r_dict[r_list[i]]) < int(r_list[i+1]):
r_dict[r_list[i]] = int(r_list[i+1])
sorted_r = sorted(r_dict.items(), reverse= True, key= operator.itemgetter(1))
with open('ranks/rich.txt', 'w', encoding='utf-8') as f2:
for i in sorted_r:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_r[0][0], sorted_r[0][1], sorted_r[1][0], sorted_r[1][1], sorted_r[2][0], sorted_r[2][1]
def l_sort():
with open('ranks/long.txt', 'r', encoding='utf-8') as f:
l_list = f.readline()[:-1].split(",")
if len(l_list) > 22:
del l_list[23:]
l_dict = {}
for i in range(0, len(l_list), 2):
if not l_list[i] in l_dict:
l_dict[l_list[i]] = int(l_list[i + 1])
if l_list[i] in l_dict:
if int(l_dict[l_list[i]]) >= int(l_list[i + 1]):
pass
elif int(l_dict[l_list[i]]) < int(l_list[i + 1]):
l_dict[l_list[i]] = int(l_list[i + 1])
sorted_l = sorted(l_dict.items(), reverse=True, key=operator.itemgetter(1))
with open('ranks/long.txt', 'w', encoding='utf-8') as f2:
for i in sorted_l:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_l[0][0], sorted_l[0][1], sorted_l[1][0], sorted_l[1][1], sorted_l[2][0], sorted_l[2][1]
def c_sort():
with open('ranks/clever.txt', 'r', encoding='utf-8') as f:
c_list = f.readline()[:-1].split(",")
if len(c_list) > 22:
del c_list[23:]
c_dict = {}
for i in range(0, len(c_list), 2):
if not c_list[i] in c_dict:
c_dict[c_list[i]] = float(c_list[i+1])
if c_list[i] in c_dict:
if float(c_dict[c_list[i]]) >= float(c_list[i+1]):
pass
elif float(c_dict[c_list[i]]) < float(c_list[i + 1]):
c_dict[c_list[i]] = float(c_list[i + 1])
sorted_c = sorted(c_dict.items(), reverse = True, key = operator.itemgetter(1))
with open('ranks/clever.txt', 'w', encoding='utf-8') as f2:
for i in sorted_c:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_c[0][0], sorted_c[0][1], sorted_c[1][0], sorted_c[1][1], sorted_c[2][0], sorted_c[2][1]
try:
r_sort()
l_sort()
c_sort()
except IndexError:
pass
import operator
def r_sort():
with open('ranks/rich.txt', 'r', encoding='utf-8') as f:
r_list = f.readline()[:-1].split(",")
if len(r_list) > 22:
del r_list[23:]
r_dict = {}
for i in range(0, len(r_list), 2):
if not r_list[i] in r_dict:
r_dict[r_list[i]] = int(r_list[i+1])
if r_list[i] in r_dict:
if int(r_dict[r_list[i]]) >= int(r_list[i+1]):
pass
elif int(r_dict[r_list[i]]) < int(r_list[i+1]):
r_dict[r_list[i]] = int(r_list[i+1])
sorted_r = sorted(r_dict.items(), reverse= True, key= operator.itemgetter(1))
with open('ranks/rich.txt', 'w', encoding='utf-8') as f2:
for i in sorted_r:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_r[0][0], sorted_r[0][1], sorted_r[1][0], sorted_r[1][1], sorted_r[2][0], sorted_r[2][1]
def l_sort():
with open('ranks/long.txt', 'r', encoding='utf-8') as f:
l_list = f.readline()[:-1].split(",")
if len(l_list) > 22:
del l_list[23:]
l_dict = {}
for i in range(0, len(l_list), 2):
if not l_list[i] in l_dict:
l_dict[l_list[i]] = int(l_list[i + 1])
if l_list[i] in l_dict:
if int(l_dict[l_list[i]]) >= int(l_list[i + 1]):
pass
elif int(l_dict[l_list[i]]) < int(l_list[i + 1]):
l_dict[l_list[i]] = int(l_list[i + 1])
sorted_l = sorted(l_dict.items(), reverse=True, key=operator.itemgetter(1))
with open('ranks/long.txt', 'w', encoding='utf-8') as f2:
for i in sorted_l:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_l[0][0], sorted_l[0][1], sorted_l[1][0], sorted_l[1][1], sorted_l[2][0], sorted_l[2][1]
def c_sort():
with open('ranks/clever.txt', 'r', encoding='utf-8') as f:
c_list = f.readline()[:-1].split(",")
if len(c_list) > 22:
del c_list[23:]
c_dict = {}
for i in range(0, len(c_list), 2):
if not c_list[i] in c_dict:
c_dict[c_list[i]] = float(c_list[i+1])
if c_list[i] in c_dict:
if float(c_dict[c_list[i]]) >= float(c_list[i+1]):
pass
elif float(c_dict[c_list[i]]) < float(c_list[i + 1]):
c_dict[c_list[i]] = float(c_list[i + 1])
sorted_c = sorted(c_dict.items(), reverse = True, key = operator.itemgetter(1))
with open('ranks/clever.txt', 'w', encoding='utf-8') as f2:
for i in sorted_c:
for j in range(2):
f2.write(str(i[j]))
f2.write(',')
return sorted_c[0][0], sorted_c[0][1], sorted_c[1][0], sorted_c[1][1], sorted_c[2][0], sorted_c[2][1]
try:
r_sort()
l_sort()
c_sort()
except IndexError:
pass
위의 코드는 게임 결과를 기록할 때
rich, long, clever 수치(최종 포인트, 게임 횟수, 회당 취득 포인트)를
기준으로 txt 파일에 저장하는 코드다.
고려했던 점들은 다음과 같다.
- 같은 사용자의 기록 중 상위 기록이 있으면 확인하고 기존 기록을 갱신할 것
- 텍스트 파일을 저장해서 다음 게임이 구동될 때에도 기록을 유지할 것
등등을 구현하였지만 좋은 코드라고 생각하지 않는다.
부단히 비효율적이고, 객체에 대한 고민보다 구동에 초점을 맞춰 서둘러 만들어낸 코드라서
만약 지금 리팩토링을 한다면
- 유사한 구조를 가진 3개의 함수를 하나의 모듈로 묶을 것
- 2차원 리스트보다 더 괜찮은 리턴값으로 가독성을 높일 것
- encrypt하여 파일값에 대한 수정을 막을 것
을 우선 고려할 것 같다.
Rank
import pygame
import DICERS_rankcal
from pygame.locals import *
def rank():
pygame.init()
SURFACE = pygame.display.set_mode((800, 600), 0, 32)
pygame.display.set_caption('D I C E R S')
BLACK = (0, 0, 0)
GRAY = (180, 180, 180)
WHITE = (255, 255, 255)
RED = (200, 0, 0)
PALEBLUE = (120, 120, 240)
GOLD = (150, 130, 35)
SILVER = (162, 162, 162)
DICERSFONT = 'material//NEXONFootballGothicL.ttf'
MAINFONT = pygame.font.Font(DICERSFONT, 25)
MIDDLEFONT = pygame.font.Font(DICERSFONT, 50)
BOX_RICH = (30, 30, 226, 510)
BOX_RICH_2 = (40, 40, 206, 50)
BOX_RICH_TITLE = MIDDLEFONT.render('RICH', True, BLACK)
BOX_RICH_TITLE_RECT = BOX_RICH_TITLE.get_rect(center = [140, 68])
BOX_RICH_TEXT = MAINFONT.render('포인트 순', True, BLACK)
BOX_RICH_TEXT_RECT = BOX_RICH_TEXT.get_rect(center = [140, 110])
BOX_RICH_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_RICH_1ST_RECT = BOX_RICH_1ST.get_rect(center = [140, 160])
BOX_RICH_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[0]), True, BLACK)
BOX_RICH_1ST_NAME_RECT = BOX_RICH_1ST_NAME.get_rect(center = [140, 210])
BOX_RICH_1ST_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[1]) + ' $'), True, BLACK)
BOX_RICH_1ST_VALUE_RECT = BOX_RICH_1ST_VALUE.get_rect(center = [140, 240])
BOX_RICH_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_RICH_2ND_RECT = BOX_RICH_2ND.get_rect(center = [140, 300])
BOX_RICH_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[2]), True, BLACK)
BOX_RICH_2ND_NAME_RECT = BOX_RICH_2ND_NAME.get_rect(center = [140, 350])
BOX_RICH_2ND_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[3]) + ' $'), True, BLACK)
BOX_RICH_2ND_VALUE_RECT = BOX_RICH_2ND_VALUE.get_rect(center = [140, 380])
BOX_RICH_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_RICH_3RD_RECT = BOX_RICH_3RD.get_rect(center = [140, 440])
BOX_RICH_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[4]), True, BLACK)
BOX_RICH_3RD_NAME_RECT = BOX_RICH_3RD_NAME.get_rect(center = [140, 490])
BOX_RICH_3RD_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[5]) + ' $'), True, BLACK)
BOX_RICH_3RD_VALUE_RECT = BOX_RICH_3RD_VALUE.get_rect(center = [140, 520])
#
BOX_CLEV = (286, 30, 226, 510)
BOX_CLEV_2 = (296, 40, 206, 50)
BOX_CLEV_TITLE = MIDDLEFONT.render('CLEVER', True, BLACK)
BOX_CLEV_TITLE_RECT = BOX_CLEV_TITLE.get_rect(center = [396, 68])
BOX_CLEV_TEXT = MAINFONT.render('포인트 / 라운드 순', True, BLACK)
BOX_CLEV_TEXT_RECT = BOX_CLEV_TEXT.get_rect(center = [396, 110])
BOX_CLEV_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_CLEV_1ST_RECT = BOX_CLEV_1ST.get_rect(center=[396, 160])
BOX_CLEV_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[0]), True, BLACK)
BOX_CLEV_1ST_NAME_RECT = BOX_CLEV_1ST_NAME.get_rect(center=[396, 210])
BOX_CLEV_1ST_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[1]))), True, BLACK)
BOX_CLEV_1ST_VALUE_RECT = BOX_CLEV_1ST_VALUE.get_rect(center=[396, 240])
BOX_CLEV_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_CLEV_2ND_RECT = BOX_CLEV_2ND.get_rect(center=[396, 300])
BOX_CLEV_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[2]), True, BLACK)
BOX_CLEV_2ND_NAME_RECT = BOX_CLEV_2ND_NAME.get_rect(center=[396, 350])
BOX_CLEV_2ND_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[3]))), True, BLACK)
BOX_CLEV_2ND_VALUE_RECT = BOX_CLEV_2ND_VALUE.get_rect(center=[396, 380])
BOX_CLEV_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_CLEV_3RD_RECT = BOX_CLEV_3RD.get_rect(center=[396, 440])
BOX_CLEV_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[4]), True, BLACK)
BOX_CLEV_3RD_NAME_RECT = BOX_CLEV_3RD_NAME.get_rect(center=[396, 490])
BOX_CLEV_3RD_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[5]))), True, BLACK)
BOX_CLEV_3RD_VALUE_RECT = BOX_CLEV_3RD_VALUE.get_rect(center=[396, 520])
#
BOX_LONG = (542, 30, 226, 510)
BOX_LONG_2 = (552, 40, 206, 50)
BOX_LONG_TITLE = MIDDLEFONT.render('LONG', True, BLACK)
BOX_LONG_TITLE_RECT = BOX_LONG_TITLE.get_rect(center = [652, 68])
BOX_LONG_TEXT = MAINFONT.render('라운드 순', True, BLACK)
BOX_LONG_TEXT_RECT = BOX_LONG_TEXT.get_rect(center = [652, 110])
BOX_LONG_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_LONG_1ST_RECT = BOX_LONG_1ST.get_rect(center=[652, 160])
BOX_LONG_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[0]), True, BLACK)
BOX_LONG_1ST_NAME_RECT = BOX_LONG_1ST_NAME.get_rect(center=[652, 210])
BOX_LONG_1ST_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[1])), True, BLACK)
BOX_LONG_1ST_VALUE_RECT = BOX_LONG_1ST_VALUE.get_rect(center=[652, 240])
BOX_LONG_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_LONG_2ND_RECT = BOX_LONG_2ND.get_rect(center=[652, 300])
BOX_LONG_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[2]), True, BLACK)
BOX_LONG_2ND_NAME_RECT = BOX_LONG_2ND_NAME.get_rect(center=[652, 350])
BOX_LONG_2ND_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[3])), True, BLACK)
BOX_LONG_2ND_VALUE_RECT = BOX_LONG_2ND_VALUE.get_rect(center=[652, 380])
BOX_LONG_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_LONG_3RD_RECT = BOX_LONG_3RD.get_rect(center=[652, 440])
BOX_LONG_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[4]), True, BLACK)
BOX_LONG_3RD_NAME_RECT = BOX_LONG_3RD_NAME.get_rect(center=[652, 490])
BOX_LONG_3RD_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[5])), True, BLACK)
BOX_LONG_3RD_VALUE_RECT = BOX_LONG_3RD_VALUE.get_rect(center=[652, 520])
DICERSFONT = 'material//NEXONFootballGothicL.ttf'
MAINFONT = pygame.font.Font(DICERSFONT, 25)
# 메인 루프
while True:
SURFACE.fill(WHITE)
# RICH SECTION
RST_SURFACE = MAINFONT.render('rank reset', True, GRAY)
RST_RECT = RST_SURFACE.get_rect(center=[143, 565])
PLAY_SURFACE = MAINFONT.render('play game', True, GRAY)
PLAY_RECT = PLAY_SURFACE.get_rect(center=[399, 565])
BTM_SURFACE = MAINFONT.render('back to menu', True, GRAY)
BTM_RECT = BTM_SURFACE.get_rect(center=[655, 565])
#
pygame.draw.rect(SURFACE, BLACK, BOX_RICH, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_RICH_2, 3)
SURFACE.blit(BOX_RICH_TITLE, BOX_RICH_TITLE_RECT)
SURFACE.blit(BOX_RICH_TEXT, BOX_RICH_TEXT_RECT)
SURFACE.blit(BOX_RICH_1ST, BOX_RICH_1ST_RECT)
SURFACE.blit(BOX_RICH_1ST_NAME, BOX_RICH_1ST_NAME_RECT)
SURFACE.blit(BOX_RICH_1ST_VALUE, BOX_RICH_1ST_VALUE_RECT)
SURFACE.blit(BOX_RICH_2ND, BOX_RICH_2ND_RECT)
SURFACE.blit(BOX_RICH_2ND_NAME, BOX_RICH_2ND_NAME_RECT)
SURFACE.blit(BOX_RICH_2ND_VALUE, BOX_RICH_2ND_VALUE_RECT)
SURFACE.blit(BOX_RICH_3RD, BOX_RICH_3RD_RECT)
SURFACE.blit(BOX_RICH_3RD_NAME, BOX_RICH_3RD_NAME_RECT)
SURFACE.blit(BOX_RICH_3RD_VALUE, BOX_RICH_3RD_VALUE_RECT)
pygame.draw.rect(SURFACE, BLACK, BOX_CLEV, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_CLEV_2, 3)
SURFACE.blit(BOX_CLEV_TITLE, BOX_CLEV_TITLE_RECT)
SURFACE.blit(BOX_CLEV_TEXT, BOX_CLEV_TEXT_RECT)
SURFACE.blit(BOX_CLEV_1ST, BOX_CLEV_1ST_RECT)
SURFACE.blit(BOX_CLEV_1ST_NAME, BOX_CLEV_1ST_NAME_RECT)
SURFACE.blit(BOX_CLEV_1ST_VALUE, BOX_CLEV_1ST_VALUE_RECT)
SURFACE.blit(BOX_CLEV_2ND, BOX_CLEV_2ND_RECT)
SURFACE.blit(BOX_CLEV_2ND_NAME, BOX_CLEV_2ND_NAME_RECT)
SURFACE.blit(BOX_CLEV_2ND_VALUE, BOX_CLEV_2ND_VALUE_RECT)
SURFACE.blit(BOX_CLEV_3RD, BOX_CLEV_3RD_RECT)
SURFACE.blit(BOX_CLEV_3RD_NAME, BOX_CLEV_3RD_NAME_RECT)
SURFACE.blit(BOX_CLEV_3RD_VALUE, BOX_CLEV_3RD_VALUE_RECT)
pygame.draw.rect(SURFACE, BLACK, BOX_LONG, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_LONG_2, 3)
SURFACE.blit(BOX_LONG_TITLE, BOX_LONG_TITLE_RECT)
SURFACE.blit(BOX_LONG_TEXT, BOX_LONG_TEXT_RECT)
SURFACE.blit(BOX_LONG_1ST, BOX_LONG_1ST_RECT)
SURFACE.blit(BOX_LONG_1ST_NAME, BOX_LONG_1ST_NAME_RECT)
SURFACE.blit(BOX_LONG_1ST_VALUE, BOX_LONG_1ST_VALUE_RECT)
SURFACE.blit(BOX_LONG_2ND, BOX_LONG_2ND_RECT)
SURFACE.blit(BOX_LONG_2ND_NAME, BOX_LONG_2ND_NAME_RECT)
SURFACE.blit(BOX_LONG_2ND_VALUE, BOX_LONG_2ND_VALUE_RECT)
SURFACE.blit(BOX_LONG_3RD, BOX_LONG_3RD_RECT)
SURFACE.blit(BOX_LONG_3RD_NAME, BOX_LONG_3RD_NAME_RECT)
SURFACE.blit(BOX_LONG_3RD_VALUE, BOX_LONG_3RD_VALUE_RECT)
SURFACE.blit(BTM_SURFACE, BTM_RECT)
SURFACE.blit(RST_SURFACE, RST_RECT)
SURFACE.blit(PLAY_SURFACE, PLAY_RECT)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if RST_RECT.collidepoint(event.pos):
with open('ranks/rich.txt', 'w', encoding='utf-8') as rsr:
rsr.write('default1,1,default2,1,default3,1,')
with open('ranks/clever.txt', 'w', encoding='utf-8') as rsc:
rsc.write('default1,1,default2,1,default3,1,')
with open('ranks/long.txt', 'w', encoding='utf-8') as rsl:
rsl.write('default1,1,default2,1,default3,1,')
rank()
if PLAY_RECT.collidepoint(event.pos):
import DICERS_game
DICERS_game.game()
if BTM_RECT.collidepoint(event.pos):
import DICERS_main
DICERS_main.main()
if event.type == pygame.MOUSEMOTION:
if RST_RECT.collidepoint(event.pos):
RST_SURFACE = MAINFONT.render('$ rank reset $', True, RED)
RST_RECT = RST_SURFACE.get_rect(center=[143, 565])
SURFACE.blit(RST_SURFACE, RST_RECT)
if PLAY_RECT.collidepoint(event.pos):
PLAY_SURFACE = MAINFONT.render('$ play game $', True, RED)
PLAY_RECT = PLAY_SURFACE.get_rect(center=[399, 565])
SURFACE.blit(PLAY_SURFACE, PLAY_RECT)
if BTM_RECT.collidepoint(event.pos):
BTM_SURFACE = MAINFONT.render('$ back to menu $', True, RED)
BTM_RECT = BTM_SURFACE.get_rect(center=[655, 565])
SURFACE.blit(BTM_SURFACE, BTM_RECT)
pygame.display.update()
import pygame
import DICERS_rankcal
from pygame.locals import *
def rank():
pygame.init()
SURFACE = pygame.display.set_mode((800, 600), 0, 32)
pygame.display.set_caption('D I C E R S')
BLACK = (0, 0, 0)
GRAY = (180, 180, 180)
WHITE = (255, 255, 255)
RED = (200, 0, 0)
PALEBLUE = (120, 120, 240)
GOLD = (150, 130, 35)
SILVER = (162, 162, 162)
DICERSFONT = 'material//NEXONFootballGothicL.ttf'
MAINFONT = pygame.font.Font(DICERSFONT, 25)
MIDDLEFONT = pygame.font.Font(DICERSFONT, 50)
BOX_RICH = (30, 30, 226, 510)
BOX_RICH_2 = (40, 40, 206, 50)
BOX_RICH_TITLE = MIDDLEFONT.render('RICH', True, BLACK)
BOX_RICH_TITLE_RECT = BOX_RICH_TITLE.get_rect(center = [140, 68])
BOX_RICH_TEXT = MAINFONT.render('포인트 순', True, BLACK)
BOX_RICH_TEXT_RECT = BOX_RICH_TEXT.get_rect(center = [140, 110])
BOX_RICH_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_RICH_1ST_RECT = BOX_RICH_1ST.get_rect(center = [140, 160])
BOX_RICH_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[0]), True, BLACK)
BOX_RICH_1ST_NAME_RECT = BOX_RICH_1ST_NAME.get_rect(center = [140, 210])
BOX_RICH_1ST_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[1]) + ' $'), True, BLACK)
BOX_RICH_1ST_VALUE_RECT = BOX_RICH_1ST_VALUE.get_rect(center = [140, 240])
BOX_RICH_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_RICH_2ND_RECT = BOX_RICH_2ND.get_rect(center = [140, 300])
BOX_RICH_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[2]), True, BLACK)
BOX_RICH_2ND_NAME_RECT = BOX_RICH_2ND_NAME.get_rect(center = [140, 350])
BOX_RICH_2ND_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[3]) + ' $'), True, BLACK)
BOX_RICH_2ND_VALUE_RECT = BOX_RICH_2ND_VALUE.get_rect(center = [140, 380])
BOX_RICH_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_RICH_3RD_RECT = BOX_RICH_3RD.get_rect(center = [140, 440])
BOX_RICH_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.r_sort()[4]), True, BLACK)
BOX_RICH_3RD_NAME_RECT = BOX_RICH_3RD_NAME.get_rect(center = [140, 490])
BOX_RICH_3RD_VALUE = MAINFONT.render((str(DICERS_rankcal.r_sort()[5]) + ' $'), True, BLACK)
BOX_RICH_3RD_VALUE_RECT = BOX_RICH_3RD_VALUE.get_rect(center = [140, 520])
#
BOX_CLEV = (286, 30, 226, 510)
BOX_CLEV_2 = (296, 40, 206, 50)
BOX_CLEV_TITLE = MIDDLEFONT.render('CLEVER', True, BLACK)
BOX_CLEV_TITLE_RECT = BOX_CLEV_TITLE.get_rect(center = [396, 68])
BOX_CLEV_TEXT = MAINFONT.render('포인트 / 라운드 순', True, BLACK)
BOX_CLEV_TEXT_RECT = BOX_CLEV_TEXT.get_rect(center = [396, 110])
BOX_CLEV_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_CLEV_1ST_RECT = BOX_CLEV_1ST.get_rect(center=[396, 160])
BOX_CLEV_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[0]), True, BLACK)
BOX_CLEV_1ST_NAME_RECT = BOX_CLEV_1ST_NAME.get_rect(center=[396, 210])
BOX_CLEV_1ST_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[1]))), True, BLACK)
BOX_CLEV_1ST_VALUE_RECT = BOX_CLEV_1ST_VALUE.get_rect(center=[396, 240])
BOX_CLEV_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_CLEV_2ND_RECT = BOX_CLEV_2ND.get_rect(center=[396, 300])
BOX_CLEV_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[2]), True, BLACK)
BOX_CLEV_2ND_NAME_RECT = BOX_CLEV_2ND_NAME.get_rect(center=[396, 350])
BOX_CLEV_2ND_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[3]))), True, BLACK)
BOX_CLEV_2ND_VALUE_RECT = BOX_CLEV_2ND_VALUE.get_rect(center=[396, 380])
BOX_CLEV_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_CLEV_3RD_RECT = BOX_CLEV_3RD.get_rect(center=[396, 440])
BOX_CLEV_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.c_sort()[4]), True, BLACK)
BOX_CLEV_3RD_NAME_RECT = BOX_CLEV_3RD_NAME.get_rect(center=[396, 490])
BOX_CLEV_3RD_VALUE = MAINFONT.render((str(int(DICERS_rankcal.c_sort()[5]))), True, BLACK)
BOX_CLEV_3RD_VALUE_RECT = BOX_CLEV_3RD_VALUE.get_rect(center=[396, 520])
#
BOX_LONG = (542, 30, 226, 510)
BOX_LONG_2 = (552, 40, 206, 50)
BOX_LONG_TITLE = MIDDLEFONT.render('LONG', True, BLACK)
BOX_LONG_TITLE_RECT = BOX_LONG_TITLE.get_rect(center = [652, 68])
BOX_LONG_TEXT = MAINFONT.render('라운드 순', True, BLACK)
BOX_LONG_TEXT_RECT = BOX_LONG_TEXT.get_rect(center = [652, 110])
BOX_LONG_1ST = MIDDLEFONT.render('1st', True, GOLD)
BOX_LONG_1ST_RECT = BOX_LONG_1ST.get_rect(center=[652, 160])
BOX_LONG_1ST_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[0]), True, BLACK)
BOX_LONG_1ST_NAME_RECT = BOX_LONG_1ST_NAME.get_rect(center=[652, 210])
BOX_LONG_1ST_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[1])), True, BLACK)
BOX_LONG_1ST_VALUE_RECT = BOX_LONG_1ST_VALUE.get_rect(center=[652, 240])
BOX_LONG_2ND = MIDDLEFONT.render('2nd', True, SILVER)
BOX_LONG_2ND_RECT = BOX_LONG_2ND.get_rect(center=[652, 300])
BOX_LONG_2ND_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[2]), True, BLACK)
BOX_LONG_2ND_NAME_RECT = BOX_LONG_2ND_NAME.get_rect(center=[652, 350])
BOX_LONG_2ND_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[3])), True, BLACK)
BOX_LONG_2ND_VALUE_RECT = BOX_LONG_2ND_VALUE.get_rect(center=[652, 380])
BOX_LONG_3RD = MIDDLEFONT.render('3rd', True, PALEBLUE)
BOX_LONG_3RD_RECT = BOX_LONG_3RD.get_rect(center=[652, 440])
BOX_LONG_3RD_NAME = MAINFONT.render(str(DICERS_rankcal.l_sort()[4]), True, BLACK)
BOX_LONG_3RD_NAME_RECT = BOX_LONG_3RD_NAME.get_rect(center=[652, 490])
BOX_LONG_3RD_VALUE = MAINFONT.render((str(DICERS_rankcal.l_sort()[5])), True, BLACK)
BOX_LONG_3RD_VALUE_RECT = BOX_LONG_3RD_VALUE.get_rect(center=[652, 520])
DICERSFONT = 'material//NEXONFootballGothicL.ttf'
MAINFONT = pygame.font.Font(DICERSFONT, 25)
# 메인 루프
while True:
SURFACE.fill(WHITE)
# RICH SECTION
RST_SURFACE = MAINFONT.render('rank reset', True, GRAY)
RST_RECT = RST_SURFACE.get_rect(center=[143, 565])
PLAY_SURFACE = MAINFONT.render('play game', True, GRAY)
PLAY_RECT = PLAY_SURFACE.get_rect(center=[399, 565])
BTM_SURFACE = MAINFONT.render('back to menu', True, GRAY)
BTM_RECT = BTM_SURFACE.get_rect(center=[655, 565])
#
pygame.draw.rect(SURFACE, BLACK, BOX_RICH, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_RICH_2, 3)
SURFACE.blit(BOX_RICH_TITLE, BOX_RICH_TITLE_RECT)
SURFACE.blit(BOX_RICH_TEXT, BOX_RICH_TEXT_RECT)
SURFACE.blit(BOX_RICH_1ST, BOX_RICH_1ST_RECT)
SURFACE.blit(BOX_RICH_1ST_NAME, BOX_RICH_1ST_NAME_RECT)
SURFACE.blit(BOX_RICH_1ST_VALUE, BOX_RICH_1ST_VALUE_RECT)
SURFACE.blit(BOX_RICH_2ND, BOX_RICH_2ND_RECT)
SURFACE.blit(BOX_RICH_2ND_NAME, BOX_RICH_2ND_NAME_RECT)
SURFACE.blit(BOX_RICH_2ND_VALUE, BOX_RICH_2ND_VALUE_RECT)
SURFACE.blit(BOX_RICH_3RD, BOX_RICH_3RD_RECT)
SURFACE.blit(BOX_RICH_3RD_NAME, BOX_RICH_3RD_NAME_RECT)
SURFACE.blit(BOX_RICH_3RD_VALUE, BOX_RICH_3RD_VALUE_RECT)
pygame.draw.rect(SURFACE, BLACK, BOX_CLEV, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_CLEV_2, 3)
SURFACE.blit(BOX_CLEV_TITLE, BOX_CLEV_TITLE_RECT)
SURFACE.blit(BOX_CLEV_TEXT, BOX_CLEV_TEXT_RECT)
SURFACE.blit(BOX_CLEV_1ST, BOX_CLEV_1ST_RECT)
SURFACE.blit(BOX_CLEV_1ST_NAME, BOX_CLEV_1ST_NAME_RECT)
SURFACE.blit(BOX_CLEV_1ST_VALUE, BOX_CLEV_1ST_VALUE_RECT)
SURFACE.blit(BOX_CLEV_2ND, BOX_CLEV_2ND_RECT)
SURFACE.blit(BOX_CLEV_2ND_NAME, BOX_CLEV_2ND_NAME_RECT)
SURFACE.blit(BOX_CLEV_2ND_VALUE, BOX_CLEV_2ND_VALUE_RECT)
SURFACE.blit(BOX_CLEV_3RD, BOX_CLEV_3RD_RECT)
SURFACE.blit(BOX_CLEV_3RD_NAME, BOX_CLEV_3RD_NAME_RECT)
SURFACE.blit(BOX_CLEV_3RD_VALUE, BOX_CLEV_3RD_VALUE_RECT)
pygame.draw.rect(SURFACE, BLACK, BOX_LONG, 3)
pygame.draw.rect(SURFACE, BLACK, BOX_LONG_2, 3)
SURFACE.blit(BOX_LONG_TITLE, BOX_LONG_TITLE_RECT)
SURFACE.blit(BOX_LONG_TEXT, BOX_LONG_TEXT_RECT)
SURFACE.blit(BOX_LONG_1ST, BOX_LONG_1ST_RECT)
SURFACE.blit(BOX_LONG_1ST_NAME, BOX_LONG_1ST_NAME_RECT)
SURFACE.blit(BOX_LONG_1ST_VALUE, BOX_LONG_1ST_VALUE_RECT)
SURFACE.blit(BOX_LONG_2ND, BOX_LONG_2ND_RECT)
SURFACE.blit(BOX_LONG_2ND_NAME, BOX_LONG_2ND_NAME_RECT)
SURFACE.blit(BOX_LONG_2ND_VALUE, BOX_LONG_2ND_VALUE_RECT)
SURFACE.blit(BOX_LONG_3RD, BOX_LONG_3RD_RECT)
SURFACE.blit(BOX_LONG_3RD_NAME, BOX_LONG_3RD_NAME_RECT)
SURFACE.blit(BOX_LONG_3RD_VALUE, BOX_LONG_3RD_VALUE_RECT)
SURFACE.blit(BTM_SURFACE, BTM_RECT)
SURFACE.blit(RST_SURFACE, RST_RECT)
SURFACE.blit(PLAY_SURFACE, PLAY_RECT)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
if RST_RECT.collidepoint(event.pos):
with open('ranks/rich.txt', 'w', encoding='utf-8') as rsr:
rsr.write('default1,1,default2,1,default3,1,')
with open('ranks/clever.txt', 'w', encoding='utf-8') as rsc:
rsc.write('default1,1,default2,1,default3,1,')
with open('ranks/long.txt', 'w', encoding='utf-8') as rsl:
rsl.write('default1,1,default2,1,default3,1,')
rank()
if PLAY_RECT.collidepoint(event.pos):
import DICERS_game
DICERS_game.game()
if BTM_RECT.collidepoint(event.pos):
import DICERS_main
DICERS_main.main()
if event.type == pygame.MOUSEMOTION:
if RST_RECT.collidepoint(event.pos):
RST_SURFACE = MAINFONT.render('$ rank reset $', True, RED)
RST_RECT = RST_SURFACE.get_rect(center=[143, 565])
SURFACE.blit(RST_SURFACE, RST_RECT)
if PLAY_RECT.collidepoint(event.pos):
PLAY_SURFACE = MAINFONT.render('$ play game $', True, RED)
PLAY_RECT = PLAY_SURFACE.get_rect(center=[399, 565])
SURFACE.blit(PLAY_SURFACE, PLAY_RECT)
if BTM_RECT.collidepoint(event.pos):
BTM_SURFACE = MAINFONT.render('$ back to menu $', True, RED)
BTM_RECT = BTM_SURFACE.get_rect(center=[655, 565])
SURFACE.blit(BTM_SURFACE, BTM_RECT)
pygame.display.update()
역시나 앞서 설명한대로 render, draw, blit을 통해서 display update 루프를 돌리는 모습,
자잘한 디테일이지만 랭킹을 조회하는 화면에서 reset 버튼을 누르면 기존 기록들이 초기화되도록 구현하고 싶었다.
오래 지나서 살펴 보는데, 공통적으로 문제점으로 느끼는 것은
차라리 다른 모듈에서 다른 시각 객체들(버튼, 프레임 등)을 생산하는 클래스를 만들면 어땠을까... 하는 피드백이 든다.
Author And Source
이 문제에 관하여(DICERS - 2 Rank, Rank_cal), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlarmsrms/DICERS-2Rank저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)