(3.25) 몬스터 공격하기 ver.수정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace study_01 { class Test { public Test() { string monsterName = "오우거"; int monsterHp = 123; int monsterMaxhp = 123; string heroName = "홍길동"; int heroHp = 80; int heroAttackdamage = 4; Console.WriteLine("몬스터의 이름 : {0}입니다", monsterName); Console.WriteLine("몬스터의 체력은 : {0}/{1} 입니다", monsterHp, monsterMaxhp); Console.WriteLine("몬스터는 사납고 무섭습니다. \n"); Console.WriteLine($"용사의 이름 : {heroName}입니다"); Console.WriteLine($"용사의 체력 : {heroHp}입니다"); Console.WriteLine($"용사의 공격력 : {heroAttackdamage}입니다 \n"); Console.WriteLine("용사가 몬스터를 공격했습니다."); Console.WriteLine($"몬스터는 {heroAttackdamage}데미지를 받았습니다."); Console.WriteLine("몬스터의 체력은 {0}/{1}입니다 \n", monsterHp - heroAttackdamage, monsterMaxhp); Console.WriteLine("공격을 더 하시겠습니까? ( Y / N ) \n"); while (true) { ConsoleKeyInfo inputkey = Console.ReadKey(); if (inputkey.Key == ConsoleKey.Y) { Console.Clear(); Thread.Sleep(1000); Console.Clear(); monsterHp -= heroAttackdamage ; Console.BackgroundColor = ConsoleColor.DarkRed; Console.WriteLine("\n 몬스터는 {0}의 피해를 받았습니다.", heroAttackdamage); Console.ResetColor(); if (monsterHp <= 0) { Console.WriteLine("\n몬스터를 처치하였습니다."); break; } Console.WriteLine("몬스터의 체력은 {0}", monsterHp); continue; } else if (inputkey.Key == ConsoleKey.N) { Console.Clear(); Console.WriteLine("\n용사가 도망쳤습니다. \n"); break; } else if (inputkey.Key != ConsoleKey.Y && inputkey.Key != ConsoleKey.N) { Console.Clear(); Console.WriteLine("\n잘못 누르셨습니다."); } } } } } | cs |
'C# > 과제' 카테고리의 다른 글
//미완// Collection[컬렉션] (0) | 2019.03.31 |
---|---|
Boxing 및 Unboxing (0) | 2019.03.29 |
Stack 과 Heap (0) | 2019.03.25 |
몬스터 처치하기 (0) | 2019.03.25 |
(3.22)값 형식 (0) | 2019.03.25 |
Stack 과 Heap
Stack
: 프로그램 실행 시 필요한 메모리 공간으로 메소드가 호출되는데 필요한 메모리(지역변수, 매개변수, 리턴 값)가 스택에 저장됨
: 제네릭이 아닌 간단한 LIFO(후입선출) 방식의 개체 컬렉션
상속 : Object -> Stack
- Stack Frame(스택프레임)
: 메소드 호출 전 반드시 호출에 필요한 메모리를 스택에 확보해야 하는데 이때 하나의 메소드에 필요한 메모리를 통합한 용어
하나의 메소드 : 하나의 스택프레임
Heap
: 스택의 반대되는 개념의 메모리
: new를이용하여 생성한 메모리가 저장됨
: 데이터 값을 저장시키는데 stack이 데이터를 저장한 heap의 주소를 갖도록 한다.
사용자가 직접관리 해야만 하는 메모리 영역
(메소드 내에서 선언된 변수는 스택에 저장, new를 이용해 생성한 메모리는 힙에 저장)
Stack 참조 : https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.stack?view=netframework-4.7.2
Stack과 Heap의 비교 참조 : https://guslabview.tistory.com/186
'C# > 과제' 카테고리의 다른 글
Boxing 및 Unboxing (0) | 2019.03.29 |
---|---|
(3.25) 몬스터 공격하기 ver.수정 (0) | 2019.03.26 |
몬스터 처치하기 (0) | 2019.03.25 |
(3.22)값 형식 (0) | 2019.03.25 |
(3.22과제)for문 문제내고 읽고 쓰기 (0) | 2019.03.25 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | string Monster_Name = "오우거"; int Monster_Hp = 123; int Monster_MaxHp = 123; string Hero_Name = "홍길동"; int Hero_Hp = 80; int H_Attack = 4; Console.WriteLine("몬스터의 이름 : " + Monster_Name + "입니다"); Console.WriteLine("몬스터의 체력은 : " + Monster_Hp + "/" + Monster_MaxHp + "입니다"); Console.WriteLine("몬스터는 사납고 무섭습니다." + "\n"); Console.WriteLine("용사의 이름 : " + Hero_Name + "입니다"); Console.WriteLine("용사의 체력 : " + Hero_Hp + "입니다"); Console.WriteLine("용사의 공격력 : " + H_Attack + "입니다" + "\n"); Console.WriteLine("용사가 몬스터를 공격했습니다."); Console.WriteLine("몬스터는 " + H_Attack + "피해를 받았습니다."); Console.WriteLine("몬스터의 체력은 " + (Monster_Hp - H_Attack) + "/" + Monster_MaxHp + "입니다" + "\n"); Console.WriteLine("공격을 더 하시겠습니까? ( Y / N )" + "\n"); while (true) { ConsoleKeyInfo YorN = Console.ReadKey(); if (YorN.Key == ConsoleKey.Y) { Thread.Sleep(1000); Console.BackgroundColor = ConsoleColor.DarkRed; Console.WriteLine("\n 몬스터는 {0}의 피해를 받았습니다.", H_Attack); Console.ResetColor(); Monster_Hp = Monster_Hp - H_Attack; Console.WriteLine("몬스터의 체력은 " + Monster_Hp); if (Monster_Hp <= 0) { Console.WriteLine("\n 몬스터를 처치하였습니다."); break; } } else if (YorN.Key == ConsoleKey.N) { Console.WriteLine("\n 용사가 도망쳤습니다."); break; } else if (YorN.Key != ConsoleKey.Y && YorN.Key != ConsoleKey.N) { Console.WriteLine("\n 잘못 누르셨습니다."); } } | cs |
'C# > 과제' 카테고리의 다른 글
Boxing 및 Unboxing (0) | 2019.03.29 |
---|---|
(3.25) 몬스터 공격하기 ver.수정 (0) | 2019.03.26 |
Stack 과 Heap (0) | 2019.03.25 |
(3.22)값 형식 (0) | 2019.03.25 |
(3.22과제)for문 문제내고 읽고 쓰기 (0) | 2019.03.25 |
(3.22)값 형식
데이터 타입 값, 참조 형식
[값 , 참조 차이]
참조형식 : 참조형식 변수에는 데이터(개체)에 대한 참조가 저장됨 (class, delegate, string, object ... 등이 있다.)
(두가지 변수가 같은 개체를 참조할수 있으므로 다른 변수의 작업의 영향을 미칠수 있다)
각 값 형식에는 해당 형식의 기본 값을 초기화 하는 암시적 기본 생성자가 있다.
값 형식 참조 : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/value-types
참조형식 참조 : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/reference-types
nullable형식 참조 : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/nullable-types/
nullable형식 참조2 : http://www.csharpstudy.com/csharp/CSharp-nullable.aspx
암시적 변환 , 명시적 변환
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int a = 123; float b = a; //암시적 변환 Console.WriteLine(a); // 123출력 Console.WriteLine(b); // 123출력 double c = 125.156; int d = (int)c; //명시적 변환(값을 잃는다) Console.WriteLine("c의 값 : " + c); // 125.156 출력 Console.WriteLine("d의 값 : " + d); // 125 출력 | cs |
암시적 변환 : 파생클래스 -> 기본클래스 (int16 -> int32)등 변환 할 때 안정성과 손실에 대한 리스크없이 데이터 형 변환되는 것
: 동일 데이터형의 작은 타입-> 동일 데이터형의 큰 타입으로 암시적 변환 수행
명시적 변환(캐스트) : Object -> 특정클래스로 갈 때 (int 32 -> int16) 변환 시 값의 손실이 발생할 수 있거나 변환이 실패할 수 있는 경우 사용
: 큰 데이터형 -> 작은 데이터형으로 변환하는 과정이기 때문에 값을 잃을 수 있다.
암시적, 명시적 변환 참조 : https://guslabview.tistory.com/68
암시적 숫자 변환 표 참조 : https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/implicit-numeric-conversions-table
'C# > 과제' 카테고리의 다른 글
Boxing 및 Unboxing (0) | 2019.03.29 |
---|---|
(3.25) 몬스터 공격하기 ver.수정 (0) | 2019.03.26 |
Stack 과 Heap (0) | 2019.03.25 |
몬스터 처치하기 (0) | 2019.03.25 |
(3.22과제)for문 문제내고 읽고 쓰기 (0) | 2019.03.25 |
(3.22과제)for문 문제내고 읽고 쓰기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | for (int i=3; i<=5;i++) { Console.Write(i + 5 ); }; /* * i의 값은 3이다 * i의 값은 3이다 * 3은 5보다 작거나 같다 * 비교연산값은 ture다 * ture이므로 본문을 실행한다 * i의값은 3이다 * 산술연산을 통해 값은 8이다 * 8을 출력한다 * 반복(iterator)로 가서 i의 값은 3이다 * 증가연산자를 만나 증가연산값은 4다 * * i의 값은 4다 * i의 값은 4다 * 4는 5보다작거나 같다 * 비교연산값은 true다 * ture이므로 본문을 실행한다 * i의 값은 4다 * 산술연산을 통해 값은 9다 * 9를 출력한다 * 반복(iterator)로 가서 i의 값은 4다 * 증가연산자를 만나 증가연산값은 5다 * * i의 값은 5다 * i의 값은 5다 * 5는 5보다 작거나 같다 * 비교연산값은 ture다 * ture이므로 본문을 실행한다 * i의 값은 5다 * 산술연산을 통해 값은 10이다 * 10을 출력한다 * 반복(iterator)로 가서 i의 값은 5다 * 증가연산자를 만나 증가연산값은 6이다 * * i의 값은 6이다 * i의 값은 6이다 * 6은 5보다 작거나 같다 * 비교연산값은 false다 * false이므로 for문을 종료한다. * * 출력되는 값은 8910 이다 */ | cs |
for문의 구조 : initializer(초기화), condition(조건), iterator(반복) 로 구성되어있다 조건이 ture일 시 반복을 하는 반복문이다. 반복 중 원하는 지점에서 멈추고 싶을 시에는 break문을 사용하여 루프를 중단할 수 있다. (goto,return,throw문으로 루프를 종료할 수도있다.) for문 참조 :https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/for
'C# > 과제' 카테고리의 다른 글
Boxing 및 Unboxing (0) | 2019.03.29 |
---|---|
(3.25) 몬스터 공격하기 ver.수정 (0) | 2019.03.26 |
Stack 과 Heap (0) | 2019.03.25 |
몬스터 처치하기 (0) | 2019.03.25 |
(3.22)값 형식 (0) | 2019.03.25 |