PersesTitan(페르) 기술블로그

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

Language/Ruby

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

PersesTitan(페르) 2023. 1. 6. 08:16

[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 예제 링크

 

GitHub - PersesTitan/ruby-games: make game

make game. Contribute to PersesTitan/ruby-games development by creating an account on GitHub.

github.com

 

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

[Ruby] 루비로 게임 제작해보기 4: 키보드로 이동 구현 [Ruby] 루비로 게임 제작해보기 5: 상대 위치로 이동 4번째 키보드로 이동 구현에서 이미 통과 막는 기능은 구현했었지만 사실 해당 기능은 문

persestitan.tistory.com

 

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

[Ruby] 루비로 게임 제작해보기 6: 물체 통과 막기 (현재 입력된 방향키를 확인하기 쉽게 좌측 상단에 입력된 방향키가 보이도록 임시로 넣었습니다.) 아래와 같이 벽에 완전히 붙어있을때 움직일

persestitan.tistory.com