유니티3D 프로그래밍
C# 1주차 2일 연습 과제 (21.03.09) 본문
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문은 피라미드의 절반을 출력하고
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문을 통해 이긴 경우, 진 경우, 비긴 경우를 구한다
'C# > 수업과제' 카테고리의 다른 글
C# 2주차 1일 수업 과제 (21.03.15) (0) | 2021.03.15 |
---|---|
C# 1주차 5일 연습 과제 (21.03.12) (0) | 2021.03.12 |
C# 1주차 4일 연습 과제 (21.03.11) (0) | 2021.03.11 |
C# 1주차 3일 연습 과제 (21.03.10) (0) | 2021.03.10 |
C# 1주차 1일 연습 과제 (21.03.08) (0) | 2021.03.08 |