def main(): pygame.init() screen = pygame.display.set_mode((xRes, yRes)) pygame.display.set_caption('Roguelike') animationIndex, spriteIndex = 0, 0 clock = pygame.time.Clock() player = Entity(level) loadTextures() loadLevel(tileData, decorationData, level) while True: clock.tick(24) player.isMoving = False player.dx, player.dy = 0, 0 keys = pygame.key.get_pressed() if keys[K_ESCAPE]: return if keys[K_UP]: player.isMoving = True player.dy = -2 * gameScale if keys[K_DOWN]: player.isMoving = True player.dy = 2 * gameScale if keys[K_LEFT]: player.isFacingRight = False player.isMoving = True player.dx = -2 * gameScale if keys[K_RIGHT]: player.isFacingRight = True player.isMoving = True player.dx = 2 * gameScale if keys[K_z]: player.isCasting = True animationIndex = 0 mouse_pos = pygame.mouse.get_pos( ) # ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ## ΠΠΠ ΠΠΠΠ’ΠΠ ΠΠΠΠΠ’ΠΠ ΠΠΠΠΠΠΠ’Π£Π Π« Π ΠΠ«Π¨Π ## for event in pygame.event.get( ): # Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π² ΡΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΌΡΡΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ if event.type == MOUSEBUTTONDOWN: # Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ - Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ #mouse_pos = event.pos # ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ x,y ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈΠ³ΡΡ for cur_obj in gameObjectList: # ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ Π² ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ pos_in_mask = mouse_pos[0] - cur_obj.img_rect.x, mouse_pos[ 1] - cur_obj.img_rect.y # Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΠ°ΡΠΊΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° if cur_obj.img_rect.collidepoint( mouse_pos ) and cur_obj.img_mask.get_at( pos_in_mask ) == 1: # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΌΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ΅Π½ Π»ΠΈ ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ cur_obj_name = 'unnamed' ### ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ if 'ObjectName' in cur_obj.obj_props: ### Π΅ΡΠ»ΠΈ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΠΌΡΠΠ±ΡΠ΅ΠΊΡΠ° cur_obj_name = cur_obj.obj_props[ "ObjectName"] ### ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ Ρ ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ new_text_obj = models.TextObject( [mouse_pos[0], mouse_pos[1]], cur_obj_name, white_color, 1500 ) # Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ, ΡΠ΅ΠΊΡΡΠΎΠΌ, ΡΠ°Π²Π½ΡΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΠΌΡΡΠΊΠΎΠΉ, Π±Π΅Π»ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΡΡΠΈΡΡΠ°white_color ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ 1500 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΡΠΊΠ½Π΄ new_text_obj.time1 = time.time( ) # Π² ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° time1 Π·Π°Π½ΠΎΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°Π½ if pygame.mouse.get_pressed( )[2]: ### Π΅ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΠ ΠΠΠΠ― ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ textObjectList.append( new_text_obj ) # ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ(ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ) Π² ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ else: ### Π΅ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΠΠΠΠ― ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ, Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ cur_obj.follow_mouse = True # ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π·Π° ΠΌΡΡΠΊΠΎΠΉ(Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΡΡΠΊΠΎΠΉ) cur_obj.follow_mouse_offset = [ mouse_pos[0] - cur_obj.pos[0], mouse_pos[1] - cur_obj.pos[1] ] # ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΡΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠ»Π΅Π²ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° break # ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΠΌΡΡΠΊΠΎΠΉ, Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ elif event.type == pygame.KEYUP: if event.key == pygame.K_e: ### ΠΡΠ»ΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΡΡΡΠ΅ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° 'e' if World.edit_mode == None: ### ΠΠΊΠ»ΡΡΠ°Π΅v ΡΠ΅ΠΆΠΈΠΌ EDIT(Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²) mode_text_obj = models.TextObject( [10, 10], "EDIT", white_color, -1, 40) ### ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ ΡΠ»Π΅Π²Π° Π²Π²Π΅ΡΡ Ρ textObjectList.append( mode_text_obj ) ### ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² World.edit_mode = textObjectList[len(textObjectList) - 1] else: ### ΠΡΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½, textObjectList.remove( World.edit_mode) ### Π£Π΄Π°Π»ΡΠ΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ World.edit_mode = None ### ΠΡΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ(EDIT) ## ΠΡΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ all_objects_dict = [] ###ΡΠΏΠΈΡΠΎΠΊ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ for i in range(len(gameObjectList) - 1): ### ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ΅ΠΊΡΠΎΠ² Π² ΠΈΠ³ΡΠ΅ cur_obj = gameObjectList[i] ###ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ new_obj_dict = { 'obj_props': cur_obj. obj_props, ### Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°Π½ΠΎΡΠΈΠΌ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ 'posX': cur_obj.pos[0], ### ΠΠΎΠ·ΠΈΡΠΈΡ X 'posY': cur_obj.pos[1], ### ΠΠΎΠ·ΠΈΡΠΈΡ Y 'width': cur_obj.img_rect.w, ### Π¨ΠΈΡΠΈΠ½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ 'height': cur_obj.img_rect.h ### ΠΡΡΠΎΡΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ } all_objects_dict.append( new_obj_dict ) ### Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π² ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² json_dump = json.dumps( all_objects_dict ) ### Π²ΡΠ³ΡΡΠΆΠ°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ³ΡΡ Π² json-ΡΠΎΡΠΌΠ°ΡΠ΅ print(json.dumps( json_dump)) ### Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ json Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ elif event.key == pygame.K_r: ### ΠΠΎΡΡΠΎΡΠ½Π½ΠΎΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠΊ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² if World.show_rects: ### ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ World.show_rects = False ### Π²ΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ else: ### Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΎ World.show_rects = True elif event.type == QUIT: return if animationIndex < 9: animationIndex += 1 else: animationIndex = 0 player.isCasting = False player.isMoving = False if player.isCasting: spriteIndex = 3 elif player.isMoving: spriteIndex = 2 else: spriteIndex = 0 player.image, player.rect = playerTextures[spriteIndex][animationIndex] if not player.isFacingRight: player.image = pygame.transform.flip(player.image, True, False) pX, pY = player.update() for y in range(0, 16): for x in range(0, 16): screen.blit( level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY)) if (level.getDecorationAt(x, y) is not None): screen.blit( level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY)) if ((x, y - 1) == (pX, pY)): screen.blit( player.image, (player.x + player.offsetX, player.y + player.offsetY)) ## ΠΠ’Π ΠΠ‘ΠΠΠΠ ΠΠΠͺΠΠΠ’ΠΠ ## player_pos = (player.x + player.offsetX, player.y + player.offsetY ) #ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΠΊΠ°ΡΡΠ΅ x,y for indx, _ in enumerate( gameObjectList): #Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² cur_obj = gameObjectList[indx] if cur_obj.follow_mouse: # ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ»Π°Π³ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π·Π° ΠΌΡΡΠΊΠΎΠΉ (ΠΎΠ±ΡΠ΅ΠΊΡ Π²Π·ΡΡ) if World.edit_mode != None or ( 'CanMove' in cur_obj.obj_props and cur_obj.obj_props['CanMove'] == 'True' ): ### ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ(EDIT) # ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΡ Π²ΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΌΡΡΠΈ if pygame.mouse.get_pressed( )[0]: # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π°ΠΆΠ°ΡΠ° Π»ΠΈ ΠΠΠΠΠ― ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡΡΠΈ newPosX = mouse_pos[0] - cur_obj.follow_mouse_offset[ 0] # Π²ΡΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ X-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ newPosY = mouse_pos[1] - cur_obj.follow_mouse_offset[ 1] # Y-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ cur_obj.set_position( [newPosX, newPosY] ) # ΠΏΡΠΈ Π·Π°ΠΆΠ°ΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π° ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΌΡΡΠΈ else: # Π΅ΡΠ»ΠΈ Π»Π΅Π²Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΏΡΡΠ΅Π½Π°, Π±ΡΠΎΡΠ°Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ cur_obj.follow_mouse = False # ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΠΌΡΡΡΡ(Π±ΡΠΎΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ) gameObjectList.sort( key=lambda x: x.pos[1] + x.lowestY ) # ΡΠ½ΠΎΠ²Π° ΡΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎ ΡΠ°ΠΌΠΎΠΌΡ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΠΏΠΈΠΊΡΠ΅Π»Ρ screen.blit( cur_obj.img, cur_obj.pos ) #ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° if World.show_rects or ( World.edit_mode != None and cur_obj.follow_mouse ): ### ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ(EDIT), ΡΠΈΡΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ, ΠΎΡΠ΅ΡΡΠΈΠ²Π°ΡΡΠΈΠ΅ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π΄Π»Ρ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ opq_rect = pygame.Rect( cur_obj.pos[0] + cur_obj.opaq_rect[0], cur_obj.pos[1] + cur_obj.opaq_rect[1], cur_obj.opaq_rect[2], cur_obj.opaq_rect[3] ) ### ΡΠ°ΡΡΠ΅Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ pygame.draw.rect(screen, white_color, opq_rect, 1) ### ΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° col_rect = pygame.Rect(cur_obj.pos[0] + cur_obj.coll_rect[0], cur_obj.pos[1] + cur_obj.coll_rect[1], cur_obj.coll_rect[2], cur_obj.coll_rect[3]) pygame.draw.rect( screen, (100, 255, 0), col_rect, 2 ) ### Π·Π΅Π»Π΅Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±Π»Π°ΡΡΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° if (player_pos[1] + player.rect[3]) >= ( cur_obj.pos[1] + cur_obj.lowestY ): #Π΅ΡΠ»ΠΈ ΡΠ°ΠΌΠ°Ρ Π½ΠΈΠΆΠ½ΡΡ ΡΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ° screen.blit(player.image, player_pos) #ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎΠ²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° if World.edit_mode != None: ### ΠΡΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌ EDIT player_rect = pygame.Rect( player_pos[0], player_pos[1], player.rect[2], player.rect[3]) ### Π Π°ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ³ΡΠΎΠΊΠ° pygame.draw.rect(screen, (0, 0, 255), player_rect, 2) ### ΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΊΡ ΠΈΠ³ΡΠΎΠΊΠ° ## ΠΠ’Π ΠΠ‘ΠΠΠΠ Π’ΠΠΠ‘Π’ΠΠΠ«Π₯ ΠΠΠͺΠΠΠ’ΠΠ ## for indx, _ in enumerate( textObjectList ): # ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π°Π΄ΠΏΠΈΡΠΈ(ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°) text_obj = textObjectList[ indx] # ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΠ°ΠΌΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ for ΡΠΈΠΊΠ»Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π»ΠΈΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ if text_obj.text_visible == False: # ΠΡΠ»ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ continue # ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ text_surface = pygame.font.SysFont( text_obj.font_name, text_obj.font_size).render( text_obj.text_str, False, text_obj.text_color ) # ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ(ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Surface Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ) screen.blit( text_surface, text_obj.pos ) # Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΡΠΊΡΠ°Π½Π°, Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ΅ΠΊΡΡ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΊΡΠ°Π½ if text_obj.exist_time != -1: # Π΅ΡΠ»ΠΈ Ρ Π½Π°Π΄ΠΏΠΈΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ(exist_time) elapsed = ( time.time() - text_obj.time1 ) * 1000 #ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ ΠΏΡΠΎΡΠ»ΠΎ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°Π΄ΠΏΠΈΡΠΈ if elapsed > text_obj.exist_time: # Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ (exist_time) textObjectList.pop( indx) # ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ pygame.display.flip()
def main(): pygame.init() screen = pygame.display.set_mode((xRes, yRes)) pygame.display.set_caption('Roguelike') animationIndex, spriteIndex = 0, 0 clock = pygame.time.Clock() player = Entity(level) loadTextures() loadLevel(tileData, decorationData, level) while True: clock.tick(24) player.isMoving = False player.dx, player.dy = 0, 0 keys = pygame.key.get_pressed() if keys[K_ESCAPE]: return if keys[K_UP]: player.isMoving = True player.dy = -2 * gameScale if keys[K_DOWN]: player.isMoving = True player.dy = 2 * gameScale if keys[K_LEFT]: player.isFacingRight = False player.isMoving = True player.dx = -2 * gameScale if keys[K_RIGHT]: player.isFacingRight = True player.isMoving = True player.dx = 2 * gameScale if keys[K_z]: player.isCasting = True animationIndex = 0 for event in pygame.event.get(): if event.type == QUIT: return if animationIndex < 9: animationIndex += 1 else: animationIndex = 0 player.isCasting = False player.isMoving = False if player.isCasting: spriteIndex = 3 elif player.isMoving: spriteIndex = 2 else: spriteIndex = 0 player.image, player.rect = playerTextures[spriteIndex][animationIndex] if not player.isFacingRight: player.image = pygame.transform.flip(player.image, True, False) pX, pY = player.update() for y in range(0, 16): for x in range(0, 16): screen.blit( level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY)) if (level.getDecorationAt(x, y) is not None): screen.blit( level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY)) if ((x, y - 1) == (pX, pY)): screen.blit( player.image, (player.x + player.offsetX, player.y + player.offsetY)) pygame.display.flip()
def main(): pygame.init() screen = pygame.display.set_mode((xRes, yRes)) pygame.display.set_caption('Roguelike') animationIndex, spriteIndex = 0, 0 clock = pygame.time.Clock() player = Entity(level) loadTextures() loadLevel(tileData, decorationData, level) while True: clock.tick(24) player.isMoving = False player.dx, player.dy = 0, 0 keys = pygame.key.get_pressed() if keys[K_ESCAPE]: return if keys[K_UP]: player.isMoving = True player.dy = -2 * gameScale if keys[K_DOWN]: player.isMoving = True player.dy = 2 * gameScale if keys[K_LEFT]: player.isFacingRight = False player.isMoving = True player.dx = -2 * gameScale if keys[K_RIGHT]: player.isFacingRight = True player.isMoving = True player.dx = 2 * gameScale if keys[K_z]: player.isCasting = True animationIndex = 0 for event in pygame.event.get(): if event.type == QUIT: return if animationIndex < 9: animationIndex += 1 else: animationIndex = 0 player.isCasting = False player.isMoving = False if player.isCasting: spriteIndex = 3 elif player.isMoving: spriteIndex = 2 else: spriteIndex = 0 player.image, player.rect = playerTextures[spriteIndex][animationIndex] if not player.isFacingRight: player.image = pygame.transform.flip(player.image, True, False) pX, pY = player.update() for y in range(0, 16): for x in range(0, 16): screen.blit(level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY)) if (level.getDecorationAt(x, y) is not None): screen.blit(level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY)) if ((x, y - 1) == (pX, pY)): screen.blit(player.image, (player.x + player.offsetX, player.y + player.offsetY)) pygame.display.flip()
def main(): pygame.init() screen = pygame.display.set_mode((xRes, yRes)) pygame.display.set_caption('Roguelike') animationIndex, spriteIndex = 0, 0 clock = pygame.time.Clock() player = Entity(level) loadTextures() loadLevel(tileData, decorationData, level) while True: clock.tick(24) player.isMoving = False player.dx, player.dy = 0, 0 keys = pygame.key.get_pressed() if keys[K_ESCAPE]: return if keys[K_UP]: player.isMoving = True player.dy = -2 * gameScale if keys[K_DOWN]: player.isMoving = True player.dy = 2 * gameScale if keys[K_LEFT]: player.isFacingRight = False player.isMoving = True player.dx = -2 * gameScale if keys[K_RIGHT]: player.isFacingRight = True player.isMoving = True player.dx = 2 * gameScale if keys[K_z]: player.isCasting = True animationIndex = 0 for event in pygame.event.get(): if event.type == QUIT: return if animationIndex < 9: animationIndex += 1 else: animationIndex = 0 player.isCasting = False player.isMoving = False if player.isCasting: spriteIndex = 3 elif player.isMoving: spriteIndex = 2 else: spriteIndex = 0 player.image, player.rect = playerTextures[spriteIndex][animationIndex] if not player.isFacingRight: player.image = pygame.transform.flip(player.image, True, False) pX, pY = player.update() for y in range(0, 16): for x in range(0, 16): screen.blit( level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY)) if (level.getDecorationAt(x, y) is not None): screen.blit( level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY)) if ((x, y - 1) == (pX, pY)): screen.blit( player.image, (player.x + player.offsetX, player.y + player.offsetY)) playerPos = (player.x + player.offsetX, player.y + player.offsetY ) #ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΠΊΠ°ΡΡΠ΅ x,y for indx, _ in enumerate( gameObjectList): #Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² curObj = gameObjectList[indx] screen.blit( curObj.img, curObj.pos ) #ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° if (playerPos[1] + player.rect[3]) >= ( curObj.pos[1] + curObj.lowestY ): #Π΅ΡΠ»ΠΈ ΡΠ°ΠΌΠ°Ρ Π½ΠΈΠΆΠ½ΡΡ ΡΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ° screen.blit(player.image, playerPos) #ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎΠ²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° pygame.display.flip()
def main(): pygame.init() screen = pygame.display.set_mode((xRes, yRes)) pygame.display.set_caption('Roguelike') animationIndex, spriteIndex = 0, 0 clock = pygame.time.Clock() player = Entity(level) loadTextures() loadLevel(tileData, decorationData, level) while True: clock.tick(24) player.isMoving = False player.dx, player.dy = 0, 0 mouse_pressed1, mouse_pressed2, mouse_pressed3 = pygame.mouse.get_pressed( ) ### ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΡΡ Π½Π° ΠΌΡΡΠΊΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ keys = pygame.key.get_pressed() if keys[K_ESCAPE]: return if keys[K_UP]: player.isMoving = True player.dy = -2 * gameScale if keys[K_DOWN]: player.isMoving = True player.dy = 2 * gameScale if keys[K_LEFT]: player.isFacingRight = False player.isMoving = True player.dx = -2 * gameScale if keys[K_RIGHT]: player.isFacingRight = True player.isMoving = True player.dx = 2 * gameScale if keys[K_z]: player.isCasting = True animationIndex = 0 #### ΠΠΠ ΠΠΠΠ’ΠΠ ΠΠΠΠΠ’ΠΠ ΠΠΠΠΠΠΠ’Π£Π Π« Π ΠΠ«Π¨Π #### for event in pygame.event.get( ): ### Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Π² ΡΠΈΠΊΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΠΌΡΡΠΈ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ if event.type == MOUSEBUTTONDOWN: ### Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ - Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ mouse_pos = event.pos ### ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ x,y ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΈΠ³ΡΡ for curObj in gameObjectList: ### ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ Π² ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ pos_in_mask = mouse_pos[0] - curObj.img_rect.x, mouse_pos[ 1] - curObj.img_rect.y ### Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΌΠ°ΡΠΊΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° if curObj.img_rect.collidepoint( mouse_pos ) and curObj.img_mask.get_at( pos_in_mask ) == 1: ### ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΌΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ΅Π½ Π»ΠΈ ΠΏΠΈΠΊΡΠ΅Π»Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ new_time_obj = models.textObj( [mouse_pos[0], mouse_pos[1]], curObj.objName, (255, 255, 255), 1500 ) ### Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ, ΡΠ΅ΠΊΡΡΠΎΠΌ, ΡΠ°Π²Π½ΡΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΠΌΡΡΠΊΠΎΠΉ, Π±Π΅Π»ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΡΡΠΈΡΡΠ°(255,255,255) ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ 1500 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΡΠΊΠ½Π΄ new_time_obj.time1 = time.time( ) ### Π² ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° time1 Π·Π°Π½ΠΎΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°Π½ textObjectList.append( new_time_obj ) ### ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ(ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ) Π² ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ break ### ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ ΠΌΡΡΡΡ, Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΠΊΠ»Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ elif event.type == QUIT: return if animationIndex < 9: animationIndex += 1 else: animationIndex = 0 player.isCasting = False player.isMoving = False if player.isCasting: spriteIndex = 3 elif player.isMoving: spriteIndex = 2 else: spriteIndex = 0 player.image, player.rect = playerTextures[spriteIndex][animationIndex] if not player.isFacingRight: player.image = pygame.transform.flip(player.image, True, False) pX, pY = player.update() for y in range(0, 16): for x in range(0, 16): screen.blit( level.getTileAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getTileAt(x, y).offsetY)) if (level.getDecorationAt(x, y) is not None): screen.blit( level.getDecorationAt(x, y).image, (x * 16 * gameScale, y * 16 * gameScale + level.getDecorationAt(x, y).offsetY)) if ((x, y - 1) == (pX, pY)): screen.blit( player.image, (player.x + player.offsetX, player.y + player.offsetY)) #### ΠΠ’Π ΠΠ‘ΠΠΠΠ ΠΠΠͺΠΠΠ’ΠΠ #### playerPos = (player.x + player.offsetX, player.y + player.offsetY ) #ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠ° Π½Π° ΠΊΠ°ΡΡΠ΅ x,y for indx, _ in enumerate( gameObjectList): #Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π½Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² curObj = gameObjectList[indx] screen.blit( curObj.img, curObj.pos ) #ΡΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° if (playerPos[1] + player.rect[3]) >= ( curObj.pos[1] + curObj.lowestY ): #Π΅ΡΠ»ΠΈ ΡΠ°ΠΌΠ°Ρ Π½ΠΈΠΆΠ½ΡΡ ΡΠΎΡΠΊΠ° ΠΈΠ³ΡΠΎΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΡΠ΅ ΠΈΠ³ΡΠΎΠΊΠ° screen.blit(player.image, playerPos) #ΡΠΈΡΡΠ΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° ΠΏΠΎΠ²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° #### ΠΠ’Π ΠΠ‘ΠΠΠΠ Π’ΠΠΠ‘Π’Π #### for indx, _ in enumerate( textObjectList ): ### ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π°Π΄ΠΏΠΈΡΠΈ(ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°) textObj = textObjectList[ indx] ### ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΠ°ΠΌΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ for ΡΠΈΠΊΠ»Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ Π»ΠΈΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ if textObj.textVisible == False: ### ΠΡΠ»ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΡΠΊΠ°Π·Π°Π½Π° Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ continue ### ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ textSurf = pygame.font.SysFont( textObj.fontName, textObj.fontSize).render( textObj.text_str, False, textObj.text_color ) ### ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ(ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Surface Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ) screen.blit( textSurf, textObj.pos ) ### Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Ρ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠΌ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ ΡΠΊΡΠ°Π½Π°, Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ΅ΠΊΡΡ Π½Π° ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠΊΡΠ°Π½ if textObj.exist_time != -1: ### Π΅ΡΠ»ΠΈ Ρ Π½Π°Π΄ΠΏΠΈΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ(exist_time) elapsed = ( time.time() - textObj.time1 ) * 1000 ###ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄ ΠΏΡΠΎΡΠ»ΠΎ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π°Π΄ΠΏΠΈΡΠΈ if elapsed > textObj.exist_time: ### Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ (exist_time) textObjectList.pop( indx) ### ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ pygame.display.flip()