[25.07.01 TIL] 개인 과제

κΉ€μ˜λ―ΌΒ·2025λ…„ 7μ›” 1일

🎯 μ˜€λŠ˜μ€ 아침에 μ½”λ”© μ•Œκ³ λ¦¬μ¦˜μ„ ν•œλ²ˆ 더 해석해보고, 개인 과제λ₯Ό 본격적으둜 μ‹œμž‘ν–ˆλ‹€.
심화 κ³Όμ œλ‹€ λ³΄λ‹ˆ λ‚΄μš©μ΄ μ’€ μ–΄λ €μ›Œμ„œ μš°μ„  기반 μž‘μ—…μ„ μ§„ν–‰ν•˜λ©΄μ„œ μ‘°κΈˆμ”© μΆ”κ°€ν•˜λŠ” λŠλ‚ŒμœΌλ‘œ ν–ˆλ‹€.


⏰ 아침에 μ½”λ”©

βœ… ν”ΌλΌλ―Έλ“œ*

void main() {
  int rows = 5; // 개수
  for (var i = 1; i <= rows; i++) {
    var space = " "*(rows-i);
    var star = "*"*(i*2-1);
    print(space + star);  
  }
}

πŸ‘‰ λ‹€λ₯Έ μ½”λ“œ

pyramidOne() {
  int rows = 5; // ν”ΌλΌλ―Έλ“œ ν–‰ 수
  for (int i = 1; i <= rows; i++) {
    String spaces = '';
    String stars = '';
//    
    for (int j = 1; j <= rows - i; j++) {
      spaces += ' ';
    }    
    for (int k = 1; k <= 2 * i - 1; k++) {
      stars += '*';
    }    
    print('$spaces$stars');
  }
}

βœ… 2차원 λ°°μ—΄μ˜ λŒ€κ°μ„  ν•© κ΅¬ν•˜κΈ°

void main() {
  List<List<int>> matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ];
  matrixsquare(matrix);
}
void matrixSquare(List<List<int>> matrix) {
  int sumLeft = 0;   // μ™Όμͺ½ λŒ€κ°μ„ 
  int sumRight = 0;  // 였λ₯Έμͺ½ λŒ€κ°μ„ 
// μ™Όμͺ½ λŒ€κ°μ„    : (0,0), (1,1), (2,2)
// 였λ₯Έμͺ½ λŒ€κ°μ„  : (0,2), (1,1), (2,0)
  int n = matrix.length;
  for (int i = 0; i < n; i++) {
    sumLeft += matrix[i][i];             // μ™Όμͺ½ λŒ€κ°μ„ 
    sumRight += matrix[i][n - i - 1];    // 였λ₯Έμͺ½ λŒ€κ°μ„ 
  }
  print('μ™Όμͺ½ λŒ€κ°μ„  ν•©: $sumLeft');
  print('였λ₯Έμͺ½ λŒ€κ°μ„  ν•©: $sumRight');
}

πŸ‘‰ λ‹€λ₯Έ μ½”λ“œ

matrixSquare() {
  List<List<int>> matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
  ];
//
  int sumLeft = 0;
  int sumRight = 0;
//  
  for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix.length; j++) {
      if (i == j) {
        sumLeft += matrix[i][j];
      }
//
      if (i+j == 2) {
        sumRight += matrix[i][j];
      }
    }
  }
  print('Left: $sumLeft ,  Right: $sumRight');
}

πŸ₯½ 개인 과제

πŸ“ test 폴더 ꡬ쑰 λ³€κ²½

test/
 β”œβ”€β”€ character_test.dart
 β”œβ”€β”€ monster_test.dart
 β”œβ”€β”€ battle_test.dart
 └── data_test.dart

πŸ’¬ μ΄λ ‡κ²Œ μ„ΈλΆ„ν™”ν•˜λŠ”κ²Œ ν…ŒμŠ€νŠΈν•˜κΈ° μ’‹λ‹€κ³  νŒλ‹¨ν•΄μ„œ λ‚˜λˆ μ„œ ν•΄λ³Ό μ˜ˆμ •μΈλ° ν•„μš”μ—†μœΌλ©΄ μ‚­μ œ 및 톡합할 것


πŸ‘©β€πŸ’» 기반 μž‘μ—…

πŸ“ utils.dart

abstract class Utils {
  String name = "";
  int hp = 0;
  int attack = 0;
  int defense = 0;
  // Utils μƒμ„±μž
  Utils({
    required this.name,
    required this.hp,
    required this.attack,
    required this.defense,
  });
  // μƒνƒœμ°½ 좜λ ₯
  void showStatus();
}

πŸ’¬ character 와 monster 의 κ³΅ν†΅λœ 속성과 λ©”μ„œλ“œλ₯Ό 상속받아 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ abstract 좔상 클래슀λ₯Ό μƒμ„±ν•œλ‹€.

값을 λ°›μ•„μ™€μ„œ μ‚¬μš©ν• κ±°κΈ° λ•Œλ¬Έμ— required λ₯Ό μ‚¬μš©ν–ˆμœΌλ©°, this 둜 μ‚¬μš©μ„ λͺ…ν™•ν•˜κ²Œ ν–ˆλ‹€.

character와 monster의 statusλ₯Ό λ³΄μ—¬μ£ΌλŠ” showStatus() λŠ” λΉ„μ›Œλ‘μ–΄ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜κΈ°λ‘œ ν–ˆλ‹€.


πŸ“character.dart

class Character extends Utils {
  Character({
    required super.name,
    required super.hp,
    required super.attack,
    required super.defense,
  });
  void attackMonster(Monster monster) {
    //print("${monster.hp} - ${attack}");
  }
  // λ°©μ–΄
  void defend() {}
//
  
  void showStatus() {
    print("$name - 체λ ₯ : $hp, 곡격λ ₯ : $attack, λ°©μ–΄λ ₯ : $defense");
  }
}

πŸ’¬ Utils 클래슀λ₯Ό 상속 λ°›κ²Œ ν–ˆκ³ , λ™μΌν•œ 속성을 μ§€λ‹Œλ‹€.

attackMonster 뢀뢄도 μΆ”μƒν΄λž˜μŠ€λ‘œ λΊ„ 수 μžˆμ§€λ§Œ λ”°λ‘œ λ©”μ„œλ“œλͺ…이 λͺ…μ‹œλ˜μ–΄ 있기 λ•Œλ¬Έμ— λΉΌμ§€λŠ” μ•Šμ•˜λ‹€.


πŸ“monster.dart

class Monster extends Utils {
  Monster({
    required super.name,
    required super.hp,
    required super.attack,
    required super.defense,
  });
//
  void attackCharacter(Character character) {}
//
  
  void showStatus() {
    print("$name - 체λ ₯ : $hp, 곡격λ ₯ : $attack");
  }
}

πŸ’¬ λ™μΌν•˜κ²Œ μž‘μ—…ν–ˆμœΌλ©°, showStatus() 만 μž¬μ •μ˜ ν•΄μ£Όμ—ˆλ‹€.


πŸ“game.dart

class Game {
  Character character;
  List<Monster> monster;
  int defeatedCount;
//
  Game(this.character, this.monster, this.defeatedCount);
  // κ²Œμž„ μ‹œμž‘
  void startGame() {
    print("μΊλ¦­ν„°μ˜ 이름을 μž…λ ₯ν•˜μ„Έμš” : ");
    // 값이 μ œλŒ€λ‘œ λ“€μ–΄μ˜€λŠ”μ§€ 검증
    print("κ²Œμž„μ„ μ‹œμž‘ν•©λ‹ˆλ‹€!");
    character.showStatus();
//
    while (true) {
      // 랜덀 λͺ¬μŠ€ν„° μΆœν˜„
      var randomMonster = getRandomMonster();
      monster.remove(randomMonster);
      // μ „νˆ¬ μ§„ν–‰
      var result = battle(randomMonster);
      if (!result) {
        print("사망");
        break;
      }
      // μ „νˆ¬ 성곡
      print("λ‹€μŒ λͺ¬μŠ€ν„°μ™€ λŒ€κ²°ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?");
      // if (N) {
      //   break;
      // }
    }
    // save();
  }
  // μ „νˆ¬ μ§„ν–‰ 둜직
  bool battle(Monster monster) {
    while (true) {
      // 캐릭터 ν„΄
      print("${character.name}의 ν„΄");
      print("행동을 μ„ νƒν•˜μ„Έμš” (1: 곡격, 2: λ°©μ–΄) : ");
      // 행동 λΆ„κΈ°
      //if (1μž…λ ₯)
      print(
          "${character.name}이(κ°€) ${monster.name}μ—κ²Œ ${character.attack}의 데미지λ₯Ό μž…ν˜”μŠ΅λ‹ˆλ‹€.");
      //else (2μž…λ ₯)
      print("${character.name}이(κ°€) λ°©μ–΄νƒœμ„Έλ₯Ό μ·¨ν•˜μ—¬ 0 만큼 체λ ₯을 μ–»μ—ˆμŠ΅λ‹ˆλ‹€.");
      // if (hp <= 0) {
      //   return false;
      // }
      // μƒνƒœ 좜λ ₯
      character.showStatus();
      // return true;
      // λͺ¬μŠ€ν„° ν„΄
      print("${monster.name}의 ν„΄");
      print(
          "${monster.name}이(κ°€) ${character.name}μ—κ²Œ ${monster.attack}의 데미지λ₯Ό μž…ν˜”μŠ΅λ‹ˆλ‹€.");
    }
  }
  // 랜덀으둜 λͺ¬μŠ€ν„° 생성
  Monster getRandomMonster() {
    print("μƒˆλ‘œμš΄ λͺ¬μŠ€ν„°κ°€ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€!");
    monster[0].showStatus();
    // Random()
    return monster[0];
  }
}

πŸ’¬ μš°μ„  ν† λŒ€ μž‘μ—…μ„ μš°μ„ μœΌλ‘œ ν–ˆκ³ , μ–΄λ–€ ν•¨μˆ˜λ₯Ό μ“Έμ§€, μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ 이것저것 μ¨λ΄μ„œ μ£Όμ„μœΌλ‘œ μ’€ μ½”λ“œκ°€ λ³΅μž‘ν•˜κΈ΄ ν•˜λ‹€.

이건 내일 μž‘μ—…ν•˜λ©΄μ„œ λ‹€ μ—†μ–΄μ§€κ±°λ‚˜ μˆ˜μ •λ  μ˜ˆμ •μ΄λ‹€.


πŸ’¬ battle 이 반볡되기 λ•Œλ¬Έμ— startGame μ—μ„œκ°€ μ•„λ‹Œ battle μ—μ„œ λ°˜λ³΅ν•˜κ²Œ λ§Œλ“€ 것이고, while 을 μ‚¬μš©ν•  μ˜ˆμ •μ΄λ‹€.

bool νƒ€μž…μ„ μ‚¬μš©ν•˜μ—¬ true, falseλ₯Ό λ¦¬ν„΄ν•˜μ—¬ 둜직이 νŒλ‹¨ν•  κΈ°μ€€μœΌλ‘œ μ„Έμš΄λ‹€.


πŸ’¬ 랜덀 λͺ¬μŠ€ν„°λ„ κ΅¬λΆ„ν•˜κ³ , ν•΄μΉ˜μš΄ λͺ¬μŠ€ν„°κ°€ λ‚˜νƒ€λ‚˜μ§€ μ•Šλ„λ‘ ν•΄μ•Όν•œλ‹€.

그리고 각쒅 κ²Œμž„μ’…λ£Œ 상황을 κ΅¬ν˜„ν•΄μ•Όν•˜κ³ , 데이터 읽기와 쓰기도 κΈ°λŠ₯을 μΆ”κ°€ν•΄μ•Όλœλ‹€.

랜덀 ν•¨μˆ˜ μ‚¬μš©ν•˜λŠ” 법도 처음이라 ν•™μŠ΅μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•  것을 μ˜ˆμƒν•΄μ•Ό ν•  것 κ°™λ‹€.


πŸ“main.dart

void main(List<String> arguments) {
  var char = Character(name: "μ—¬κΈ°λ‹€λ„£μœΌμ…ˆ", hp: 0, attack: 0, defense: 0);
  var game = Game(char, [Monster(name: "b", hp: 0, attack: 0, defense: 0)], 0);
  game.startGame();
}

πŸ’¬ 잠깐 ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•œ μ½”λ“œλ‘œ μ΅œμ’… μž‘μ—…λ¬Όμ—μ„œλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” μ •λ„λ§Œ ν•  것이닀.


πŸ“ data.dart

class Data {
//   Map Load() {
//     ('chatet.text');
//  ('monster.text');
//     return {
//       'char' : {
//         'hp' : 5,
//         'dd' : 2
//       },
//       'monster' : {
//           'hp' : 5
//       }
//     };
//   }
//   void save(dynamic result) {
//     File.write()
//     result
//   }
}
class Save {
  // 'hp' : '0',
}

πŸ’¬ 데이터 읽기, 쓰기와 μ €μž₯ν•˜κΈ° κΈ°λŠ₯이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— λŒ€μΆ© 흐름을 νŒŒμ•…ν•˜λ €κ³ .. μ¨μ„œ κ·Έλƒ₯ 주석뿐이닀.

μ‹€μ œλ‘œ λ§žλŠ” ν•¨μˆ˜λ„ μ•„λ‹ˆκ³ , κ·Έλƒ₯ μ–΄λ–€ κΈ°λŠ₯을 ν•΄μ•Όμ§€ μž‘μ„±ν•΄λ‘” 것


🌼 Git Commit

βœ… κ²Œμž„ 기반 μž‘μ—…
βœ”οΈ 클래슀 및 λ©”μ„œλ“œ 생성
βœ”οΈ 둜직 ν† λŒ€ μž‘μ—…


🌱 이 ν† λŒ€ μž‘μ—…μ΄ 생각보닀 λ„ˆλ¬΄... μ–΄λ ΅λ‹€? μ˜€λž˜κ±Έλ¦°λ‹€?

ꡬ상은 ν–ˆμ§€λ§Œ 이걸 μ½”λ“œλ‘œ κ·Έλ €λ‚΄λŠ” 것, 그리고 좔상 클래슀 μ‚¬μš©λ²•, 데이터λ₯Ό λ°›μ•„μ˜€λ €λ©΄ μ–΄λ–€ μ½”λ“œλ₯Ό μ¨μ•Όν•˜λŠ”μ§€ λ“± μ‹ κ²½μ“Έκ²Œ λ§Žμ•˜λ‹€.

그리고 λ§₯을 μ‚¬μš©ν•˜λ‹ˆκΉŒ μ•½κ°„ κ°™μ§€λ§Œ λ‹€λ₯Έ λŠλ‚Œμ΄... μž‘μ—…μ— μ’€ 걸렸던 것 같기도 ν•˜κ³  μ•„λ¬΄λž˜λ„ λ…ΈνŠΈλΆμ΄λ‹ˆκΉŒ 화면이 μž‘μ•„μ„œ λΆˆνŽΈν•œ 감은 μžˆμ—ˆλŠ”λ° μ’€ 더 μœ μ—°ν•œ ν™˜κ²½μ—μ„œ μž‘μ—…ν•  수 μžˆμœΌλ‹ˆ μ’‹μ•˜λ‹€.

ν•™μŠ΅ν•˜λŠ”λ° μƒλ‹Ήνžˆ μ‹œκ°„μ΄ κ±Έλ ΈλŠ”λ°, μ™œ μ•ˆλ˜λŠ”μ§€λ‚˜ 였λ₯˜κ°€ μ™œ 생기지 근데 ν•œλ²ˆ μ•Œκ³ λ‚˜λ‹ˆκΉŒ 이 TIL에 μ“Έ λ‚΄μš©μ΄ λ³„λ‘œ μ—†μ„μ •λ„λ‘œ? 뭘 λͺ°λžλŠ”μ§€ 생각이 μ•ˆλ‚ μ •λ„λ‘œ 이해λ₯Ό ν•΄μ„œ κ·Έλƒ₯ κ°„λ‹¨ν•˜κ²Œ μ™œ μ΄λ ‡κ²Œ κ΅¬ν˜„ν–ˆλŠ”μ§€λ§Œ μž‘μ„±ν–ˆλ‹€.


πŸš€ μ§„μ§œ λ„ˆλ¬΄.. λ§‰λ§‰ν–ˆλŠ”λ° μ°¨κ·Όμ°¨κ·Ό ν•™μŠ΅ν•˜λ‹ˆκΉŒ λ˜λŠ” 것 같기도 ν•˜κ³ ... 아직 κΈ°λŠ₯ κ΅¬ν˜„μ€ μ œλŒ€λ‘œ λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 내일 더 μ—΄μ‹¬νžˆ 해봐야겠닀.

써둔 둜직만 κ·ΈλŒ€λ‘œ μˆ˜ν–‰ν•  수 μžˆλ‹€λ©΄ 내일 거의 완성을 ν•˜κ³ , λͺ©μš”일에 도전 과제λ₯Ό μ‹œλ„ν•΄λ³Ό 수 μžˆμ§€ μ•Šμ„κΉŒ μ‹Άλ‹€.

도전 과제 슬쩍 λ³Έκ²ƒλ§ŒμœΌλ‘œλŠ” μΆ”κ°€ν•˜κ±°λ‚˜ κ³ μΉ˜κ±°λ‚˜ ν•  것이 μ’€ λ˜λŠ” 것 κ°™μ•„μ„œ 벌써 κ±±μ •μ΄μ§€λ§Œ 아직 ν•„μˆ˜ κ³Όμ œλ„ λͺ»ν–ˆκΈ° λ•Œλ¬Έμ— 걱정은 λ‚˜μ€‘μœΌλ‘œ 미뀄야지.

profile
πŸ’» [25.05.26~] Flutter 곡뢀쀑⏳

0개의 λŒ“κΈ€