요약 - 점수 추적기
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 69번째.
챌린지
쉬움게임 리더보드를 위한 점수 추적 시스템을 만들어 봅시다! 개별 점수 항목을 나타내는 클래스와 연산자 오버로딩을 통한 정렬 기능을 갖춘 리더보드 관리 클래스, 이렇게 함께 작동하는 두 개의 클래스를 만들게 됩니다.
코드는 다음 세 개의 파일로 구성됩니다:
ScoreEntry.lua: 단일 플레이어의 점수를 나타내는 ScoreEntry 클래스를 만듭니다. 각 항목은playerName과score를 가집니다."{playerName}: {score} points"형식의 문자열을 반환하는:getInfo()메서드를 포함하세요. 여기서 핵심 기능은__lt메타메서드를 구현하는 것입니다. 하지만 내림차순 정렬(높은 점수가 먼저 나옴)을 위해, 첫 번째 항목의 점수가 두 번째 항목의 점수보다 클 때true를 반환하도록 비교 로직을 작성해야 함을 기억하세요.Leaderboard.lua: 점수 항목 컬렉션을 관리하는 Leaderboard 클래스를 만듭니다. 리더보드에는 다음이 필요합니다::addEntry(entry)— 내부 리스트에 ScoreEntry를 추가합니다.:sort()—table.sort를 사용하여 점수가 높은 순에서 낮은 순으로 항목을 정렬합니다.:display()— 각 항목의 정보를 한 줄에 하나씩 출력합니다.
main.lua: 모든 것을 하나로 합칩니다! Leaderboard를 생성하고, 받은 입력에 따라 점수 항목을 추가한 뒤, 리더보드를 정렬하고 결과를 표시하세요.
이 설계의 우아한 점은 table.sort가 ScoreEntry 객체를 비교할 때 자동으로 여러분이 정의한 __lt 메타메서드를 사용한다는 것입니다. 항목들이 서로 어떻게 비교되는지 정의함으로써, Lua의 내장 정렬 기능이 여러분의 커스텀 객체와 함께 바로 작동하게 됩니다!
세 명의 플레이어를 나타내는 여섯 개의 입력을 받게 됩니다:
- 첫 번째 플레이어의 이름
- 첫 번째 플레이어의 점수 (숫자)
- 두 번째 플레이어의 이름
- 두 번째 플레이어의 점수 (숫자)
- 세 번째 플레이어의 이름
- 세 번째 플레이어의 점수 (숫자)
메인 파일에서 리더보드를 생성하고, 세 항목을 모두 추가한 뒤, :sort()를 호출하고, 마지막으로 :display()를 호출하여 정렬된 결과를 보여주세요.
예를 들어, 입력이 Alice, 1500, Bob, 2300, Charlie, 1800이라면 출력은 다음과 같아야 합니다:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 points입력이 Zara, 500, Max, 750, Luna, 600이라면 출력은 다음과 같아야 합니다:
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: 새로운 리더보드 생성
-- TODO: 각 플레이어에 대한 ScoreEntry 객체 생성
-- TODO: 리더보드에 세 개의 항목 모두 추가
-- TODO: 리더보드 정렬
-- TODO: 정렬된 결과 표시