Авторская презентация — творческая работа обучающегося по теме «Программирование игры по мотивам художественного произведения «Герой нашего времени» на движке Ren’Py» для городского этапа научного общества учащихся «Эврика-2016»


Чтобы посмотреть этот PDF файл с форматированием и разметкой, скачайте файл и откройте на своем компьютере.
МУНИЦИПАЛЬНОЕ БЮДЖЕТНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ «ШКОЛА №121» КАНАВИНСКОГО РАЙОНА ГОРОДСКОЕ НАУЧНОЕ ОБЩЕСТВО УЧАЩИХСЯ Программирование игры по мотивам художественного произведения «Герой нашего времени» на движке Ren’Py » Ловцова Кристина͕ учащаяся 10Б класса Выполнила: Шорин П. М. учитель информатики и ИКТ высшей категории Научный руководитель : Г.НИЖНИЙ НОВГОРОД 16 АПРЕЛЯ 2016 ГОДА АКТУАЛЬНОСТЬ • Повышенный спрос подростков на компьютерные игры • Упадок интереса учеников к произведениям школьной литературы • Нехватка времени учащихся на чтение ЦЕЛЬ: Запрограммировать игру по мотивам литературного произведения М . Ю . Лермонтова «Герой нашего времени» на движке Ren’Py ЗАДАЧИ: • Исследовать современные движки • Разработать сюжет͕ дизайн͕ музыку • Написать код • Создать обучающие мини - игры • Выпустить компакт - диск с демо - версией игры ВЫБОР ДВИЖКА • Изначальное содержание необходимых функций • Легкость в освоении • Кросс - платформенность • Бесплатность • Популярность Ren’Py – бесплатный͕ свободный и открытый движок для создания игр жанра визуальных новелл ПАПКИ ИГРЫ • script.rpy • screens.rpy • options.rpy • story.rpy • inventory • gallery.rpy • mg.rpy SCREENS.RPY Диалоговое окно screen say_new (who, what, side_image = None, two_window = False): if not two_window : window: background Frame("Images/el2.png", 12, 12) left_padding 200 has vbox : style " say_vbox " if who: text who id "who" text what id "what" else: vbox : style " say_two_window_vbox " if who: window: xalign 0.24 ypos 85 style " say_who_window " text who: id "who" window: background Frame("Images/el2.png", 12, 12) left_padding 180 has vbox : style " say_vbox " text what id "what" if side_image : add side_image else: add "images/krr1.png" xpos 16 yalign 0.98 add SideImage () xpos 16 yalign 0.98 add "images/krr2.png" xpos 16 yalign 0.98 SCREENS.RPY Экраны button: background None action FileAction (1) add FileScreenshot (1) key " save_delete " action FileDelete (1) xpos 93 ypos 82 xmaximum 206 ymaximum 101 text ( (1, empty=_(" Отсутствует сохранение.")) + " \ n" + FileSaveName (1)) xalign 0.98 yalign 0.6 screen main_menu : on "replace" action Play("music", "music/usual.mp3") imagemap : ground"images /menu1.png" hover"images /menu2.png" alpha True hotspot (292, 144, 218, 358) action Start() add flo hotspot (8, 527, 148, 49) action ShowMenu ("load"), Hide(" sc_pom ") hotspot (168, 526, 149, 53) action ShowMenu ("preferences"), Hide(" sc_pom ") hotspot (325, 526, 149, 52) action ShowMenu ("gallery"), Hide(" sc_pom ") hotspot (485, 526, 149, 53) action Show(" sc_pom ") hotspot (643, 526, 149, 53) action Quit(), Hide(" sc_pom ") hotspot (643, 526, 149, 53) action Quit(), Hide(" sc_pom ") add "podp.png" at Move((2.0, 1.03, 1.0, 1.0), ( - 0.1, 1.03, 1.0, 1.0), 13.0, repeat=True, subpixel=True ) tag menu screen sc_pom : add "scpom.png" xpos 560 ypos 29 drag xpos 570 ypos 34: add "lerm.png" GALLERY.RPY screen gallery: tag menu add "gf.png" imagebutton idle "butret.png" hover "butret2.png" action Return(), Hide("sc_gfv1"), Hide("sc_gfm1"), Hide("sc_gfg1"),Hide("sc_gfd1") xalign 0.98 yalign 0.95 button: xpos 100 ypos 93 xmaximum 113 ymaximum 35 if persistent.v : background "gbv1.png" hover_background "gbv2.png" xpos 100 ypos 93 else: background "gb1.png" hover_background "gb2.png" xpos 100 ypos 93 action Show("sc_gfv1"), Hide("sc_gfm1"), Hide("sc_gfg1"), Hide("sc_gfd1") screen sc_gfv1: if persistent.v : add "gfv2.png" xpos 75 ypos 140 add "gbv2.png" xpos 100 ypos 93 else: add "gfv1.png" xpos 75 ypos 140 add "gb2.png" xpos 100 ypos 93 init python: if persistent.v is None: persistent.v = False MG.RPY change cursor imagebutton : auto "girl_%s.png" focus_mask True xalign .98 yalign .35 if end_mg == False: action If(block == False, Function( change_cursor , p), None) else: action Jump(" lb_mg_r_end ") def change_cursor ( num ): global cnt cnt = num cr = "cursor_" + str ( num ) + ". png " config.mouse = {'default' : [( cr , 0, 0)]} block = True button : maximum(440, 323) minimum (440, 323) background None xpos 21 ypos 69 if block1 == False: action If( cnt == 1, [Function( def_cur ), SetVariable ("cnt2", cnt2 + 1)], None) else: action None if cnt2 == 1: add "kvr.png" xpos 29 ypos 100 $ block = False $ block1 = True $ p = 2 screen sc_cur_n : key "K_ESCAPE" action Function( def_cur ), ShowMenu ("navigation") key 'mouseup_3' action Function( def_cur ), ShowMenu ("navigation") MG.RPY imagemap label lb_mg_v_and_m : $ mini_game = renpy.imagemap ("qv_map.png", "qv_map_p.png",[ (383, 99, 797, 596,"mapvera"), (0, 151, 341, 596,"mapmery"), ], focus=" imagemap ") if mini_game == " mapvera ": jump lb_mini_game_vera if mini_game == " mapmery ": jump lb_mini_game_mery INVENTORY.RPY class Item: def __ init __(self, ico , name): self.ico = ico self.name = name class Inventory: def __ init __(self): self.items = [] def add_item (self, item): self.items.append (item) def draw_items (self): temp = [] for i in range( len ( self.items )): temp.append ( self.items [ i ]. ico ) return temp def find_name (self, i ): return self.items [ i ].name imagebutton : idle fst_way + ico + lst_way # конкатенация hover fst_way + ico + tre_way + lst_way hovered SetVariable (" nm_item ", b) unhovered SetVariable (" nm_item ", - 1) action NullAction () xpos xps ypos yps $ b = b + 1 $ nm = inventory.find_name ( nm_item ) if nm_item != - 1: text "[nm]" xpos 125 ypos 120 Init : $ inventory = Inventory() $ inventory.add_item (Item(" ochki ", " Лорнет")) screen inv : imagebutton auto "inv_%s.png" xpos 700 ypos 10 action Show(" sc_inventory ", dissolve) SCRIPT.RPY label lb_rinok : call screen sc_rinok screen sc_rinok : add "rinok.png" if r_end == False: add "dam_r.png" xpos 279 ypos 199 imagebutton auto "prod_%s.png" focus_mask True xpos 136 ypos 199 action If( r_end == False, Jump(" lb_rinok_s "), None) imagebutton auto "arrow180_%s.png" xpos 400 ypos 540 action Jump(" lb_bulvar ") imagebutton auto "g_%s.png" focus_mask True xpos 700 ypos 270 action If( butg == True, Jump(" lb_mgr "), None) use inv STORY.RPY image bg_grot1 = LiveComposite ((800, 600), (0, 0), "grot.png", (310, 270), "vgr.png", (0,0), "vetka.png", ) image rain = Fixed( SnowBlossom ( im.FactorScale ("images/kap1.png", 0.2), count=500, xspeed =(0), yspeed =(1000, 2000), start=50), SnowBlossom ( im.FactorScale ("images/kap2.png", 0.5), count=100, xspeed =(0), yspeed =(500, 1000), start=50), SnowBlossom ( im.FactorScale ("images/kap3.png", 0.5), count=500, xspeed =(0), yspeed =(1000, 3000), start=50), show bg_fd4 with dissolve: xalign 0.0 yalign 1.0 linear 1.0 xalign 0.5 ease 1.0 truecenter pause 1.0 alignaround (.5, .5) linear 10.0 yalign 0.0 clockwise circles 2 СОЗДАНИЕ ИЗОБРАЖЕНИЙ PhotoShop CS6 МУЗЫКА Sibelius Audasity play music "music/dual.mp3“ dk " Бросайте жребий͕ доктор!" scene bg_fd3 show zr with dissolve play sound "music/g1.mp3" show gzr : ypos 0 pause 1.0 hide gzr play sound "music/p1.mp3" ЗАКЛЮЧЕНИЕ Итоги: Запрограммирована игра по мотивам литературного произведения М . Ю . Лермонтова «Герой нашего времени» на движке Ren’Py Планы на будущее: • добавить элементы ролевой системы͖ • добавить локации ; • оформить авторские права на код͖ • выпустить игру ; • создать игру с собственными уникальным сюжетом ; СПАСИБО ЗА ВНИМАНИЕ

Приложенные файлы