Menu
Coddy logo textTech

요약 - 점수 추적기

Coddy Lua 여정의 객체 지향 프로그래밍 (Object Oriented Programming) 섹션에 포함된 레슨. 70개 중 69번째.

challenge icon

챌린지

쉬움

게임 순위표를 위한 점수 추적 시스템을 만들어 봅시다! 함께 작동하는 두 개의 클래스를 만들 것입니다. 하나는 개별 점수 항목을 나타내고, 다른 하나는 연산자 오버로딩으로 구현된 정렬 기능을 사용해 순위표를 managing합니다.

코드를 세 개의 파일로 구성합니다.

  • ScoreEntry.lua: 한 플레이어의 점수를 나타내는 ScoreEntry class를 Create합니다. 각 항목에는 playerNamescore가 있습니다. :getInfo() method를 포함하며, 이 method는 "{playerName}: {score} points" format의 문자열을 반환합니다. 여기서 핵심 기능은 __lt metamethod를 구현하는 것입니다. 단, descending 순서( highest 점수부터)를 위해 첫 번째 entry의 점수가 두 번째 entry의 점수보다 greater할 때 true를 반환해야 한다는 점을 기억하세요.
  • Leaderboard.lua: 점수 entry의 collection을 managing하는 Leaderboard class를 Build합니다. 순위표에는 다음 기능이 필요합니다.
    • :addEntry(entry): ScoreEntry를 internal list에 Adds
    • :sort(): table.sort를 사용해 entry를 highest 점수부터 lowest 점수까지 정렬
    • :display(): 각 entry의 info를 한 line에 하나씩 출력
  • main.lua: everything을 하나로 Bring합니다! Leaderboard를 Create하고, 받게 되는 inputs를 바탕으로 점수 entry를 추가한 다음, 순위표를 정렬하고 결과를 display합니다.

이 설계의 우아한 점은 table.sort가 자동으로 __lt metamethod를 사용해 ScoreEntry object를 Compare한다는 것입니다. entry가 서로 어떻게 비교되는지 정의하면 Lua의 내장 정렬 기능이 사용자 정의 object에서도 바로 작동합니다!

세 명의 플레이어를 나타내는 여섯 개의 inputs를 받게 됩니다.

  1. 첫 번째 플레이어의 이름
  2. 첫 번째 플레이어의 score (숫자)
  3. 두 번째 플레이어의 이름
  4. 두 번째 플레이어의 score (숫자)
  5. 세 번째 플레이어의 이름
  6. 세 번째 플레이어의 score (숫자)

main file에서 leaderboard를 Create하고, 세 entry를 모두 추가한 뒤 :sort()를 호출하고, 이어서 :display()를 호출해 정렬된 결과를 표시하세요.

예를 들어 inputs가 Alice, 1500, Bob, 2300, Charlie, 1800이라면 output은 다음과 같아야 합니다.

Bob: 2300 points
Charlie: 1800 points
Alice: 1500 points

inputs가 Zara, 500, Max, 750, Luna, 600이라면 output은 다음과 같아야 합니다.

Max: 750 points
Luna: 600 points
Zara: 500 points

직접 해보기

-- 메인 파일: 모든 것을 하나로 모음
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')

-- 세 명의 플레이어에 대한 입력 읽기
local name1 = io.read()
local score1 = tonumber(io.read())
local name2 = io.read()
local score2 = tonumber(io.read())
local name3 = io.read()
local score3 = tonumber(io.read())

-- TODO: 새 Leaderboard 생성

-- TODO: 각 플레이어에 대한 ScoreEntry 객체 생성

-- TODO: 세 개의 항목을 모두 leaderboard에 추가

-- TODO: leaderboard 정렬

-- TODO: 정렬된 결과 표시

객체 지향 프로그래밍 (Object Oriented Programming)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러