반응형
SMALL
App단
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study04
{
class App
{
//생성자
public App()
{
//시나리오 1 : 드론이 광물이 바닥날때까지 캔다 (광물 자원 -5)
Drone dorne0 = new Drone("드론1호",40,5, 2.344f);
Mine mine = new Mine(100);
dorne0.Mining(dorne0);
for(int i = 0;i <20; i++)
{
mine.Mining();
}
//시나리오 3 : 고스트가 생성되고 드론을 공격한다
Ghost ghost0 = new Ghost("고스트1호", 45, 10);
ghost0.Attack(ghost0, ghost0);
dorne0.Hit(dorne0, ghost0);
//시나리오 4 : 드론이 반격한다
dorne0.Attack(dorne0, dorne0);
ghost0.Hit(ghost0, dorne0);
//시나리오 5 : 고스트가 드론에게 락다운을 시전한다.
ghost0.Lockdown(ghost0, dorne0);
dorne0.Lockdown(dorne0);
dorne0.speed = dorne0.speed - 2.344f;
dorne0.Move(dorne0);
//시나리오 6 : 드론이 고스트의 지속적인 공격을 받고 죽는다.
for (int i = 0; i < 3; i++)
{
ghost0.Attack(ghost0, ghost0);
if (dorne0.hp > 0)
{
dorne0.Hit(dorne0, ghost0);
}
}
}
}
}
고스트
고스트
---------
체력 : 40
공격력 :5
-----------
공격 및 락다운(스킬) 사용 가능
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study04
{
class Ghost
{
public string name;
public int hp;
public int maxHp;
public int pow;
//생성자
public Ghost(string name, int hp , int pow)
{
this.name = name;
this.maxHp = hp;
this.hp = maxHp;
this.pow = pow;
}
public void Move(Ghost name)
{
Console.WriteLine("{0}을(를) 움직입니다.",name);
}
public void Attack(Ghost name, Ghost pow)
{
Console.WriteLine("{0}이(가) 공격합니다.", name.name);
Console.WriteLine("데미지 : -{0}", pow.pow);
}
public void Hit(Ghost name,Drone pow)
{
if(hp > 0)
{
hp = maxHp - pow.pow;
Console.WriteLine("{0}이(가) 데미지{1}를 받았습니다.", name.name, pow.pow);
Console.WriteLine("남은체력 {0}/{1}.", hp, maxHp);
}
else if (hp >= 0)
{
hp = 0;
Console.WriteLine("{0}이(가) 죽었습니다..", name.name);
Console.WriteLine("남은체력 {0}/{1}.", hp, maxHp);
}
}
public void Lockdown (Ghost name, Drone target)
{
Console.WriteLine("{0}(이)가 {1}에게 락다운을 시전하였습니다.",name.name, target.name);
}
}
}
드론
고스트
---------
체력 : 45
공격력 :10
이동 속도 : 2.344f
-----------
광물 채취 및 공격 가능
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study04
{
class Drone
{
public string name;
public int hp;
public int maxHp;
public int pow;
public float speed;
//생성자
public Drone(string name, int hp, int pow, float speed)
{
this.name = name;
this.maxHp = hp;
this.hp = maxHp;
this.pow = pow;
this.speed = speed;
}
public void Move(Drone name)
{
if(speed == 0)
{
Console.WriteLine("{0}은(는) 락다운에 걸려 움직일수 없습니다..", name.name);
}
else
Console.WriteLine("{0}을(를) 움직입니다.", name.name);
}
public void Attack(Drone name, Drone pow)
{
Console.WriteLine("{0}이(가) 공격합니다.", name.name);
Console.WriteLine("데미지 : -{0}", pow.pow);
}
public void Hit(Drone name, Ghost pow)
{
hp = hp - pow.pow;
if (hp > 0)
{
Console.WriteLine("{0}이(가) 데미지{1}를 받았습니다.", name.name, pow.pow);
Console.WriteLine("남은체력 {0}/{1}.", hp, maxHp);
}
else if (hp <= 0)
{
hp = 0;
Console.WriteLine("{0}이(가) 죽었습니다..", name.name);
Console.WriteLine("남은체력 {0}/{1}.", hp, maxHp);
}
}
public void Mining(Drone name)
{
Console.WriteLine("{0}이 광물을 채취합니다.", name.name);
}
public void Lockdown (Drone name)
{
Console.WriteLine("{0}은(는) 움직일 수 없습니다..", name.name);
}
}
}
광물
광물
---------
최대 광물량 : 100(임의)
-----------
광물 채취시 광물의 최대 자원량 감소
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study04
{
class Mine
{
public int maxMinenum;
public int minenum;
//생성자
public Mine(int num)
{
this.maxMinenum = num;
this.minenum = maxMinenum;
}
public void Mining()
{
minenum = minenum - 5;
if (minenum > 0)
{
Console.WriteLine("마인을 채취하였습니다.");
Console.WriteLine("남은 자원량 :{0}/{1}", minenum, maxMinenum);
}
else if (minenum <= maxMinenum)
{
minenum = 0;
Console.WriteLine("더이상 자원을 채취할수 없습니다.");
Console.WriteLine("남은 자원량 :{0}/{1}", minenum, maxMinenum);
}
}
}
}
결과물
상황극 위주로 생각하다보니 유니버셜하게 유기적으로 서로 상호작용하는 클래스들을 짜게 되었고 시간이 부족하더라..
고민되는 부분은 핵 공격 (본인을 포함하여 일정 범위 안에 있는 유닛을 전부 죽일수 있는 기능을 어떻게 구현할 것인가 였다.
바꾸고자 하는 부분은
- enum을 사용하여 lockdown에 사용해보기
- 고스트의 은폐 핵 공격 구현하기
- 좀더 상황극과 관련없는 기능들을 배제하고 상황극에 맞는 기능을 먼저 구현한 뒤 그 안에 필요한 생성자 메서드 구현 혹은 클래스 타입 작성하기.
반응형
LIST
'C# > 수업 과제' 카테고리의 다른 글
List<T> 와 프로퍼티, 상속을 이용한 인벤토리 과제 (0) | 2023.01.10 |
---|---|
인벤토리 만들기 (클래스 배열 이용) (0) | 2023.01.09 |
라바 to 히드라 to 럴커(클래스 메서드 사용) (0) | 2023.01.05 |
캐릭터 Class 만들어오기 (0) | 2023.01.04 |
레벨업 과제 ( 메서드 ) (0) | 2023.01.03 |