Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЖОВТЯК 4016 КУРСОВАЯ

.pdf
Скачиваний:
4
Добавлен:
27.08.2024
Размер:
769.24 Кб
Скачать

7)func save_highscore() – сохранение рекорда, вызывается при преодолении рекорда

8)func load_highscore() – загрузка рекорда из файла игры

9)func _on_ctchar1_pressed() – смена персонажа

На этом моменте игра готова к использованию. Так же было решено добавить главное меню игры, представляющее игру. Создан узел типа Control,

на которую добавлены иконка игры с еѐ названием, кнопки с переходом в основную сцену игры. Результат представлен на рисунке 12.

Рисунок 12 – Главное меню Скриншот из игры можно просмотреть на рисунке 13.

21

Рисунок 13 – Скриншот игры

В итоге, схема узлов Node в игре составлена таким образом (рис. 13).

Рисунок 13 – Схема узлов

22

ЗАКЛЮЧЕНИЕ

Результатом курсовой работы является реализованная мобильная игра

―Flappy bird‖. В игре реализованы следующие элементы: игровой мир,

персонаж, интерфейс, скрипты к ним. Поверх оригинальной игры реализованы редактор персонажей и главное меню.

В ходе работы изучены движок для создания игр Godot и его язык

GodoScript. В перспективе игра может быть спокойно дополнена дополнительными возможностями.

23

СПИСОК ИСПОЛЬЗОВАННЫХ РЕСУРСОВ

1)Godot Engine Game Development Projects. Build five cross-platform 2D and 3D games with Godot 3.0/Chris Bradfield. - Packt Publishing, 2018 – 294 стр.

2)Официальный сайт Godot : URL - https://godotengine.org/

24

ПРИЛОЖЕНИЕ А

Код файла bird.gd extends RigidBody2D class_name bird

#Константы

var flap_force = -250 var degree = -30 signal died

onready var animator = get_node("AnimationPlayer") onready var hit = get_node("Hit")

onready var wing = get_node("Wing")

var started = false var alive = true

func _physics_process(_delta):

if Input.is_action_just_pressed("flap") and alive: if !started:

start()

flap()

if rotation_degrees <= degree: angular_velocity = 0 rotation_degrees = degree

if linear_velocity.y > 0:

if rotation_degrees <= 90: angular_velocity = 3.0

else: angular_velocity = 0

25

func start():

if started: return started = true gravity_scale = 5.0 animator.play("flap")

func flap():

linear_velocity.y = flap_force angular_velocity = -8.0 wing.play()

func die():

if !alive: return alive = false animator.stop() hit.play() emit_signal("died")

26

ПРИЛОЖЕНИЕ Б

Скрипт создания препятствий barrier.gd extends Node2D

signal score var speed = 220

onready var point = get_node("Point")

func _physics_process(delta): position.x += -speed * delta if global_position.x <= -200:

global_position.x = 500 queue_free()

func _on_pipe_body_entered(body): if body is bird:

if body.has_method("die"): body.die()

func _on_area_of_score_body_exited(body): if body is bird:

point.play() emit_signal("score")

27

ПРИЛОЖЕНИЕ В

Скрипт генерации препятствий barrier_spawner.gd extends Node2D

signal builded_barrier(obs)

onready var timer = get_node("Timer")

var barrier = preload("res://design/barrier.tscn")

func _ready(): randomize()

func _on_Timer_timeout(): spawn_barrier()

func spawn_barrier():

var bar = barrier.instance() add_child(bar)

bar.position.y = randi()%400 + 140 emit_signal("builded_barrier", bar)

func start(): timer.start()

func stop(): timer.stop()

28

ПРИЛОЖЕНИЕ Г

Скрипт стартового и прощального меню Menu.gd extends CanvasLayer

signal start_game

onready var start_message = get_node("Start_text/StartMessage") onready var tween = get_node("Tween")

onready var score_label = get_node("GameOver_text/VBoxContainer/ScoreLabel") onready var high_score = get_node("GameOver_text/VBoxContainer/Highscore") onready var game_over_menu = get_node("GameOver_text")

var game_started = false

func _input(event):

if event.is_action_pressed("flap") and !game_started: emit_signal("start_game")

game_started = true

tween.interpolate_property(start_message, "modulate:a", 1, 0, 0.5) tween.start()

func init_game_over_menu(score, highscore): score_label.text = "SCORE: " + str(score) high_score.text = "HIGHSCORE: " + str(highscore) game_over_menu.visible = true

func _on_Restart_pressed(): get_tree().reload_current_scene()

29

func _on_GoToMenu_pressed():

get_tree().change_scene("res://design/StartUI.tscn")

30

Соседние файлы в предмете Основы программирования