유니티3D 프로그래밍

C# 1주차 2일 연습 과제 (21.03.09) 본문

C#/수업과제

C# 1주차 2일 연습 과제 (21.03.09)

tjdgus9955 2021. 3. 9. 16:54

1. 템플러와 지짐이

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

namespace Study01
{
    class Program
    {
        static void Main(string[] args)
        {
            string templer = "템플러";
            int templerMaxEnergy = 200;
            int templerEnergy = 10;
            int energyCharge = 10;

            string templerSkill = "지짐이";
            int skillNeedEnergy = 75;

            Console.WriteLine("{0}가 생성되었습니다.", templer);
            Console.WriteLine("에너지 {0}/{1}", templerEnergy, templerMaxEnergy);
            Console.WriteLine();

            Console.WriteLine("{0} {1} 정보", templer, templerSkill);
            Console.WriteLine("필요 에너지 : {0}", skillNeedEnergy);
            Console.WriteLine();

            for(int x = 0; x < 4; x++)
            {
                if (templerEnergy < skillNeedEnergy)
                {
                    Console.WriteLine("{0}가 {1}를 시도 합니다.", templer, templerSkill);
                    Console.WriteLine("에너지가 부족합니다.");
                    Console.WriteLine();

                    for (int i = 0; ; i++)
                    {
                        templerEnergy += energyCharge;
                        Console.WriteLine("에너지가 충전되었습니다. ({0}/{1})", templerEnergy, templerMaxEnergy);
                        if(templerEnergy >= templerMaxEnergy)
                        {
                            templerEnergy = templerMaxEnergy;
                        }

                        if (templerEnergy == templerMaxEnergy)
                        {
                            break;
                        }
                    }
                    Console.WriteLine();
                }
                else
                {
                    
                    Console.WriteLine("{0}가 {1}를 시도합니다.", templer, templerSkill);
                    templerEnergy -= skillNeedEnergy;
                    Console.WriteLine("{0}가 지졌습니다.", templer);
                    Console.WriteLine("에너지 ({0}/{1})", templerEnergy, templerMaxEnergy);
                }
            }
        }
    }
}

n번의 반복문을 통해 if문으로 에너지 부족 유무를 체크하고
에너지가 부족하다면 for문을 사용해서 에너지를 채운다.
에너지를 풀로 채우고 if문 내부의 반복문에서 빠져나와 스킬을 사용한다.
n번의 반복문이 끝날 때까지 위 과정을 반복한다.

 

2. 캐논

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            string cannon = "캐논";
            int cannonAttackRange = 6;
            int cannonDamage = 20;

            string enemy = "적";
            int enemyMaxHp = 50;
            int enemyHp = enemyMaxHp;
            int enemyCount = 0;

            Console.WriteLine("{0}을 설치합니다.", cannon);
            Console.WriteLine();
            for(int i = 0; i < 5; i++)
            {
                Console.WriteLine("{0}_{1}이 생성됩니다.", enemy, i+1);
                enemyCount++;
            }
            Console.WriteLine();
            Console.WriteLine("{0}이 {1}의 범위 안에 들어옵니다. {2}", enemy, cannon, cannonAttackRange);
            Console.WriteLine();

            while(enemyCount != 0)
            {
                enemyHp -= cannonDamage;
                if(enemyHp <= 0)
                {
                    enemyHp = 0;
                }
                Console.WriteLine("{0}이 {1}을 공격 합니다. 적 남은 체력 {2}/{3}", cannon, enemy, enemyHp, enemyMaxHp);
                if (enemyHp <= 0)
                {
                    Console.WriteLine();
                    Console.WriteLine("{0}이 파괴됩니다", enemy);
                    Console.WriteLine();
                    enemyCount--;
                    if(enemyCount > 0)
                    {
                        enemyHp = enemyMaxHp;
                    }
                }
            }
        }
    }
}



적을 생성하고 그 적을 캐논으로 공격한다.

반복문을 통해 다수의 적을 생성하고 다른 반복문을 통해 캐논으로 적을 공격하고 생성된 적을 전부 파괴할 때까지 반복한다.

 

3. 랜덤의 홀짝 평균

 

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            int odd = 0;
            int even = 0;
            bool isBool = true;

            Random rand = new Random();
            for(int i = 0; i < 20; i++)
            {
                int num = rand.Next(0, 101);
                Console.WriteLine(num);
                isBool = ((num % 2) == 0) ? true : false ;
                if(isBool == true)
                {
                    odd++;
                }
                else
                {
                    even++;
                }
            }
            Console.WriteLine();
            Console.WriteLine(odd);
            Console.WriteLine(even);
        }
    }
}

반복문의 횟수 만큼 랜덤으로 숫자를 받아온 다음 삼항 연산자를 통해 그 수가 짝수 인지 홀수 인지 판별하고

ifelse문을 통해 홀수라면 odd 변수의 숫자를 늘리고 짝수면 even 변수의 숫자를 늘린다.

 

4. 주사위 확률

 

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rand = new Random();
            int[] array = new int[6] {0, 0, 0, 0, 0, 0};

            for(int i = 0; i < 10; i++)
            {
                int num = rand.Next(0, 7);
                switch (num)
                {
                    case 1:
                        Console.WriteLine("1입니다");
                        array[0]++;
                        break;
                    case 2:
                        Console.WriteLine("2입니다");
                        array[1]++;
                        break;
                    case 3:
                        Console.WriteLine("3입니다");
                        array[2]++;
                        break;
                    case 4:
                        Console.WriteLine("4입니다");
                        array[3]++;
                        break;
                    case 5:
                        Console.WriteLine("5입니다");
                        array[4]++;
                        break;
                    default:
                        Console.WriteLine("6입니다");
                        array[5]++;
                        break;
                }
            }

            Console.WriteLine();
            for(int i = 0; i < 6; i++)
            {
                Console.WriteLine(array[i]);
            }
        }
    }
}

10번의 반복에서 랜덤을 통해 주사위의 눈 숫자를 얻고 간단한 배열과 switch문을 통해 각 눈의 개수를 구한다.

그 후에 반복문을 통해 각 눈의 갯수가 몇 개인 지 출력한다.

5. 별 피라미드

 

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            int y;
            // y는 피라미드 층 수
            y = 4;
            for(int i = 0; i < y; i++)
            {
                for(int j = y-i; j > 1; j--)
                {
                    Console.Write(" ");
                }
                for(int k = 0; k < i+1; k++)
                {
                    Console.Write("*");
                }
                for (int l = 0; l < i; l++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }
    }
}

 

다중 반복문을 통해 별의 피라미드를 만든다. 첫 반복문은 층수만큼 반복하고 첫 for문 내부의 첫 for문은 각 층마다 필요한 빈칸만큼 출력하고 2번째 for문은 피라미드의 절반을 출력하고

2번째 for문

3번째 for문은 나머지 피라미드 절반을 출력한다

3번째 for문

6. 크리티컬 어택!

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            string warrior = "전사";
            int warriorDamage = 10;
            int criticalDamage = warriorDamage * 2;
            int criticalPercent = 30;

            string enemy = "적";
            int enemyMaxHp = 100;
            int enemyHp = enemyMaxHp;

            Random rand = new Random();

            Console.WriteLine("{0}이 생성되었습니다.", enemy);
            Console.WriteLine();
            for(int i = 0; ; i++)
            {
                int criticalNum = rand.Next(1, 101);
                if(criticalNum <= criticalPercent)
                {
                    enemyHp -= criticalDamage;
                    if(enemyHp <= 0)
                    {
                        enemyHp = 0;
                    }
                    Console.WriteLine("크리티컬! {0}이 2배의 피해를 입습니다! {1}/{2}", enemy, enemyHp, enemyMaxHp);
                }
                else
                {
                    if (enemyHp <= 0)
                    {
                        enemyHp = 0;
                    }
                    enemyHp -= warriorDamage;
                    Console.WriteLine("{0}이 피해를 입습니다. {1}/{2}", enemy, enemyHp, enemyMaxHp);
                }

                if (enemyHp <= 0)
                {
                    Console.WriteLine();
                    Console.WriteLine("{0}이 죽었습니다", enemy);
                    break;
                }
            }
        }
    }
}

적을 생성한 뒤 for문을 통해 적이 죽을때 까지 무한루프를 돌며 죽으면 break문을 통해 for문을 종료한다.

30이라는 크리티컬 확률을 정하고 random을 통해 랜덤한 수를 입력 받고 값이 30 이하면 크리티컬 데미지를 받아서 데미지를 2배 더 많이 준다.

 

7. 가위바위보

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

namespace Study00
{
    class Program
    {
        static void Main(string[] args)
        {
            string person1 = "사람 1";
            string person1Hand;
            string person2 = "사람 2";
            string person2Hand;

            string Scissors = "가위";
            string rock = "바위";
            string paper = "보";
            Random rand = new Random();

            for(int i = 0; i < 10; i++)
            {
                int num1 = rand.Next(1, 4);
                int num2 = rand.Next(1, 4);
                if(num1 == 1)
                {
                    person1Hand = rock;
                }
                else if(num1 == 2)
                {
                    person1Hand = Scissors;
                }
                else
                {
                    person1Hand = paper;
                }

                if (num2 == 1)
                {
                    person2Hand = rock;
                }
                else if (num2 == 2)
                {
                    person2Hand = Scissors;
                }
                else
                {
                    person2Hand = paper;
                }

                if (num1 == 1)
                {
                    if(num2 == 3)
                    {
                        Console.WriteLine("{0}가 이겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else if(num2 == 2)
                    {
                        Console.WriteLine("{0}가 졌습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else
                    {
                        Console.WriteLine("비겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                }
                else if (num1 == 2)
                {
                    if (num2 == 3)
                    {
                        Console.WriteLine("{0}가 졌습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else if (num2 == 2)
                    {
                        Console.WriteLine("비겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else
                    {
                        Console.WriteLine("{0}가 이겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                } 
                else
                {
                    if (num2 == 3)
                    {
                        Console.WriteLine("비겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else if (num2 == 2)
                    {
                        Console.WriteLine("{0}가 이겼습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                    else
                    {
                        Console.WriteLine("{0}가 졌습니다. {0} : {2}, {1} : {3}", person2, person1, person2Hand, person1Hand);
                    }
                }

            }
        }
    }
}

랜덤을 통해 1~3까지 숫자를 2개 구하고 각각의 숫자마다 각 사람의 손 모양을 대입한다.

1은 바위, 2는 가위, 3은 보를 대입하고 각각의 경우에 수에 관해서 if-else문을 통해 이긴 경우, 진 경우, 비긴 경우를 구한다