신입 개발자 공부 과정

12/30 수업 스타크래프트 부대지정 본문

C#/수업 내용

12/30 수업 스타크래프트 부대지정

Lewisjkim 2021. 12. 30. 21:31

메서드

배열 하고

매개변수

Q1.

스타크래프트 부대지정 마린 3마리를 생성한다 각 마린의 이름은 고유하다 ex)홍길동, 임꺽정, 장길산 ... 마린 3마리를 부대지정한다 부대 지정한 마린 3마리의 이름을 출력한다

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    class Program
    {
        static void Main(string[] args)
        {
            Marine marine1 = new Marine("홍길동");
            Marine marine2 = new Marine("철수철수");
            Marine marine3 = new Marine("돌쇠");

            MarineGroup group = new MarineGroup();
            //MarineGroup인스턴스가 만들어지고 
            //Marine 타입의 배열 인스턴스가 만들어지고 
            //배열에는 12개의 null이 들어가있는 상황 
            
            group.AddMarine(marine1);   //한마리를 넣을라고 한다 
            //배열의 0번째 인덱스에 넣어야 한다 

            group.AddMarine(marine2);   //인덱스 1에 들어갈것이다 


            group.AddMarine(marine3);   //인덱스 2에 들어갈것이다 



            //group.AddMarine(marine2);
            //group.AddMarine(marine3);

            //int count = group.GetMarineCount();
            //Console.WriteLine(count);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    class Marine
    {
        public string name;

        //생성자
        public Marine(string name)
        {
            this.name = name;
        }

        
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    class MarineGroup
    {
        private const int MAX_COUNT = 12;
        private Marine[] marines;
        private int x = 0;
        //생성자
        public MarineGroup()
        {
            this.marines = new Marine[MAX_COUNT]; //배열 marines에 그루핑 한다

            //타입, 클래스 잘몰라요... <--- 클래스를 공부하세요 

            //배열에는 어떤 값이 들어있을까...?
            //[0] : null
            //[1] : null 
            //[2] : null
            //...
            //[11] : null

            //Why? : marines (Marine타입 들어갈수 있는 배열 인스턴스)
            //[0] ... [11] <---- 들어갈수 있는 타입은 Marine 타입 
            //Marine 타입은 클래스 
            //클래스는 참조형식 
            //모든 참조형식의 기본값은 null
            


        }

        public int GetMarineCount() //카운트가 계속 안되고 있습니다 네
        {
            int count = 0;
            for(int n = 0; n<this.marines.Length; n++)
            {
                if(this.marines[n] != null)
                {
                    count++;
                }
            }
            return count;
        }

        //마린 한마리를 매개변수로 받아서 배열에 넣는 메서드 
        //메서드 매개변수, 배열 공부하세요 
        int index = 0;  //매서드가 호출될때마다 index의 값이 0으로 초기화 되기 때문에 
        public void AddMarine(Marine marine)
        {
            if (this.index > this.marines.Length - 1)
            {
                Console.WriteLine("더이상 넣을수 없습니다.");
            }
            else 
            {
                
                this.marines[index] = marine;//배열에다가 넣어야 한다 
                                             //인덱스가 변해야 한다 (변수)

                Console.WriteLine("현재 인덱스 : {0}, 마지막 인덱스 : {1}", this.index, this.marines.Length - 1);

                index++;

            }
            


            //배열의 인덱스는 마린을 넣을때마다 1씩 증가 되어야 하며 
            //최대 12마리까지 넣을수 있음으로 
            //(배열의 길이 - 1) : 배열의 마지막 인덱스
            //배열의 마지막 인덱스 까지만 증가시켜야 한다 (배열의 마지막 인덱스 : 11)






            //if(this.marines != null)
            //{
            //    for(int n=0; n<)//뭐가 문제인가요? 네
            //    this.marines[x] = marine;// 잠시만요
            //    Console.WriteLine("{0}이(가) 추가되었습니다.", marine.name);
            //}
        }

    }
}

Q2.

Enum을 사용해서 UnityType을 정의하세요

유닛 타입은 MARINE과 MEDIC 이 있습니다

GetUnitCount(): 그룹에 속한 모든 유닛의 갯수 (마린과 메딕)

GetMarines() : 그룹에 속한 모든 마린들만

GetMedics() : 그룹에 속한 모든 메딕들만

PrintAllUnits() : 다음과 같이 출력 될수 있도록

ex)

유닛의 타입 : MARINE, 유닛 이름 : 홍길동

유닛의 타입 : MARINE, 유닛 이름 : 임꺽정

유닛의 타입 : MARINE, 유닛 이름 : 장길산

유닛의 타입 : MEDIC, 유닛 이름 : 또치

유닛의 타입 : MEDIC, 유닛 이름 : 둘리

------------------------

모르는 부분

-get set 접근자 42강

속성에 접근자를 사용하여 값을 설정하거나 가져오는 기능

class Car
{
	private string name;
    public string Name
    {
    	get
        {
        	reutrn name;
        }
        set
        {
        	name = value;
        }
    }
}

-업캐스팅

인스턴스 타입을 파생 클래스 타입에서 기본 클래스 타입으로 변환하는 방법

TerranUnit unit = new Marine();

-다운캐스팅(명시적)

인스턴스 타입을 기본 클래스 타입에서 파생 클래스 타입으로 변환하는 방법

Marine marine = (Marine)unit;