[Ruby] 루비로 게임 제작해보기 7: 도착 로직 구현

PersesTitan·2023년 1월 5일
0

Ruby

목록 보기
19/24

[Ruby] 루비로 게임 제작해보기 6: 물체 통과 막기
[Ruby] 루비로 게임 제작해보기 6-1: 물체 통과 막기

지금까지 이동하는 로직을 구현했으므로 게임의 진행하고 끝나는 로직을 구현할려고 합니다.

코드

direction.rb
6-1코드 유지

start.rb

require 'ruby2d'
require_relative 'direction'

check_in = lambda do |o1, os, x, y|
  os.each do |o|
    if Direction.check o1, o
      o1.x, o1.y = x, y
    end
  end
end

set title: "Game"
@width = get :width
@height = get :height
@is_finish = false
# 장애물
block = []

# 중간에 설치하는 로직
def set_center_x(o)
  o.x = @width / 2
  o.x -= o.width
  o
end

def set_center_y(o)
  o.y = @height / 2
  o.y -= o.height
  o
end

st = Text.new("Start")
en = Text.new("End")

character = Rectangle.new(width: 20, height: 20, color: "red")

set_center_x st
set_center_x en
st.y = @height - st.height

# 시작 위치로 이동하는 로직
character.x = st.x + st.width / 2
character.y = st.y

Window.on :key_held do |e|
  if @is_finish
    next
  end
  x, y = character.x, character.y
  Direction::move(e, character, speed=3)
  if Direction::check(character, en)
    @is_finish = true
    clear_message = Text.new("성공")
    set_center_x clear_message
    set_center_y clear_message
  end
  if character.x < 0 || character.x + character.width > @width; character.x = x end
  if character.y < 0 || character.y + character.height > @height; character.y = y end
  check_in.call(character, block, x, y)
end

show

동작

코드 풀이

start.rb

@is_finish = false

동작이 끝이 났는지 확인하는 로직

set_center_x

x축의 가운데로 이동시키는 로직

set_center_y

y축의 가운데로 이동시키는 로직

st = Text.new("Start")

시작하는 위치를 나타내는 텍스트

en = Text.new("End")

끝나는 위치를 나타내는 텍스트

if @is_finish

만약에 도착을 했으면 @is_finish의 값이 true로 변경되고 도착하였다면 이동할 수 없도록 패스하도록합니다.


Github 예제 링크

profile
안녕하세요 페르세스 티탄입니다! 부족한 부분이 많이 있겠지만 잘부탁드립니다.

0개의 댓글