요약 - 점수 추적기
Coddy Lua 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 70개 중 69번째.
챌린지
쉬움게임 순위표를 위한 점수 추적 시스템을 만들어 봅시다! 함께 작동하는 두 개의 클래스를 만들 거예요. 하나는 개별 점수 항목을 나타내고, 다른 하나는 연산자 오버로딩을 활용한 정렬 기능으로 순위표를 관리합니다.
코드를 세 개의 파일로 나누어 작성합니다.
ScoreEntry.lua: 플레이어 한 명의 점수를 나타내는 ScoreEntry 클래스를 만듭니다. 각 항목에는playerName과score가 있습니다."{playerName}: {score} points"형식의 문자열을 반환하는:getInfo()메서드를 포함하세요. 여기서 핵심 기능은__lt메타메서드입니다.a < b는a의 점수가b의 점수보다 낮을 때true가 되어야 합니다. 이는 숫자에서<가 작동하는 방식과 같습니다.Leaderboard.lua: 점수 항목 모음을 관리하는 Leaderboard 클래스를 만듭니다. 순위표에는 다음 기능이 필요합니다.:addEntry(entry): ScoreEntry를 내부 목록에 추가합니다.:sort():table.sort를 사용해 점수가 높은 항목부터 낮은 항목 순으로 정렬합니다. 기본적으로table.sort는 가장 작은 항목을 먼저 배치하므로, 순서를 뒤집는 비교 함수를 전달하세요.function(a, b) return b < a end. 이 비교에서도__lt를 사용합니다.:display(): 각 항목의 정보를 한 줄씩 출력합니다.
main.lua: 모든 것을 하나로 모읍니다! Leaderboard를 만들고, 받은 입력을 바탕으로 점수 항목을 추가한 다음, 순위표를 정렬하고 결과를 표시하세요.
<로 두 항목을 비교하면 __lt 메타메서드가 호출되므로, table.sort는 ScoreEntry 객체를 정렬할 수 있습니다. __lt는 “보다 작음”이라는 의미로 유지하고 정렬 호출에서 순서를 뒤집으세요. __lt가 “보다 큼”을 의미한다면 프로그램 어디에서든 두 항목에 <를 적용했을 때 결과가 반대로 해석될 수 있습니다.
플레이어 세 명을 나타내는 입력 여섯 개가 주어집니다.
- 첫 번째 플레이어의 이름
- 첫 번째 플레이어의 점수(숫자)
- 두 번째 플레이어의 이름
- 두 번째 플레이어의 점수(숫자)
- 세 번째 플레이어의 이름
- 세 번째 플레이어의 점수(숫자)
메인 파일에서 순위표를 만들고 세 항목을 모두 추가한 다음, :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: 새 Leaderboard 생성하기
-- TODO: 각 플레이어의 ScoreEntry 객체 생성하기
-- TODO: 세 항목을 모두 리더보드에 추가하기
-- TODO: 리더보드 정렬하기
-- TODO: 정렬된 결과 표시하기
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러