카테고리 없음

본 캠프 14일 차_Flutter 학습 /네트워킹 +과제 제출(RPG Game)

개발일지27 2025. 3. 20. 21:04

월급 계산기

  1. Employ class 만들기
    1. 속성
      1. name : 이름
      2. salary : 급여(기본)
      3. overtime : 야근시간
      4. vacation : 기본 휴가 (기본적으로 지급 받은)
    2. 기능
      1. getSalary : 월급 계산 ← 기본급 + 추가 수당
      2. overtimeSalary : 야근 수당 지급 ← 야근 수당 시간당 5만원
      3. remainVacation : 남은 휴가 가치 계산 ← 휴가 하루당 10만원 환급
  2. trump 의 3월 월급을 계산하자
    1. 기본급 250만원, 야근 20시간
    2. 기본적으로 1년에 20일 부여 받음, 5일 사용

######

class Employ {
  String name;
  int salary;
  int overtime;
  int vacation;

  Employ(this.name, this.salary, this.overtime, this.vacation);

  void getSalary() {
    int ad = salary + overtimeSalary();     //월급 계산,기본급+ 추가수당
    print(ad);
  }

  int overtimeSalary() {
    return overtime * 500000;               //야근수당 지급, 시간당 5만원
  }

  int remainVacation() {
    return (20 - vacation) * 100000;            //휴가 가치 계산, 휴가 하루당 10만원 환급
  }
}

void main() {
  Employ employ = Employ('Trump', 250, 20, 20);                       ¯ࡇ¯  
  employ.getSalary();                          //객체 생성                                                     ¯ࡇ¯ 
  employ.overtimeSalary();
  employ.remainVacation();

  print('Trump의 3월 월급을 계산하자');
  print('기본급 ${employ.salary}원');
  print('야근 수당: ${employ.overtimeSalary}원');
  print('휴가 수당: ${employ.remainVacation}원');
}

 

 

import 'dart:io';
import 'dart:math';




class Game{
Character character;
List<Monster> monsters =[];
int defeatMonster =0;
 
Game(this.character,this.monsters);
 

void startGame(){
 
while(character.health >0 && monsters.isNotEmpty ){
battle();
 
if (monsters.isEmpty || character.health <= 0) break;
print('다음 몬스터와 대곃하시겠습니까? (y/n)');
if (stdin.readLineSync()?.toLowerCase() != 'y') break;
 
 
}
}



void battle(){
Monster monster = getRandomMonster();
print('\n${monster.name}와(과)의 전투가 시작됩니다!');
while(monster.health >0 && character.health>0){
character.showStatus;
monster.showStatus;
stdout.write('행동을 선택하세요 1: 공격, 2:방어');
String? action =stdin.readLineSync();
 
if(action =='1'){
character.attackMonster(monster);
}else{
character.defend(monster.attackPower);
}
 
}
if (character.health > 0) {
print('${monster.name}을 물리쳤다!');
monsters.remove(monster);
defeatMonster++;
}

}
void endGame() {
// 캐릭터의 체력이 0보다 크면 승리, 아니면 패배
String result = character.health > 0 ? '승' : '패';
print('Game Over! $result');

// 결과를 저장할지 사용자에게 질문
print('결과를 저장하시겠습니까? (y/n)');
String? choice = stdin.readLineSync();

// 사용자가 'y'를 입력하면 파일에 저장
if (choice?.toLowerCase() == 'y') {
File('result.txt').writeAsStringSync('${character.name},${character.health},$result');
print('Result saved.');
}
}
}

class Character{
String name;
int health;
int attackPower;
int defense;
 
Character(this.name, this.health, this.attackPower, this.defense);
 
 
void attackMonster(Monster monster){
int damage = max(attackPower-monster.defense,0); //음수가 되면 안되는 코드
monster.health -= damage; // monster health-damage
print('$name(가) ${monster.name}에게 $damage의 데미지를 입혔습니다.');
 
}
void defend(){
 
int plusDefense= 0;
plusDefense= Random().nextInt(health+1);
print('$name(이)가 방어테세를 취하여 $plusDefense 만큼 회복하였습니다. ');
character.health += plusDefense; //몬스터 데미지만큼 고려해서 다시하기
 
}
 
void showStatus(){
print('$name -체력:$health,공격력: $attackPower, 방어력: $defense');
}
}

class Monster{
String name;
int health;
int maxAttackRange;
int defense = 0;
 
Monster(this.name, this.health, this.maxAttackRange)
attackPower =Random().nextInt(maxAttackRange + 1);
 
 
 
 
void attackCharacter(Character character){
int damage = max(attackPower - character.defense,0);
character.health-= damage;
print('$name(이)가 ${character.name}에게 $damage의 데미지를 입혔습니다');
 
}
void showStatus(){
print('$name -체력:$health -공격력:$maxAttackRange');
 
}
}

Character loadCharacterStats() {
try {
final file = File('characters.txt');
final contents = file.readAsStringSync().trim();
final stats = contents.split(',');
if (stats.length != 3) throw FormatException('Invalid character data');

int health = int.parse(stats[0]);
int attack = int.parse(stats[1]);
int defense = int.parse(stats[2]);

// 사용자로부터 캐릭터 이름 입력받기
String name;
RegExp regex = RegExp(r'^[a-zA-Z가-힣]+$');

do {
stdout.write('캐릭터의 이름을 입력하세요: ');
name = stdin.readLineSync() ?? '';
if (!regex.hasMatch(name)) {
print('이름에는 한글 또는 영문만 포함될 수 있습니다.');
}
} while (!regex.hasMatch(name));

return Character(name, health, attack, defense);
} catch (e) {
print('캐릭터 데이터를 불러오는 데 실패했습니다: $e');
exit(1);
}
}


List<Monster> loadMonsterStats(){ //void loadMonsterStats()
 
List<Monster> monsterList = [];
 
try {
final file = File('monsters.txt');
final lines = file.readAsLinesSync();
 
for (var line in lines) {
final stats = line.split(',');
if (stats.length != 3) constinue;
 
String name = stats[0];
int health = int.parse(stats[1]);
int maxAttack = int.parse(stats[2]);
 
monsterList.add(Monster(name, health, maxAttack));
}
} catch (e) {
print('몬스터 데이터를 불러오는데 실패했습니다: $e');
exit(1);
}
}


void main() {
Character character = loadCharacterStats();
List<Monster> monsters = loadMonsterStats();
Game game = Game(character, monsters);
game.startGame();
}