변환하려는 파일이 엑셀파일, 사진파일(.png) 가져와서 쓰고, 모듈화도 해놓은거라 pyinstaller같은거로 하려면 오류 나서 안되던데 어떻게 할까요
파일은 tkinter창(시작창) 실행->버튼누르면 pygame창(본 게임) 실행->life가 0이 되면 tkiner창(종료창) 실행 이런식으로 실행되고
질문만 말하자면 '모듈을 불러오고 외부파일(.png, .ico, .xlsx)들도 불러오는 .py파일을 .exe파일로 변환하는 방법이 궁금하다'
이고
시작창

본 게임 창
종료창

입력하고 나서 바뀐 창
excel_file = load_workbook("C:/Users/owner/Downloads/score_board.xlsx",data_only=True) #엑셀 파일 불러오기(나중에 수정도 함)score_board = excel_file['Sheet1'] #불러온 엑셀파일의 시트(Sheet1) line40~41
road1,road2,road3,road4 =\pg.image.load('road.png'),\pg.image.load('road2.png'),\pg.image.load('road3.png'),\pg.image.load('road4.png')# 사진파일 불러와서 변수에 저장 line53~57
모듈의 코드는 이렇고
# filename : vars.py# module version : 4.8.1~4.8.2# date : 2022-11-15(AM 12:00)#Changes'''# +appended+ 추가된 것- easter egg added -> line 102~104- codes in main >> background music added(made by Kimdoheum[this game developer with looppad])# -deleted- 삭제된 것None# others 기타- organized variables using'''import pygame as pgfrom random import randrange #차 속도 랜덤하게 바꾸려고from openpyxl import * # type: ignore #엑셀파일 불러오고 쓰고 다하는거import tkinterfrom tkinter import ttk #시작창, 종료창 만드는 거from tkinter import * # type: ignorefrom time import sleep #안씀from operator import itemgetter #스코어 표시할때 쓸 거if __name__ == '__main__': #모듈을 실행했다고 알려주는 거print('\n!This is module!\n')pg.quit()# BackGround Settingspg.display.set_caption('Adventure of Ray Debug') #제목 설정pg.display.set_icon(pg.image.load('icon.png')) #외부 파일 불러와서 아이콘으로 설정#Color: tuple = (255, 255, 255) # 하얀색(White)screen_width:int = 1080 #창 크기screen_height:int = 780 #창 크기screen = pg.display.set_mode((screen_width,screen_height))done: bool = Falseclock = pg.time.Clock()backgorund = pg.image.load('bg.png') #외부 파일 불러와서 변수에 저장backgorund = pg.transform.scale(backgorund,(screen_width,screen_height)) #background변수를 배경으로 설정score,runtime_sec,road_speed = 0, 0, 0.7 #점수, 실행시간, 도로속도excel_file = load_workbook("C:/Users/owner/Downloads/score_board.xlsx",data_only=True) #엑셀 파일 불러오기(나중에 수정도 함)score_board = excel_file['Sheet1'] #불러온 엑셀파일의 시트(Sheet1)hit:bool = False #캐릭터가 차랑 부딪혔는지 확인하기 위한 변수cur_music = '' #현재 재생중인 배경음악# Objects' Settings## Roads' ##road2_bool,road3_bool,road4_bool = False,False,False # 도로 나타나는 시간 설정(예시: road2_bool == True면 road2 나타남)road2_mov,road3_mov,road4_mov = False,False,Falseroad_x,road2_x,road3_x,road4_x = 0,0,0,0road_y,road2_y,road3_y,road4_y = -90,-90,-90,-90 ## Pos valueroad_scale:tuple = (1080,100) #도로 크기 정의road1,road2,road3,road4 =\pg.image.load('road.png'),\pg.image.load('road2.png'),\pg.image.load('road3.png'),\pg.image.load('road4.png')# 사진파일 불러와서 변수에 저장road1,road2,road3,road4 =\pg.transform.scale(road1,road_scale),\pg.transform.scale(road2,road_scale),\pg.transform.scale(road3,road_scale),\pg.transform.scale(road4,road_scale)#road1,road2등의 변수로 오브젝트 생성## Cars' ##car_blk2,car_white1,car_skul1,car_yel1,car_pup1 =\pg.image.load('car_blk2.png'),\pg.image.load('car_white1.png'),\pg.image.load('car_skul1.png'),\pg.image.load('car_yel1.png'),\pg.image.load('car_pup1.png')# 외부 파일 불러와서 변수에 저장car_blk2,car_white1,car_skul1,car_yel1,car_pup1 =\pg.transform.rotate(car_blk2, -45),\pg.transform.rotate(car_white1, 135),\pg.transform.rotate(car_skul1, 135),\pg.transform.rotate(car_yel1, -45),\pg.transform.rotate(car_pup1, 45)# 자동차 오브젝트의 방향 설정car_blk2,car_white1,car_skul1,car_yel1,car_pup1 =\pg.transform.scale(car_blk2,(105,85)),\pg.transform.scale(car_white1,(105,85)),\pg.transform.scale(car_skul1,(105,85)),\pg.transform.scale(car_yel1,(105,85)),\pg.transform.scale(car_pup1,(105,85))# 자동차 오브젝트(.png파일임)의 크기 설정car_blk2_x,car_white1_x,car_skul1_x,car_yel1_x,car_pup1_x = 0,1080,0,0,0 ### 좌표값(position value)car_blk2_rot,car_white1_rot,car_skul1_rot,car_yel1_rot,car_pup1_rot = 'R','L','L','R','L' ### 회전값(rotation value)spd = randrange(3,5)blk2_spd,white1_spd,skul1_spd,yel1_spd,pup1_spd = spd,spd,spd,spd+1,spd+1 ### Speed #자동파들의 스피드 초기값 정의# Player'splayer1 = pg.image.load('modang.png') #이미지 불러와서 변수에 저장(실제 움직이는 캐릭터임)player1 = pg.transform.scale(player1,(50,50)) #사진크기 조정mu_juck_efct1 = pg.image.load('mu_juck_efct1.png')#이미지 불러와서 변수에 저장 -> 무적 효과 표현을 위함mu_juck_efct1 = pg.transform.scale(mu_juck_efct1,(50,50))mu_juck_efct2 = pg.image.load('mu_juck_efct2.png')#이미지 불러와서 변수에 저장 -> 무적 효과 표현을 위함mu_juck_efct2 = pg.transform.scale(mu_juck_efct2,(50,50))playe1_x,player1_y = 500,640 #Pos value# EasterEggeaster1 = pg.image.load('easter.png')easter1 = pg.transform.scale(easter1,(50,50)) #이스터에그easter1_time:int = 0# Objectseffect = pg.image.load('spark.png') #충돌 이펙트effect = pg.transform.scale(effect,(40,40))lst_hit_pos = [0] #충돌위치angle = 0 #플레이어의 방향angle_lst = [0,0]p1 =\{'p1':player1,'x':playe1_x,'y':player1_y,'life':3,'music':cur_music,'ef_time':0,'ef1':mu_juck_efct1,'ef2':mu_juck_efct2,'key_time':0,'x_lim':0,'y_lim':0,'key_pressed':False,'easter1':easter1,'easter1_time':easter1_time}#플레이어 및 이스터에그 관련car =\{'blk2':car_blk2,'white1':car_white1,'skul1':car_skul1,'yel1':car_yel1,'pup1':car_pup1,'blk2_x':0,'white1_x':screen_width,'skul1_x':0,'yel1_x':0,'pup1_x':0,'blk2_rot':car_blk2_rot,'white1_rot':car_white1_rot,'skul1_rot':car_skul1_rot,'yel1_rot':car_yel1_rot,'pup1_rot':car_pup1_rot,'blk2_spd':blk2_spd,'white1_spd':white1_spd,'skul1_spd':skul1_spd,'yel1_spd':yel1_spd,'pup1_spd':pup1_spd}#자동차 관련rd =\{'road':road1,'road2':road2,'road3':road3,'road4':road4,'road_x':road_x,'road2_x':road2_x,'road3_x':road3_x,'road4_x':road4_x,'road_y':road_y,'road2_y':road2_y,'road3_y':road3_y,'road4_y':road4_y,'road2_bool':road2_bool,'road3_bool':road3_bool,'road4_bool':road4_bool,'road2_mov':road2_mov,'road3_mov':road3_mov,'road4_mov':road4_mov,'road_speed':road_speed,'road_scale':road_scale}#도로 관련#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------#''' Game Start & Over Window '''#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------##Changes'''# +appended+ 추가된 것- um,um2,txt,dev_names,story- story_btn_pressed- read_.- ranking_board# -deleted- 삭제된 것- None# others 기타-'''key = 0 #누른 키user_id = int()user_name = ''story_btn_click = Falseum = '\t ###조작방법###\nWASD를 눌러 캐릭터를 조작 하세요\\n\n\t ###게임방법###\n움직이는 차들을 피해 도로를 건너십시오 차와 부딪히면 생명이 줄어들고, 생명이 모두 소진되면 게임은 끝이 납니다.\n\n'um2 = '게임시작 후 4번째 도로가 나타날 때까지 무적효과가 적용됩니다. 노란색 이펙트로 확인할 수 있습니다.\n\n'dev_names = '\t made by: xxx, xxx'txt = um+um2+dev_names #게임 시작창에서 나오는 텍스트story = '\t###자동차 스토리###\n\흰차 : 편돌이가 영끌해서 산 중고 K5입니다. 많이 타서 그런지 느려 터졌습니다!\n\n\검은차 : 7년차 직장인 아저씨가 큰맘 먹고 산 신형 sm6입니다. 새거라 그런지 빠르네요!\n\n\빨간차 : 극한의 컨셉충이 해골을 차 보닛에다 박았어요! 폭주족 컨셉인가요?\n\n\노란차 : 람보르기니 아벤타도르입니다! 연비를 버리고 속도를 얻었죠!\n\n\보라색 차 : 보라색 맛 났어! 뭔 일이 날지 모르는 차입니다! 조심하세요!'# 스토리 버튼 누르면 나오는 텍스트read_score = list() #엑셀파일에서 점수가져와서 저장read_name = list() #엑셀파일에서 이름가져와서 저장read_id = list() #엑셀파일에서 학번가져와서 저장read_all = list() #엑셀파일에서 가져온거 다 저장read_name_plus_id = list() #엑셀파일에서 가져온 점수, 학번저장ranking_board = 0
##################
main파일의 코드는 이거
##################
# game_name : Adventure of Ray Debug(changed)# game version : 4.8.2# date : 2022-11-15(PM 04:00)#Changes'''# +appended+ 추가된 것- background music added(made by Kimdoheum[this game developer with loop pads]) -> line 22~25,616,617- 2 easter eggs added -> line 253~265# -deleted- 삭제된 것- None# 추가할 것- ranking_board에 학번 추가하기(dict() 더 써야될듯)- 스크롤바 선택 후 스크롤링 구현# others 기타- 거의 전체 print함수 주석으로 바꿈(Ctrl+F2 -> Ctrl+/ 으로 해제)'''from vars import *pg.init() # pygame 초기화# load musicbgm = pg.mixer.Sound("bgm.ogg")bgm.set_volume(0.1)nyan_cat = pg.mixer.Sound("nyan_cat(house).ogg")nyan_cat.set_volume(0.07)#### pygame 무한루프 : 게임 본체def runGame():global done,angle,angle_lst,hit,lst_hit_posglobal score_board,excel_file,score,runtime_secglobal car,rd,p1screen.blit(rd['road'], (rd['road_x'], rd['road_y']))delay = 15interval = 15pg.key.set_repeat(delay, interval)while not done:clock.tick(60)screen.fill(Color)p1['x_lim'] = screen_width - p1['x']p1['y_lim'] = screen_height - p1['y']runtime_sec += 1/60 # == secondscore = runtime_sec*10 # 10 per sec### 출돌 이벤트 ###car['blk2_y'],car['white1_y'],car['skul1_y'],car['yel1_y'],car['pup1_y'] = rd['road_y']-15,rd['road_y']+29,rd['road2_y']+29,rd['road3_y']-15,rd['road4_y']+29if rd['road_y'] >= screen_height:rd['road_y'] = -90if rd['road2_y'] >= screen_height:rd['road2_y'] = -90if rd['road3_y'] >= screen_height:rd['road3_y'] = -90if rd['road4_y'] >= screen_height:rd['road4_y'] = -90rd['road_y'] += rd['road_speed'] #도로 움직임(road moving)if score > 500: #score 500이상일때 계속 빨라짐rd['road_speed'] += road_speed*0.0005if rd['road2_mov'] == True:rd['road2_y'] += rd['road_speed']if rd['road3_mov'] == True:rd['road3_y'] += rd['road_speed']if rd['road4_mov'] == True:rd['road4_y'] += rd['road_speed']cars_moving('car_blk1')cars_moving('car_white1')cars_moving('car_skul1')cars_moving('car_yel1')cars_moving('car_pup1')p1_moving()if rd['road_y'] >= (screen_height-150)*1/4:rd['road2_bool'] = Trueif rd['road_y'] >= screen_height*2/4:rd['road3_bool'] = Trueif rd['road_y'] >= screen_height*3/4:rd['road4_bool'] = True##print('now4')##print('now3')##print('now2')else:passcar_name = ''if abs(p1['x'] - car['blk2_x']) < 30 and abs(p1['y'] - car['blk2_y']) < 30:#print('hit by car_blk')lst_hit_pos.append([car['blk2_x'],round(car['blk2_y'])]) # type: ignoredel lst_hit_pos[0]#print(lst_hit_pos)#print(lst_hit_pos[0][0],lst_hit_pos[0][1])hit = Truecar_name = 'blk1'game_over()if abs(p1['x'] - car['white1_x']) < 30 and abs(p1['y'] - car['white1_y']) < 30:#print('hit by car_white')lst_hit_pos.append([car['white1_x'],round(car['white1_y'])]) # type: ignoredel lst_hit_pos[0]#print(lst_hit_pos)hit = Truecar_name = 'white1'game_over()if abs(p1['x'] - car['skul1_x']) < 30 and abs(p1['y'] - car['skul1_y']) < 30:#print('hit by car_skull')lst_hit_pos.append([car['skul1_x'],round(car['skul1_y'])]) # type: ignoredel lst_hit_pos[0]#print(lst_hit_pos)hit = Truecar_name = 'skul1'game_over()if abs(p1['x'] - car['yel1_x']) < 30 and abs(p1['y'] - car['yel1_y']) < 30:#print('hit by car_yell')lst_hit_pos.append([car['yel1_x'],round(car['yel1_y'])]) # type: ignoredel lst_hit_pos[0]#print(lst_hit_pos)hit = Truecar_name = 'yel1'game_over()if abs(p1['x'] - car['pup1_x']) < 30 and abs(p1['y'] - car['pup1_y']) < 30:#print('hit by car_pupl')lst_hit_pos.append([car['pup1_x'],round(car['pup1_y'])]) # type: ignoredel lst_hit_pos[0]#print(lst_hit_pos)hit = Truecar_name = 'pup1'game_over()font = pg.font.Font('GodoM.ttf',30)score_box = font.render(f'점수 : {str(round(score))}', True, (255,255,255))life_box = font.render(f'생명 : {str(p1["life"])}', True, (255,255,255))screen.blit(backgorund, (0, 0))screen.blit(rd['road'], (rd['road_x'], rd['road_y']))road_func(2)road_func(3)road_func(4)screen.blit(p1['p1'], (p1['x'], p1['y']))if rd['road4_bool'] == False: ### 무적효과 ### invincible effectp1['ef_time'] += 0.1 # +6/secif p1['ef_time'] < 50:if p1['ef_time'] %3 < 0.7:screen.blit(p1['ef1'], (p1['x'], p1['y']))if 50 <= p1['ef_time'] < 80:if p1['ef_time'] %3 < 1:screen.blit(p1['ef1'], (p1['x'], p1['y']))if p1['ef_time'] >= 80 and p1['ef_time'] %3 < 1.2:screen.blit(p1['ef2'], (p1['x'], p1['y']))screen.blit(car['blk2'], (car['blk2_x'], rd['road_y']-15))screen.blit(car['white1'], (car['white1_x'], rd['road_y']+29))create_effect(car_name)screen.blit(score_box, (10,10))screen.blit(life_box, (10,50))if rd['road2_mov'] == True:screen.blit(car['skul1'], (car['skul1_x'], rd['road2_y']+29))if rd['road3_mov'] == True:screen.blit(car['yel1'], (car['yel1_x'], rd['road3_y']-15))if rd['road4_mov'] == True:screen.blit(car['pup1'], (car['pup1_x'], rd['road4_y']+29))pg.display.update() # 게임 화면 업데이트def p1_moving():global p1,rd,car,pgglobal easter1,scorespd = 1.5if score > 600:spd += spd*0.00003try:for event in pg.event.get():if event.type == pg.QUIT: # 게임 화면 종료done = Truegame_over()#print('score:',score,'t:',round(runtime_sec))if event.type == pg.KEYDOWN: #아무키나 눌렀을 때p1['key_pressed'] = Trueif event.key == pg.K_w and p1['y_lim'] <= screen_height-15: ### 더블유 ### 키p1['y'] -= spdangle_lst.append(0) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_s and p1['y_lim'] > 60: ### SSS ### 키p1['y'] += spdangle_lst.append(180) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_d and p1['x_lim'] > 60: ### DDD ### 키p1['x'] += spdangle_lst.append(270) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_a and p1['x_lim'] <= screen_width-5: ### AAA ### 키p1['x'] -= spdangle_lst.append(90) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_u and p1['y_lim'] > 30: #s키p1['y'] += 100angle_lst.append(180) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_y and p1['x_lim'] > 60: ### DDD ### 키p1['x'] += 200angle_lst.append(270) #angle이 바꼈을때만 동작하게del angle_lst[0]p1['p1'] = pg.transform.rotate(p1['p1'], angle_lst[-1] - angle_lst[-2])#print('-'*30)#print('x:',p1['x'],'| y:',p1['y'])#print(angle_lst)#print('SpinValue:',angle_lst[-1] - angle_lst[-2])#print('-'*30+'\n')if event.key == pg.K_j: #easter egg1p1['easter1_time'] += 1print(p1['easter1_time'])if 30 < p1['easter1_time'] < score/5:p1['p1'] = p1['easter1']else:p1['p1'] = player1if event.key == pg.K_f:print(round(score))if 400 < score < 800 and p1['music'] != 'nyan_cat':bgm.stop()p1['music'] = 'nyan_cat'nyan_cat.play(-1)else:p1['key_time'] += 0.1if p1['key_time'] > 10:p1['key_time'] = 0p1['key_pressed'] = False ############finally:# if p1['key_pressed'] == False:# #print('a')# p1_moving()# #print()for event in pg.event.get():if event.type == pg.KEYDOWN:#print('aaaa',end = '|')breakelse:p1_moving()def cars_moving(car_name): #rotating and moving carsglobal car## blk1 ##if car_name == 'car_blk1': #car_blk1's codeif car['blk2_rot'] == 'R':car['blk2_x'] += car['blk2_spd']if car['blk2_x'] > screen_width-90.2:car['blk2_rot'] = 'L'car['blk2'] = pg.transform.rotate(car['blk2'], 180)if car['blk2_spd'] > 25: #spd limitcar['blk2_spd'] -= randrange(3,10) #높을수록 느려짐#print('blk',car['blk2_spd'])elif car['blk2_spd'] < 3:car['blk2_spd'] += 3else:car['blk2_spd'] += randrange(-1,3)#print('blk',car['blk2_spd'])elif car['blk2_rot'] == 'L':car['blk2_x'] -= car['blk2_spd']if car['blk2_x'] <0:car['blk2_rot'] = 'R'car['blk2'] = pg.transform.rotate(car['blk2'], 180)if car['blk2_spd'] > 25: #spd limitcar['blk2_spd'] -= randrange(3,10) #높을수록 느려짐#print('blk',car['blk2_spd'])elif car['blk2_spd'] < 3:car['blk2_spd'] += 3else:car['blk2_spd'] += randrange(-1,3)#print('blk',car['blk2_spd'])## white1 ##elif car_name == 'car_white1':if car['white1_rot'] == 'R': # direction == >(오른쪽)car['white1_x'] += car['white1_spd']if car['white1_x'] > screen_width-90.2:car['white1_rot'] = 'L'car['white1'] = pg.transform.rotate(car['white1'], 180)if car['white1_spd'] > 20: #spd limitcar['white1_spd'] -= randrange(4,10) #높을수록 느려짐#print('흰',car['white1_spd'])elif car['white1_spd'] < 3:car['white1_spd'] += 3else:car['white1_spd'] += randrange(-1,3)#print('흰',car['white1_spd'])elif car['white1_rot'] == 'L':car['white1_x'] -= car['white1_spd']if car['white1_x'] <0:car['white1_rot'] = 'R'car['white1'] = pg.transform.rotate(car['white1'], 180)if car['white1_spd'] > 20: #spd limitcar['white1_spd'] -= randrange(4,10) #높을수록 느려짐#print('흰',car['white1_spd'])elif car['white1_spd'] < 3:car['white1_spd'] += 3else:car['white1_spd'] += randrange(-1,3)#print('흰',car['white1_spd'])## skul1 ##elif car_name == 'car_skul1':if car['skul1_rot'] == 'R': #direction == >car['skul1_x'] += car['skul1_spd']if car['skul1_x'] > screen_width-90.2:car['skul1_rot'] = 'L'car['skul1'] = pg.transform.rotate(car['skul1'], 180)if car['skul1_spd'] > 33: #spd limitcar['skul1_spd'] -= randrange(3,10) #높을수록 느려짐#print('skul',car['skul1_spd'])elif car['skul1_spd'] < 3:car['skul1_spd'] += 3else:car['skul1_spd'] += randrange(-1,4)#print('skul',car['skul1_spd'])elif car['skul1_rot'] == 'L':car['skul1_x'] -= car['skul1_spd']if car['skul1_x'] <0:car['skul1_rot'] = 'R'car['skul1'] = pg.transform.rotate(car['skul1'], 180)if car['skul1_spd'] > 33: #spd limitcar['skul1_spd'] -= randrange(1,10) #높을수록 느려짐#print('skul',car['skul1_spd'])elif car['skul1_spd'] < 3:car['skul1_spd'] += 3else:car['skul1_spd'] += randrange(-1,4)#print('skul',car['skul1_spd'])### yel1 ###elif car_name == 'car_yel1': #car_yel1's codeif car['yel1_rot'] == 'R':car['yel1_x'] += car['yel1_spd']if car['yel1_x'] > screen_width-90.2:car['yel1_rot'] = 'L'car['yel1'] = pg.transform.rotate(car['yel1'], 180)if car['yel1_spd'] > 20: #spd limitcar['yel1_spd'] -= randrange(3,10) #높을수록 느려짐#print('yel',car['yel1_spd'])elif car['yel1_spd'] < 3:car['yel1_spd'] += 3else:car['yel1_spd'] += randrange(-1,3)#print('yel',car['yel1_spd'])elif car['yel1_rot'] == 'L':car['yel1_x'] -= car['yel1_spd']if car['yel1_x'] <0:car['yel1_rot'] = 'R'car['yel1'] = pg.transform.rotate(car['yel1'], 180)if car['yel1_spd'] > 20: #spd limitcar['yel1_spd'] -= randrange(3,10) #높을수록 느려짐#print('yel',car['yel1_spd'])elif car['yel1_spd'] < 3:car['yel1_spd'] += 3else:car['yel1_spd'] += randrange(-1,3)#print('yel',car['yel1_spd'])### pup1 ###elif car_name == 'car_pup1': #car_pup1's codeif car['pup1_rot'] == 'R':car['pup1_x'] += car['pup1_spd']if car['pup1_x'] > screen_width-90.2:car['pup1_rot'] = 'L'car['pup1'] = pg.transform.rotate(car['pup1'], 180)if car['pup1_spd'] > 20: #spd limitcar['pup1_spd'] -= randrange(3,10) #높을수록 느려짐#print('pup',car['pup1_spd'])elif car['pup1_spd'] < 3:car['pup1_spd'] += 3else:car['pup1_spd'] += randrange(-1,3)#print('pup',car['pup1_spd'])elif car['pup1_rot'] == 'L':car['pup1_x'] -= car['pup1_spd']if car['pup1_x'] <0:car['pup1_rot'] = 'R'car['pup1'] = pg.transform.rotate(car['pup1'], 180)if car['pup1_spd'] > 20: #spd limitcar['pup1_spd'] -= randrange(3,10) #높을수록 느려짐#print('pup',car['pup1_spd'])elif car['pup1_spd'] < 3:car['pup1_spd'] += 3else:car['pup1_spd'] += randrange(-1,3)#print('pup',car['pup1_spd'])def road_func(num):global rdif num == 2:if rd['road2_bool'] == True:rd['road2_mov'] = Truereturn screen.blit(rd['road2'], (rd['road2_x'], rd['road2_y']))elif num == 3:if rd['road3_bool'] == True:rd['road3_mov'] = Truereturn screen.blit(rd['road3'], (rd['road3_x'], rd['road3_y']))elif num == 4:if rd['road4_bool'] == True:rd['road4_mov'] = Truereturn screen.blit(rd['road4'], (rd['road4_x'], rd['road4_y']))def edit_excel():global score, score_board,excel_file,user_name,user_idattempt = str(score_board['A2'].value) # type: ignorescore = round(score)#print(attempt)try_score = 'B'+attempttry_name = 'C'+attempttry_id = 'D'+attempt#write score, name and id in excel filescore_board[try_score].value = (score) # type: ignorescore_board[try_name].value = (user_name) # type: ignorescore_board[try_id].value = (user_id) # type: ignorescore_board['A2'].value += 1 # type: ignoreexcel_file.save("C:/Users/owner/Downloads/score_board.xlsx")#다른 사람 점수 보여주는 코드, 함수로 구현해도 괜찮을듯def create_effect(a):global lst_hit_pos,effect,hit,score,runtime_secglobal p1if a != '':#print('엄')effect_x = (lst_hit_pos[0][0] + p1['x'])/2 # type: ignoreeffect_y = (lst_hit_pos[0][1] + p1['y'])/2 - 10 # type: ignore#tkinter실행하는 코드# score = round(score)# edit_excel(True)# #print('score:',score,'t:',round(time_sec)) #tkinter실행시 같이 실행될 코드들hit = Falsereturn screen.blit(effect,(effect_x,effect_y))#### Game Over Window ####def minus_hp():global p1,rdglobal screen_heightp1['x'],p1['y'] = 500,640rd['road_x'],rd['road2_x'],rd['road3_x'],rd['road4_x'] = 0,0,0,0rd['road_y'],rd['road2_y'],rd['road3_y'],rd['road4_y'] = -90,-90-(screen_height*1/4),-90-(screen_height*2/4),-90-(screen_height*3/4)def game_over():global done, Tk,p1,rd,ranking_boardif rd['road4_bool'] == True:p1['life'] -= 1minus_hp()else:passif p1['life'] == 0:#if done == True:pg.quit()win_end = Tk()win_end.geometry('550x400')win_end.title('이름입력창(점수 기록용)')win_end.option_add('*Font', '맑은고딕 25')win_end.config(bg='white') # 백그라운드 색상#win_end.resizable(False, False)frame1 = tkinter.Frame(win_end,bd=2,relief="solid",width=10)frame2 = tkinter.Frame(win_end,bd=2,relief="solid",width=200)name = tkinter.Entry(frame1,width=10)instruction = tkinter.Label(frame1,font='godoM 10',text='반 번호 이름을 입력해주세요 \n ex) 10101홍길동\n 입력을 다하셨다면 ENTER키를 눌러주세요 ')scrollbar=ttk.Scrollbar(frame2)ranking_board = tkinter.Text(frame2,yscrollcommand = scrollbar.set,font='godoM 15',bd=2,borderwidth=2)scrollbar["command"]=ranking_board.yview#ranking_board.config(state='disabled')ranking_board.insert(1.0,'==========')ranking_board.insert(1.1,'이름\t점수\n')ranking_board.insert(1.2,'제발되라고')# ,expand=True,fill="both"frame1.pack(side='left',expand=True,fill="both")frame2.pack(side='right',expand=True,fill="both")scrollbar.pack(side="right", fill="y")#ranking_board.pack(fill='both',expand=True)name.pack(pady=70)instruction.pack()#label_score_board=tkinter.Label(win_end, text='', width=10, height=10, bd=0,relief="solid")#label_score_board.pack()# def scrolling(event):# passdef key_event(k):global key,user_id,user_name,score_boardglobal read_score,read_name,read_id,read_all,read_name_plus_id,ranking_board,sorted_scorekey = k.keysymif key == 'Return': #if ENTER key pressedtry:lst = ['','']for i in name.get():if 48 <= ord(str(i)) <= 57: #numberslst[0] += (str(i))elif ord(str(i)) == 32: #blankpasselse: #stringslst[1] += (i)#scrollbar.bind("<B1-Motion>",scrolling)#print(lst)#print(key)user_id = int(lst[0])user_name = lst[1]#print(user_id,user_name,type(user_id))edit_excel()for i in range(2,score_board['A2'].value): # type: ignore #2~시도횟수read_score.append(score_board['B'+str(i)]) # type: ignore #append at cell[Bi](i == 2~시도횟수)read_name.append(score_board['C'+str(i)]) # type: ignore #append at cell[Ci]read_id.append(score_board['D'+str(i)]) # type: ignore #append at cell[Di]셀 Di에 추가read_all.append([read_score[i-2].value,read_name[i-2].value,read_id[i-2].value])read_score[i-2] = str(read_score[i-2].value)+'\n'read_name[i-2] = read_name[i-2].valueread_id[i-2] = read_id[i-2].valueread_name_plus_id.append(str(read_id[i-2])+read_name[i-2])ranking_board = tkinter.Text(frame2,yscrollcommand = scrollbar.set,height = 5, width = 52,font='godoM 15',bd=2)sorted_score = list()nameNscore = dict()for i in range(len(read_all)):sorted_score.append(read_all[i][0])for i in range(len(read_all)):nameNscore.setdefault(read_all[i][1],read_all[i][0])lst_sorted = sorted(nameNscore.items(), key=itemgetter(1),reverse=True)### DEBUG #### print('='*175)# print('read_all:', read_all,'\n')# print('nameNscore:', nameNscore,'\n')# print('lst_sorted:', lst_sorted,'\n')# #print('lst_new:', lst_new)# print('='*175)# print('*'*15)# print('이름','\t','점수')ranking_board.insert('end','이름\t점수\t등수\n') # type: ignore # initial value #a = 1for i in lst_sorted: ## ranking show code ##print(i[0],'\t',i[1])ranking_board.insert('end',f'{i[0]}\t{str(i[1])}\t{a}\n') # type: ignorea += 1print('*'*15)ranking_board.config(state='disabled') # type: ignoreranking_board.pack(side='right',fill='both',expand=True) # type: ignoreexcept:#print('잘못된 입력입니다') ##DEBUG##name.delete(0,END)name.insert(END,'잘못된 입력!')win_end.bind("<KeyRelease>",key_event)win_end.mainloop()#### Game Start Window ####def start_btn_pressed():global screen_width,screen_height,screen,backgorund,p1win_start.withdraw()screen_width,screen_height = 1080,780screen = pg.display.set_mode((screen_width,screen_height))backgorund = pg.image.load('bg.png')backgorund = pg.transform.scale(backgorund,(screen_width,screen_height))p1['music'] = 'bgm'runGame()def story_btn_pressed():global instruction2,story,story_btn_click,txtinstruction2.config(state='normal') # allow editing of text##print(story) #DEBUGif story_btn_click == False:instruction2.delete('1.0',END) #del all textinstruction2.insert(END,story) #set text as storystory_btn_click = Trueelse:instruction2.delete('1.0',END) #del all textinstruction2.insert(END,txt) #reset textstory_btn_click = Falseinstruction2.config(state='disabled') # Do not allow editing of textwin_start = Tk()win_start.geometry('400x300')win_start.title('Adventure of Ray Debug')win_start.iconbitmap(r'icon.ico')win_start.option_add('*Font', 'godoM 15')win_start.config(bg='white') # 백그라운드 색상win_start.resizable(False, False)frame1 = tkinter.Frame(win_start,relief='solid',bd=2)frame2 = tkinter.Frame(win_start,relief='solid',bd=2)scrollbar = ttk.Scrollbar(frame1)instruction2 = tkinter.Text(frame1,yscrollcommand = scrollbar.set,height = 5, width = 52,font='godoM 15',bd=2)start_btn = tkinter.Button(frame2, text='게임 시작!',command = lambda:start_btn_pressed(),bg='#6390f2',fg='#f2f2f2')story_btn = tkinter.Button(frame2, text='차 스토리 보기',command = lambda:story_btn_pressed(),bg='#11BB11',fg='#FCFCFC')scrollbar["command"]=instruction2.yviewum = '\t ###조작방법###\nWASD를 눌러 캐릭터를 조작 하세요\n\n\t ###게임방법###\n움직이는 차들을 피해 도로를 건너십시오 차와 부딪히면 생명이 줄어들고, 생명이 모두 소진되면 게임은 끝이 납니다.\n\n\n\t made by: 김도흠, 황은섭'frame1.pack(side='top', fill='both', expand=True)frame2.pack(side='bottom')scrollbar.pack(side="right", fill="y")instruction2.pack(fill='both',expand=True)instruction2.insert(END,txt)instruction2.config(state='disabled')start_btn.pack(side='left')story_btn.pack(side='right')win_start.mainloop()pg.quit()