๐ฏ ์ค๋์ ์์นจ์ ์ฝ๋ฉ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ปค๋ฆฌ์ด ์ธ์
๊ฐ์์ ์ด์ด ํ์์ดํ ์ด๋ ฅ์ ์์ฑ ์๊ฐ์ด ์์๋ค.
๊ทธ ํ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฐ์ธ ๊ณผ์ ๋ฅผ ์งํํ๋ค.
โ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋จ์ด ๊ธธ์ด ๊ตฌํ๊ธฐ
// solved 1 class Solution { int lengthOfLastWord(String s) { // trim() -> ์ ๋ค์ ๊ณต๋ฐฑ ์ ๊ฑฐ(์ ๊ฑฐ๋ ์ ๋ฌธ์์ด ๋ฐํ) // split(String seperator) -> ๋ฌธ์์ด์์ seperator๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ๋ค. ๋ฐฐ์ด์ด ๋ฐํ๋จ var splitString = s.trim().split(' '); // hello world -> ["hello", "world"] // List.first (List[0]) or List.last( => List[List.length - 1]) return splitString.last.length; } }๐ ๋ค๋ฅธ ์ฝ๋ 1
// solved 2 class Solution { int lengthOfLastWord(String s) { String res = ""; // for (var i = s.length-1; i >=0; i--) { if(s[i]== " " && res.isNotEmpty) return res.length; if(s[i] == " ") { continue; } res+= s[i]; } return res.length; } } // s = " hello world " // i = 6 / s[i] = " " // res = "dlrow" // res.length = 5๐ ๋ค๋ฅธ ์ฝ๋ 2
// solved 3 class Solution { int lengthOfLastWord3(String s) { int length = 0; int i = s.length - 1; // while (i >= 0 && s[i] == ' ') { i--; } while (i >= 0 && s[i] != ' ') { length++; i--; } return length; } }--
๐ญ ์คํ์ ์ด๋ ฅ์ ์์ฑ๊ณผ ๊ด๋ จํ์ฌ, ๊ฐ์๊ฐ ์งํ๋์๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ์ด๋ ฅ์๋ฅผ ์จ๋ณด๋ ์๊ฐ์ ์ ๊น ๊ฐ์ก๋๋ฐ, ์์ง ํ๋ก์ ํธ์๋ ๋ฃ์ ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ๋น์๋์๋ค.
์บ ํ๊ฐ ๋๋๊ณ ๋๋ฉด ํ๋ก์ ํธ์ ์ธ ๋ด์ฉ์ด ๋ง์ด ์๊ธฐ๋ฉด ์ข๊ฒ ๋ค.
๐
data.dartimport 'dart:convert'; import 'dart:io'; import 'package:rpg_game/character.dart'; import 'package:rpg_game/monster.dart'; // ๋ฐ์ดํฐ ๋ก๋ class Load { // ๋ชฌ์คํฐ ํ์ผ ๋ก๋ List<Monster> loadMonster() { final file = File("../assets/monster.csv"); List<String> monsterLine = file.readAsLinesSync(encoding: utf8); // ํ์ผ ์ฌ๋ถ ํ์ธ if (!file.existsSync()) { print("ํ์ผ์ด ์กด์ฌํ์ง ์์ต๋๋ค."); exit(1); } else { List<Monster> monster = []; // ๋ฐ์ดํฐ ๋ฆฌ์คํธ์ ์ถ๊ฐ for (var line in monsterLine) { var parts = line.split(","); monster.add(Monster( name: parts[0], hp: int.parse(parts[1]), attack: int.parse(parts[2]), defense: 0, )); } // ๊ฐ ์ ๋ฌ return monster; } } // ์บ๋ฆญํฐ ๋ฐ์ดํฐ ๋ก๋ Character loadChar() { // } } // ๋ฐ์ดํฐ ์ ์ฅ class Save { void saveData(dynamic result) { // } }๐ฌ ๋จผ์ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋๋ฐ, ์์ง ๊ทธ ๋ฆฌํด๊ฐ์ ๋ฐ๋ ๊ฒ๊น์ง ์๋ฃ๋์ง๋ ์์๋ค.
๊ทธ๋ฆฌ๊ณfile.readAsLinesSync(encoding: utf8)์ฝ๋๋ก ํ์ค์ฉ ์ฝ๊ณ , ํ๊ธ์ด ๊นจ์ง์ง ์๋๋ก ์ธ์ฝ๋ฉ๊น์ง ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
!file.existsSync()๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋๋ก ์ฒ๋ฆฌํ์๋ค.
๐ฌ ์ฐ์ ๋ชฌ์คํฐ ๋ถ๋ถ๋ง ํด์ฃผ์๋๋ฐ, ๋ฌธ์ ์์ด ๋ก๋ํ๊ณ ์๋ํ๋ ๊ฒ๊น์ง ํ ์คํธ๊ฐ ์๋ฃ๋๋ฉด ์บ๋ฆญํฐ ๋ถ๋ถ๋ ์์ ํด์ค ๊ฒ์ด๋ค.
๐
๊ทธ ์ธ
๐ฌ character, monster, utils ํ์ผ์ ํ๋์ค ์ถ๊ฐ๋ ๊ฒ์ด๋ผ ์๋ตํ๊ฒ ๋ค.
๋จ์ํ ๋ก๋(์คํ๋๋์ง ์ฌ๋ถ ํ์ธ ์ ), ์ฃผ์ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์๋ค.
๐
game.dart// ๊ฒ์ ์์ void startGame() { print("์บ๋ฆญํฐ์ ์ด๋ฆ์ ์ ๋ ฅํ์ธ์ : "); // ๊ฐ์ด ์ ๋๋ก ๋ค์ด์ค๋์ง ๊ฒ์ฆ String? charName = stdin.readLineSync()!; print("๊ฒ์์ ์์ํฉ๋๋ค!"); character.name = charName; character.showStatus(); while (true) { // ๋๋ค ๋ชฌ์คํฐ ์ถํ var randomMonster = getRandomMonster(); monster.remove(randomMonster); // ์ ํฌ ์งํ var result = battle(randomMonster); if (!result) { print("์ฌ๋ง"); break; } // ์ ํฌ ์ฑ๊ณต print("๋ค์ ๋ชฌ์คํฐ์ ๋๊ฒฐํ์๊ฒ ์ต๋๊น? y/n"); // ์ ํฌ ์ง์ ์ฌ๋ถ String? next = stdin.readLineSync()!.trim(); if (next == "N" || next == "n") { break; } else { //battle(); } } String? saveInput = stdin.readLineSync()!.trim(); if (saveInput == "Y" || saveInput == "y") { //save(); } ; }๐ฌ ๊ฒ์ ๋ก์ง์ ์์ฑํ๋ค๊ฐ
battle์ ๋ฐ๋ณต์ ํธํ๊ฒ ํ๊ธฐ ์ํด์ ์์ ์ ๋ฐ๋ก ๋บ๋ค.
์์ ๋์ผํ๊ฒ ๋ฐ์ดํฐ ๋ก๋ ์ฐ์ ์์ ์ ์ํด ํด๋น ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํด๋๊ธด ํ์ง๋ง ์๋ฃ๋์ง ์์๋ค.
// ์ ํฌ ์งํ ๋ก์ง bool battle(Monster monster) { while (true) { // ์บ๋ฆญํฐ ํด print("${character.name}์ ํด"); print("ํ๋์ ์ ํํ์ธ์ (1: ๊ณต๊ฒฉ, 2: ๋ฐฉ์ด) : "); // ํ๋ ๋ถ๊ธฐ String? action = stdin.readLineSync()!.trim(); // ์ ๋ ฅ ๊ฒ์ฆ ๋ฐ ํ๋ ์ถ๋ ฅ bool actionInput = false; while (!actionInput) { if (action == "1") { print( "${character.name}์ด(๊ฐ) ${monster.name}์๊ฒ ${character.attack}์ ๋ฐ๋ฏธ์ง๋ฅผ ์ ํ์ต๋๋ค."); } else if (action == "2") { print("${character.name}์ด(๊ฐ) ๋ฐฉ์ดํ์ธ๋ฅผ ์ทจํ์ฌ 0 ๋งํผ ์ฒด๋ ฅ์ ์ป์์ต๋๋ค."); } else { print("์๋ชป๋ ์ ๋ ฅ์ ๋๋ค. ๋ค์ ์ ๋ ฅํด์ฃผ์ธ์!"); actionInput = true; } } //while (monster.isNotEmpty) {} // ์ ํฌ ์ข ๋ฃ ํ์ธ if (character.hp <= 0) { return false; } else if (monster.hp <= 0) { Monster monsterList = monster; // monsterList.removeAt(index); } // ์ํ ์ถ๋ ฅ character.showStatus(); // return true; // ๋ชฌ์คํฐ ํด print("${monster.name}์ ํด"); print( "${monster.name}์ด(๊ฐ) ${character.name}์๊ฒ ${monster.attack}์ ๋ฐ๋ฏธ์ง๋ฅผ ์ ํ์ต๋๋ค."); } }๐ฌ ์ฌ๊ธฐ์ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ๊ตฌํํ์๊ณ , ๊ทธ ๊ฐ์ ๋ฐ๋ผ์ ํ๋์ ํ๊ฒ ๋ง๋ ๋ค.
๋จ, ๋ฐ์ดํฐ ํ์ผ์ด ์์ด์ผ ์ฝ๋๋ฅผ ํ ์คํธํ๊ธฐ ์ฝ๊ณ , ์ฒด๋ ฅ๊ฐ์ ๋ฅ๋ ฅ์น ๋ณํ๋ฅผ ์์ฑํ๊ธฐ ์ํด ํด๋น ๋ถ๋ถ์ ๋จ๊ฒจ๋์๋ค.
๋ฐ์ดํฐ ๋ก๋ ๋ถ๋ถ์ด ์๋ฃ๋๊ณ ๋๋ฉด ํด๋น ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒ์ด๋ค.
๐ฌ ์ ํฌ ์ ์ฒ์นํ ๋ชฌ์คํฐ๋ ๋ฆฌ์คํธ์์ ์ฌ๋ผ์ง๋๋ก ๊ตฌํํด์ผํ๋ฉฐ, ์ด๋ถ๋ถ์ ์์ง ๋ก๋๋ฌธ์ ๋ก ํ ์คํธ๊ฐ ํ๋ค์ด ์ฃผ์์ผ๋ก ๋จ๊ฒจ๋์๋ค.
import 'dart:math'; . . // ๋๋ค์ผ๋ก ๋ชฌ์คํฐ ์์ฑ Monster getRandomMonster() { print("์๋ก์ด ๋ชฌ์คํฐ๊ฐ ๋ํ๋ฌ์ต๋๋ค!"); var random = Random(); // int index = random.nextInt(monster.length); Monster selecMonster = monster[index]; // selecMonster.showStatus(); return selecMonster; }๐ฌ
random์ ํตํด ๋๋ค์ผ๋ก ๋ชฌ์คํฐ๋ฅผ ์์ฑํ ๊ฒ์ด๊ณ , ์ด๊ฑธindex๋ฅผ ํตํด ์ฒ์น๋๋ฉด ๋ค์ ๋ชฌ์คํฐ๊ฐ ๋์ค๋๋ก ์์ฐจ์ ์ผ๋ก ์งํํ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํดimport 'dart:math';๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅด ์ฌ์ฉํ์๋ค.
๐ญ ๋ฉ์ธ์ ํ ์คํธ๋ก ์ ๊น ์์ฑํด๋๋๋
run์ ํ์ ๋ ๋ฌดํ๋ฐ๋ณต ํ๋ ๊ฒ ์ธ์ ์์ง ํฐ ์ค๋ฅ๋ ๋ฐ์ํ์ง ์์๋ค.
ํ์ง๋ง ์ฝ๋ ์์ฑ ์๋ฃ ์ ์ด๊ณ , ์์ธ ์ฒ๋ฆฌ๊ฐ ๋ง์ด ๋์ด์์ง ์๊ณ , ๋น๋๊ธฐ๋ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฃผ์ํด์ผํ ๊ฒ ๊ฐ๋ค.
โ ๊ธฐ๋ฅ ๊ตฌํ
โ๏ธ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ
โ๏ธ ๋ฐฐํ ๋ก์ง ๊ตฌํ
โ๏ธ ๋๋ค ๋ชฌ์คํฐ ์คํฐ ๊ตฌํ ์๋ฃ
โ๏ธ ๋ฐ์ดํฐ ๋ก๋ ๊ธฐ๋ฅ
๐ฑ ์ค๋์ ๊ธฐ๋ฅ ๊ตฌํ ์์ฃผ๋ก ๊ณผ์ ๋ฅผ ์งํํ์๋ค.
ํฌ๊ฒ ์
์ถ๋ ฅ ๊ธฐ๋ฅ๊ณผ ๋ฐฐํ ๋ก์ง ๊ตฌํ, ๋๋ค ๋ชฌ์คํฐ ์คํฐ ๊ตฌํ์๋ฃ, ๋ฐ์ดํฐ ๋ก๋ ๊ธฐ๋ฅ ์งํ์ค์ด๋ค.
๋ํ ์ผํ๊ฒ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ๊ฒ๋ค์ ์ธ์ธํ๊ฒ ์ธ ์ ์์ด ํฐ ๊ธฐ๋ฅ๋ณ๋ก ์ ๋ฆฌํ์ฌ ์ปค๋ฐํ์๋ค.
์ด์ ํ์ตํ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๋์ถฉ ๊ตฌ์ํ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ค๋์ ์์ ์ ์งํํ์ฌ์ ๋ฐ์ดํฐ ๋ก๋ ์ธ์๋ ํฌ๊ฒ ๋งํ๋ ๋ถ๋ถ์ ์์๋ค.
๋ฐ์ดํฐ ๋ก๋๋ ํ๊ธด ํ๋๋ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๊ณ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ ๋ค์ ๋ชฌ์คํฐ์ ๋ฃ๊ธฐ๊น์ง๊ฐ ์ข ๊ฑธ๋ฆด ๋ฟ์ด๋ค. ํ ์คํธ ์ ์ด๊ธด ํ์ง๋ง ์ด ๋ชฌ์คํฐ์ ๋ฃ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ํด์ผ๋๋ ์ถ์ด์ ์๋ถ๋ถ์ด ๋ฌธ์ ๋ค.
๐ ๋ด์ผ์ ์ฐ์ ํ์ ๊ธฐ๋ฅ ์๋ฃ๋ฅผ ๋ชฉํ๋ก ์์
ํด์ผ๊ฒ ๋ค.
๋์ผํ๊ฒ ๊ธ์์ผ ์ค์ ์๋ ๋์ ๊ธฐ๋ฅ์ ์กฐ๊ธ ์ถ๊ฐํด๋ณธ๋ค๋๊ฐ... ์๋๋ฉด ํ์ ๊ธฐ๋ฅ์ด ๋๋๋ฉด ๋์ ๊ณผ์ ๋ฅผ ์์ํด๋ณผ์๋ ์๊ฒ ๋ค.
๊ทผ๋ฐ ์ ๋ถ๋์ด ํ์ฐธ ๋จ์๊ฑฐ ๊ฐ์์ง ์งํ๋๋ฅผ ๊ฐ๋ ์ ๋ชปํ๊ฒ ๋ค.
ํ ์์
์ด ๋นจ๋ฆฌ ๋๋ ์๋ ์๊ณ ๋ฆ๊ฒ ๋๋ ์๋ ์์ด์ ์ด๊ฒ ์๊ฐ ๋ถ๋ฐฐ๊ฐ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค.