ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL]C# 강의 과제 정리
    TIL 2024. 4. 25. 21:21

    2강 과제

    더보기

    2 -1 숫자맞추기 게임

    static void RandomNum()
    {
        Random random = new Random();
        int numberToGuess = random.Next(1, 101);
        int count = 0;
    
        Console.WriteLine("숫자 맞추기 게임을 시작합니다. 1에서 100까지의 숫자 중 하나를 맞춰보세요.");
    
        while (true)
        {
            Console.Write("숫자를 입력하세요: ");
            int i = int.Parse(Console.ReadLine());
            count++;
    
            if (i == numberToGuess)
            {
                Console.Write("축하합니다! {0}번 만에 숫자를 맞추었습니다.", count);
                break;
            }
            else if (i > numberToGuess)
            {
                Console.WriteLine("너무 큽니다!");
            }
            else if (i < numberToGuess)
            {
                Console.WriteLine("너무 작습니다!");
            }
        }
    
    }

    1~100까지 랜덤한 숫자가 정해지고 플레이어가 숫자를 맞추는 게임입니다.

    정해진 숫자보다 크거나 작으면 문장을 출력해 힌트를 주고

    정해진 숫자를 맞추면 몇 번만에 맞췄는지 출력하고 종료되는 프로그램 입니다.

     

    2 - 2 틱택토

        static int order = 1;//플레이어 순서
        static int count = 0;//횟수
        static int[,] map = new int[3, 3]
        {
            {1,2,3 },
            {4,5,6 },
            {7,8,9 },
        };
        static void TicTacToe()
        {
            char mark = ' ';//표식
            int mapNum;//승리판단을 위한 변수
            int[ ] arr = new int[9];//중복 확인을 위한 배열
           
            Console.WriteLine("플레이어 1:X 와 플레이어 2:O\n");
            Console.WriteLine("플레이어 {0}의 차례\n", order);
    
            //틱택토 보여주기
            MapCreate();
    
            while (true)
            {
                if (order == 1)
                {
                    mark = 'X';
                    mapNum = 10;
                }
                else
                {
                    mark = 'O';
                    mapNum = 20;
                }
                 
                //해당하는 위치 입력받기
                int num=int.Parse(Console.ReadLine());
                Console.SetCursorPosition(0, 15);
    
    
                if (arr[num - 1] != num)
                {
                    arr[num - 1] = num;
                    CheckMark(num, mark, mapNum);
                }
                else
                {
                    continue;
                }
               
    
                //콘솔 위치 확인
                if (count>=3)
                {
                    //카운트가 9거나 게임에 결과 값이 나왔다면 종료해야함
                    if (CheckWinner(mapNum)==true|| count == 9)
                    {
                        break;
                    }
                }
    
                //차례바꾸기
                Console.SetCursorPosition(9, 2);
                switch (order)
                {
                    case 1:
                        order = 2;
                        break;
                    case 2:
                        order = 1;
                        break;
                }
                Console.Write(order);
                Console.SetCursorPosition(0, 15);
            }
        }
        static bool CheckWinner(int mapNum)
        {
            Console.SetCursorPosition(0, 15);
    
            // 123 456 789 147 258 369 159 357
            //승리 패턴중 하나라도 true이면 현재 플레이어가 승리
            if ( (map[0, 0]== mapNum && map[0, 1]== mapNum&& map[0, 2] == mapNum) || (map[1, 0] == mapNum && map[1, 1] == mapNum&& map[1, 2] == mapNum)|| (map[2, 0] == mapNum && map[2, 1] == mapNum && map[2, 2] == mapNum) || //세로
                (map[0, 0] == mapNum && map[1, 0] == mapNum && map[2, 0] == mapNum) || (map[0, 1] == mapNum&& map[1, 1] == mapNum&& map[2, 1] == mapNum) || (map[0, 2] == mapNum &&map[1, 2] == mapNum&& map[2, 2] == mapNum )|| //가로
                (map[0, 0] == mapNum && map[1, 1] == mapNum && map[2, 2] == mapNum) || (map[0, 2] == mapNum&&map[1, 1] == mapNum&& map[2, 0] == mapNum)) //대각선
            {
                Console.WriteLine("플레이어{0}가 승리했습니다!",order);
                return true;
            }
            else if(count==9)
            {
                Console.WriteLine("비겼습니다.");
               
                return true;
            }
            else
            {
                for (int i = 0; i < 3; i++)
                {
                }
                return false;
            }
        }
    
        static void CheckMark(int num,char mark,int mapNum)
        {
            switch (num)
            {
                case 1:
                    Console.SetCursorPosition(2, 5);
                    map[0, 0] = mapNum;
                    break;
                case 2:
                    Console.SetCursorPosition(8, 5);
                    map[0, 1] = mapNum;
                    break;
                case 3:
                    Console.SetCursorPosition(14, 5);
                    map[0, 2] = mapNum;
                    break;
                case 4:
                    Console.SetCursorPosition(2, 9);
                    map[1, 0] = mapNum;
                    break;
                case 5:
                    Console.SetCursorPosition(8, 9);
                    map[1, 1] = mapNum;
                    break;
                case 6:
                    Console.SetCursorPosition(14, 9);
                    map[1, 2] = mapNum;
                    break;
                case 7:
                    Console.SetCursorPosition(2, 13);
                    map[2, 0] = mapNum;
                    break;
                case 8:
                    Console.SetCursorPosition(8, 13);
                    map[2, 1] = mapNum;
                    break;
                case 9:
                    Console.SetCursorPosition(14, 13);
                    map[2, 2] = mapNum;
                    break;
                default: //이상한 숫자 들어올 시 나감
                    return;
            }
            //차례에 맞는 기호 입력
            Console.Write(mark);
            count++;
        }
        static void MapCreate()
        {
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", map[0,0], map[0, 1], map[0, 2]);
            Console.WriteLine("     |     |     ");
            Console.WriteLine("-----|-----|-----");
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", map[1, 0], map[1, 1], map[1, 2]);
            Console.WriteLine("     |     |     ");
            Console.WriteLine("-----|-----|-----");
            Console.WriteLine("     |     |     ");
            Console.WriteLine("  {0}  |  {1}  |  {2}  ", map[2, 0], map[2, 1], map[2, 2]);
            Console.WriteLine("     |     |     ");
        }
    }

     C# 아직 배운지 얼마 안되기도 했고 지식 소화되기도 전에 만든 틱택토 입니다.

    이거 짜느라 새벽3시까지 분투했었습니다.

    Main()에 TicTackToe(); 넣어주면 실행 됩니다.

     배운지 얼마안되서 어영부영 만든 느낌이 많아서 나중에 리메이크 해보고 싶습니다.

     

     

    3강 과제

    더보기

    3-1 스네이크 게임만들기 (미완성입니다.)

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Drawing;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Threading;
    using System.Xml.Linq;
    
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                int foodCount = 0;//음식 먹은 횟수
    
                CreateMap(ref foodCount);
    
                // 뱀의 초기 위치와 방향을 설정하고, 그립니다.
                Point p = new Point(14, 7, '*');//초기 위치
                Snake snake = new Snake(p, 1, Direction.RIGHT);//위치와 방향
                snake.Draw();//그리기
    
                // 음식의 위치를 무작위로 생성하고, 그립니다.
                FoodCreator foodCreator = new FoodCreator(80, 20, '$');
                Point food = foodCreator.CreateFood();
                food.Draw();
    
                
    
                // 게임 루프: 이 루프는 게임이 끝날 때까지 계속 실행됩니다.
                while (true)
                {
                    //음식을 먹었을 때
                    if (snake.IsHit(food, ref foodCount))
                    {
                        food = foodCreator.CreateFood();
                        food.Draw();
    
                    }
                    else
                    {
                        //지나온길 지우기
                       // snake.ErasePath();
                    }
                    // 키 입력이 있는 경우에만 방향을 변경합니다.
                    ConsoleKeyInfo Inputkey = Console.ReadKey(true);
    
                    switch (Inputkey.Key)
                    {
                        case ConsoleKey.UpArrow:
                            snake.Move(Direction.UP);
                            break;
                        case ConsoleKey.DownArrow:
                            snake.Move(Direction.DOWN);
                            break;
                        case ConsoleKey.RightArrow:
                            snake.Move(Direction.RIGHT);
                            break;
                        case ConsoleKey.LeftArrow:
                            snake.Move(Direction.LEFT);
                            break;
    
                    }
    
                    // 뱀이 이동하고, 음식을 먹었는지, 벽이나 자신의 몸에 부딪혔는지 등을 확인하고 처리하는 로직을 작성하세요.
    
    
                    // 이동, 음식 먹기, 충돌 처리 등의 로직을 완성하세요.
    
                    //맵에 충돌했다면
                    if ((Console.GetCursorPosition().Left>=37|| Console.GetCursorPosition().Left<=1)|| (Console.GetCursorPosition().Top >= 13 || Console.GetCursorPosition().Top <= 1))
                    {
                        //Console.WriteLine(Console.GetCursorPosition());
                        GameOver();
                        break;
                    }
                   
    
                   // Thread.Sleep(1); // 게임 속도 조절 (이 값을 변경하면 게임의 속도가 바뀝니다)
    
                    // 뱀의 상태를 출력합니다 (예: 현재 길이, 먹은 음식의 수 등)
                }
            }
            static void CreateMap(ref int food)
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("            스네이크 게임             ");
                Console.WriteLine("--------------------------------------   뱀의길이:{0}",food+1);
                Console.WriteLine("|                                    |   먹은음식의 수:{0}",food);
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("--------------------------------------");
    
            }
            static void GameOver()
            {
                Console.SetCursorPosition(0, 0);
                Console.WriteLine("            스네이크 게임");
                Console.WriteLine("--------------------------------------");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|              Game Over             |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("|                                    |");
                Console.WriteLine("--------------------------------------");
            }
        }
    }
    public class Snake
    { 
        public  List<Point> body=new List<Point>();
        int length {  get; set; }
        Direction Direction { get; set; }
        public Snake(Point _point, int _length, Direction _direction)
        {
            body.Add(_point);
            length = _length;
            Direction = _direction;
        }
        public void ErasePath()
        {
            //지나온길 지우기
            Console.SetCursorPosition(body[length - 1].x, body[length - 1].y);
            Console.Write(" ");
        }
        public void Draw()
        {
            for(int i=0; i<length;i++)
            {
                //몸통의 좌표
                Console.SetCursorPosition(body[i].x, body[i].y);
                Console.Write(body[i].sym);    
            }
        }
        public bool IsHit(Point p,ref int count)//뱀이 음식 좌표와 같은지 판별
        {
            if(body[0].x == p.x && body[0].y == p.y)
            {
                Console.SetCursorPosition(55, 2);//먹은 음식수 추가
                count++;
                Console.Write(count);
    
                //원래 커서 포지션으로 돌리기
                Console.SetCursorPosition(body[length - 1].x, body[length - 1].y);
            }
           
    
            return (body[0].x == p.x && body[0].y == p.y);
    
    
        }
        public void Grow()
        {
           // Console.SetCursorPosition(body[length - 1].x, body[length - 1].y);
           // Console.Write("*");
          //  body.Add(new Point(body[length - 1].x, body[length - 1].y, body[0].sym));
           // length++;
        }
       
        public void Move(Direction _direction)
        {
            Direction = _direction;
            switch(Direction)
            {
                case Direction.UP:
                    body[0].y -= 1;
                    break;
                case Direction.DOWN:
                    body[0].y += 1;
                    break;
                case Direction.LEFT:
                    body[0].x -= 1;
                    break;
                case Direction.RIGHT:
                    body[0].x += 1;
                    break;
            }
            Draw();
           
    
        }
    }
    
    public class FoodCreator
    {
        int x { get; set; }
        int y { get; set; }
        char sym { get; set; }
    
    
        //FoodCreator 생성자
        public FoodCreator(int _x, int _y, char _sym)
        {
            x = _x;
            y = _y;
            sym = _sym; 
        }
        public Point CreateFood()
        {
            Random random = new Random();
            x = random.Next(1, 37);
            y = random.Next(2, 13);
    
            return new Point(x,y,sym);
        }
    
    }
    public class Point
    {
        public int x { get; set; }
        public int y { get; set; }
        public char sym { get; set; }
    
        // Point 클래스 생성자
        public Point(int _x, int _y, char _sym)
        {
            x = _x;
            y = _y;
            sym = _sym;
        }
    
        // 점을 그리는 메서드
        public void Draw()
        {
            Console.SetCursorPosition(x, y);
            Console.Write(sym);
        }
    
        // 점을 지우는 메서드
        public void Clear()
        {
            sym = ' ';
            Draw();
        }
    
        // 두 점이 같은지 비교하는 메서드
        public bool IsHit(Point p)
        {
            return p.x == x && p.y == y;
        }
    }
    // 방향을 표현하는 열거형입니다.
    public enum Direction
    {
            LEFT,
            RIGHT,
            UP,
            DOWN
    }

    너무 어려웠고 이 과제 할 때 하나도 모르겠어서 엄청 우울했습니다 (너무어려워요 갈피를 못잡았습니다.)

    먹이 먹고 카운트되고 먹이가 다시 랜덤으로 생성되는거 외에는 거의 다 작동이 이상합니다.

    3-2 블랙잭

    using System;
    using System.Collections.Generic;
    using System.Numerics;
    
    
    //카드문양
    public enum Suit { Hearts, Diamonds, Clubs, Spades }
    //카드 숫자
    public enum Rank { Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King, Ace }
    
    public class Card
    {
        public Suit Suit { get; private set; }
        public Rank Rank { get; private set; }
    
        //카드 생성자
        public Card(Suit s, Rank r)
        {
            Suit = s;
            Rank = r;
        }
    
        //enum을 계산하기 쉽게 숫자로 표시
        public int GetValue()
        {
            //카드 숫자가 10 이하거나 같다면
            if ((int)Rank <= 10)
            {
                return (int)Rank;
            }
            //카드가 13보다 같거나 작다면
            else if ((int)Rank <= 13)
            {
                return 10;
            }
            //둘다 아니라면
            else
            {
                return 11;
            }
        }
    
        //카드의 이름과 종류
        public override string ToString()
        {
            return $"{Rank} of {Suit}";
        }
    }
    // 덱을 표현하는 클래스
    public class Deck
    {
        private List<Card> cards;
    
        public Deck()
        {
            cards = new List<Card>();
    
            foreach (Suit s in Enum.GetValues(typeof(Suit)))
            {
                foreach (Rank r in Enum.GetValues(typeof(Rank)))
                {
                    cards.Add(new Card(s, r));
                }
            }
    
            Shuffle();
        }
    
        //카드를 섞고 리스트에 넣는다.
        public void Shuffle()
        {
            Random rand = new Random();
    
            for (int i = 0; i < cards.Count; i++)
            {
                int j = rand.Next(i, cards.Count);
                Card temp = cards[i];
                cards[i] = cards[j];
                cards[j] = temp;
            }
        }
    
        public Card DrawCard()
        {
            Card card = cards[0];
            cards.RemoveAt(0);
            return card;
        }
    }
    // 패를 표현하는 클래스
    public class Hand
    {
        private List<Card> cards;
    
        public Hand()
        {
            cards = new List<Card>();
        }
    
        public void AddCard(Card card)
        {
            cards.Add(card);
        }
    
        public int GetTotalValue()
        {
            int total = 0;
            int aceCount = 0;
    
            foreach (Card card in cards)
            {
                if (card.Rank == Rank.Ace)
                {
                    aceCount++;
                }
                total += card.GetValue();
            }
    
            while (total > 21 && aceCount > 0)
            {
                total -= 10;
                aceCount--;
            }
    
            return total;
        }
    }
    // 플레이어를 표현하는 클래스
    public class Player
    {
        public Hand Hand { get; private set; }
        public List<int> getCards= new List<int>();
        public Player()
        {
            Hand = new Hand();
        }
    
        //플레이어 카드 받기
        public Card DrawCardFromDeck(Deck deck)
        {
            Card drawnCard = deck.DrawCard();
            Hand.AddCard(drawnCard);
            getCards.Add(drawnCard.GetValue());
            return drawnCard;
        }
        public void ShowCard(string _order)
        {
            Console.Write("{0}가 가진 카드:",_order);
    
           for(int i=0; i<getCards.Count;i++)
            {
                if(i== getCards.Count-1)//마지막 쉼표제거
                {
                    Console.Write(" {0}", getCards[i]);
                }
                else
                {
                    Console.Write(" {0},", getCards[i]);
    
                }
            }
            Console.WriteLine();
        }
    }
    
    // 여기부터는 학습자가 작성
    // 딜러 클래스를 작성하고, 딜러의 행동 로직을 구현하세요.
    public class Dealer:Player
    {
    
        public Dealer()
        {
    
        }
        public void DealerDrawCard(Deck deck)
        {
            while(Hand.GetTotalValue()<=17)
            {
                //카드받고 추가?
                Hand.AddCard(DrawCardFromDeck(deck));
            }
            ShowCard("Dealer");
            Console.WriteLine("Dealer 카드의 총 합:{0}", Hand.GetTotalValue());
        }
    
    }
    
    // 블랙잭 게임을 구현하세요. 
    public class Blackjack
    {
        public Blackjack()
        {
    
        }
        public bool CheckBlackJack(int value,string _order,ref bool _gameEnd)
        {
            if(value==21)
            {
                Console.WriteLine("\n{0}가 이겼습니다.",_order);
                _gameEnd = true;
                return true;
    
            }
            else if(value>21)
            {
                Console.WriteLine("\n{0}가 총 합 {1}로 졌습니다.", _order,value);
                _gameEnd = true;
                return true;
    
            }
            else
            {
                return false;
            }
        }
        public void CheckWinner(int player, int dealer, ref bool _gameEnd)
        {
            if(player==dealer)
            {
                Console.WriteLine("\n비겼습니다.");
            }
            else if (player > dealer)
            {
                Console.WriteLine("\nPlayer가 이겼습니다.");
            }
            else if (player < dealer)
            {
                Console.WriteLine("\nDealer가 이겼습니다.");
            }
            _gameEnd = true;
        }
       
    }
    
    //1.카드를 섞는다
    //2.플레이어와 딜러에게 카드를 두장씩 나눠준다
    //3.플레이어와 딜러는 추가로 카드를 더 받을 수 있다. (이떄 21넘으면 플레이어 패배)
    //4.딜러가 카드 받는것을 멈추면 딜러가 원하는만큼(대략 17 되기전까지) 카드를 뽑는다(이때 21넘으면 플레이어가 승리)
    //5.둘다 21을 안넘는다는 가정하에 21에 근접한 사람이 승리
    namespace BlackJack
    {
        internal class Program
        {
            static void Main(string[] args)
            { 
                Deck deck =new Deck(); //생성자가 자동으로 카드를 섞어줌
                Dealer dealer = new Dealer();
                Player player = new Player();
                Blackjack blackjack = new Blackjack();
                bool gameEnd=false;
                //string order = "";
    
                //처음 플레이어와 딜러에게 카드 두장을 나눠줘야 한다.
                for(int i = 0; i<2;i++)
                {
                    player.DrawCardFromDeck(deck);  //플레이어에게 카드 주기
                    dealer.DrawCardFromDeck(deck); //딜러에게도 카드 주기.
                }
    
                player.ShowCard("Player");
                dealer.ShowCard("Dealer");
                //Console.WriteLine(player.Hand.GetTotalValue());
                //Console.WriteLine(dealer.Hand.GetTotalValue());
    
                //여기서 21이 같거나 넘는 사람이 있는지 확인
                blackjack.CheckBlackJack(player.Hand.GetTotalValue() , "Player",ref gameEnd);
                blackjack.CheckBlackJack(dealer.Hand.GetTotalValue() , "Dealer",ref gameEnd);
               
                while(gameEnd==false)
                {
                    //문제가 없다면 카드를 더 받을 것인지 물어봐야함.
                    Console.WriteLine("\n카드를 더 받고싶다면 1번, 아니라면 2번을 입력해주세요.");
                    int answer = int.Parse(Console.ReadLine());
                    switch (answer)
                    {
                        case 1:
                            Console.WriteLine("카드를 한장 더 받습니다.\n");
                            player.DrawCardFromDeck(deck);  //플레이어에게 카드 주기
                            player.ShowCard("Player");
                            break;
                        case 2:
                            Console.WriteLine("딜러가 카드를 뽑습니다.\n");
                            dealer.DealerDrawCard(deck);//딜러가 카드뽑기
                            blackjack.CheckBlackJack(dealer.Hand.GetTotalValue(), "Dealer", ref gameEnd);
                            if(gameEnd!=true)
                            blackjack.CheckWinner(player.Hand.GetTotalValue(), dealer.Hand.GetTotalValue(), ref gameEnd);//누가 이겼는지 체크
                            break;
                        default:
                            Console.WriteLine("유효한 숫자가 아닙니다.\n");
                            continue;
                    }
    
                    blackjack.CheckBlackJack(player.Hand.GetTotalValue(), "Player", ref gameEnd );
                }
            }
        }
    }

     Class와 Struct를 배우면서 나온 과제입니다. 

    어느정도 기반 코드를 제공받고 작성한거라 위에 과제보다는 빠르게 끝낼 수 있었지만

    팀원 분 말씀으로는 버그가 있다 하네요...이것도 나중에 시간나면 확인 후 리메이크 할 예정입니다.

     

     

    개인과제 (RPGTextGame)

    더보기
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Security.Authentication;
    using static DungeonRPG.IDK;
    
    namespace DungeonRPG
    {
        internal interface IDK
        {
            static void Main(string[] args)
            {
    
                Player player = new Player();
                Shop shop = new Shop();
                Inventory inventory = new Inventory();
    
                //이름설정
                Console.Write("사용하실 플레이어 이름을 입력해주세요: ");
                player.name = Console.ReadLine();
    
                //직업설정
                Console.Clear();
                Console.Write("시작하실 직업을 선택해주세요:\n0.전사 \n1.마법사 \n2. 궁수\n ");
    
                int job = CheckInput(0, 2);
                switch (job)//직업에 따라 초기 스탯 변경해도 좋을것 같다.(미구현)
                {
                    case 0:
                        player.job = "전사";
                        break;
                    case 1:
                        player.job = "마법사";
                        break;
                    case 2:
                        player.job = "궁수";
                        break;
                }
    
                //게임시작 
                while (true)
                {
                    Console.Clear();
                    Console.WriteLine("스파르타 마을에 오신 여러분 환영합니다.");
                    Console.WriteLine("이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.");
                    Console.WriteLine("\n1. 상태보기");
                    Console.WriteLine("2. 인벤토리");
                    Console.WriteLine("3. 상점");
                    Console.WriteLine("\n원하시는 행동을 입력해주세요.");
    
                    //잘못된 입력인지 출력
                    int answer = CheckInput(1, 3);
    
                    switch (answer)
                    {
                        case 1: //상태보기
                            player.ShowStat(inventory.attackStat, inventory.defenseStat);
                            break;
                        case 2://인벤토리 열기
                            inventory.OpenInventory();
                            break;
                        case 3: //상점 열기
                            shop.EnterShop(ref player.gold, ref inventory.inventoryItem);
                            break;
    
                    }
                }
            }
    
            class Player
            {
                 int level = 01;  
                 public string name="말하는감자";
                 public string job = "";
                 int attack=10;  
                 int defense=5;  
                 int health=100;  
                 public int gold=1500;  
    
    
                //플레이어의 스탯을 출력
                public void ShowStat(int _addAttack, int _addDefense)
                {
                    Console.Clear();
                    Console.WriteLine("상태 보기\n");
                    Console.WriteLine($"Lv. {level}");
                    Console.WriteLine($"{name} ({job})");
                    
                    //장비 장착시 출력 변경
                    if (_addAttack > 0) 
                    {
                        Console.WriteLine("공격력 : {0} + ({1})", attack + _addAttack, _addAttack);
                    }
                    else
                    {
                        Console.WriteLine($"공격력 : {attack}");
                    }
                    if (_addDefense > 0)
                    {
                        Console.WriteLine("방어력 : {0} + ({1})",defense+_addDefense,_addDefense);
                    }
                    else
                    {
                        Console.WriteLine($"방어력 : {defense}");
                    }
    
                    Console.WriteLine($"체 력 : {health}");
                    Console.WriteLine($"Gold : {gold}\n");
                    Console.WriteLine("0. 나가기\n");
                    Console.WriteLine("원하시는 행동을 입력해주세요");
    
                    CheckInput(0,0);
    
                }
              
            }
             class Inventory 
            {
                public List <Item> inventoryItem = new List<Item>();
                string icon = "[E]"; //착용을 표시하기 위한 아이콘
                bool equip = false;  
                public int attackStat = 0;
                public int defenseStat = 0;
    
                //인벤토리창 출력
                void InvetoryDialogue()
                {
                    Console.Clear();
    
                    Console.WriteLine("인벤토리\n");
                    Console.WriteLine("아이템 목록");
                    for (int i = 0; i < inventoryItem.Count(); i++)
                    {
                        if (equip == true)
                        {
                            Console.Write($"-{i + 1} ");
                            if (inventoryItem[i].itemEquip==true)
                            {
                                Console.Write(icon);
                            }
                        }
                        else
                        {
                            Console.Write("-");
                            if (inventoryItem[i].itemEquip == true)
                            {
                                Console.Write(icon);
                            }
                        }
                        Console.WriteLine($"{inventoryItem[i].itemName} | {inventoryItem[i].itemType} +{inventoryItem[i].itemStat} | {inventoryItem[i].itemDescript}");
    
                    }
                    Console.WriteLine();
    
                    if(equip == false)
                    {
                        Console.WriteLine("1. 장착 관리");
                    }
                    Console.WriteLine("0. 나가기\n");
                    Console.WriteLine("원하시는 행동을 입력해주세요");
    
                }
                //장비의 장착과 해제를 담당
                void ItemManagement(int _order)
                {
                    InvetoryDialogue();
    
                    if (inventoryItem[_order-1].itemEquip==false)//아이템 장착
                    {
                        inventoryItem[_order-1].itemEquip = true;
    
                        if(inventoryItem[_order-1].itemType == "방어력")
                        {
                            defenseStat += inventoryItem[_order - 1].itemStat;
                        }
                        else //공격력
                        {
                            attackStat+= inventoryItem[_order-1].itemStat;
                        }
                    }
                    else//아이템 해제
                    {
                        inventoryItem[_order - 1].itemEquip =false;
    
                        if (inventoryItem[_order - 1].itemType == "방어력")
                        {
                            defenseStat -= inventoryItem[_order - 1].itemStat;
                        }
                        else //공격력
                        {
                            attackStat -= inventoryItem[_order - 1].itemStat;
                        }
                    }
    
                    InvetoryDialogue();
                }
                //인벤토리 보여주고 행동 입력받기
                public void OpenInventory()
                {
                    InvetoryDialogue();
                    int answer = -1;
    
                    if (equip == false)
                    {
                        answer = CheckInput(0, 1);
    
                        if (answer == 1)
                        {
                            equip = true;
                            OpenInventory();
                        }
                        else
                        {
                            equip = false;
                        }
                    }
                    else if (equip == true)
                    {
                        while (true)
                        {
                            answer = CheckInput(0, inventoryItem.Count());
                            if (answer == 0)
                            {
                                equip = false;
                                OpenInventory();
                                break;
                            }
                            ItemManagement(answer);
                        }
                    }
                }
               
            }
            
            class Shop 
            {
                List<Item> itmes = new List<Item>();
    
                bool buy = false;
    
                public Shop()
                {
                    itmes.Add(new Item(false,"수련자의 갑옷","방어력",5,"수련에 도움을 주는 갑옷입니다.",1000));
                    itmes.Add(new Item(false,"무쇠갑옷", "방어력",9, "무쇠로 만들어져 튼튼한 갑옷입니다.",100));
                    itmes.Add(new Item(false,"스파르타의 갑옷", "방어력", 15, "스파르타의 전사들이 사용했다는 전설의 갑옷입니다.",3500));
                    itmes.Add(new Item(false,"낡은 검", "공격력", 2, "쉽게 볼 수 있는 낡은 검 입니다.",600));
                    itmes.Add(new Item(false,"청동 도끼", "공격력", 5, "어디선가 사용됐던거 같은 도끼입니다.",1500));
                    itmes.Add(new Item(false,"스파르타의 창", "공격력", 7, "스파르타의 전사들이 사용했다는 전설의 창입니다.",200));
                    itmes.Add(new Item(false,"공포의 C#", "공격력", 333, "함부로 손댔다가는 쓴맛을 맛봅니다.",999));
                }
    
                //아이템 구매
                void BuyItem(ref int _Gold,int _answer, ref List<Item> inven)
                {
                    if (itmes[_answer - 1].itemBuy == true)
                    {
                        Console.WriteLine("이미 구매한 아이템입니다.");
                    }
                    else if(itmes[_answer - 1].itemPrice > _Gold)
                    {
                        Console.WriteLine("돈이 부족합니다.");
                    }
                    else
                    {
                        _Gold -= itmes[_answer - 1].itemPrice; //소유한 금액에서 아이템 금액 빼기
                        itmes[_answer - 1].itemBuy = true;      // 아이템을 구매했다고 표시
    
    
                        inven.Add(itmes[_answer - 1]);
    
                        ShopDialogue(ref _Gold,ref inven );                              //화면에 구매했다고 출력
                        Console.WriteLine("아이템을 구매하셨습니다.");
                    }
                   
                }
                //상점 대사 출력
                void ShopDialogue(ref int _Gold, ref List<Item> inven)
                {
                    Console.Clear();
                    Console.WriteLine("상점\n");
                    Console.WriteLine($"[보유 골드]\n{_Gold}G\n");
                    Console.WriteLine("[아이템목록]");
                    for (int i = 0; i < itmes.Count(); i++)
                    {
                        if (buy == true)
                        {
                            Console.Write($"-{i + 1} ");
                        }
                        else
                        {
                            Console.Write("-");
                        }
                        if (itmes[i].itemBuy == true)
                        {
                            Console.WriteLine($"{itmes[i].itemName} | {itmes[i].itemType} +{itmes[i].itemStat} | {itmes[i].itemDescript} | 구매완료");
                        }
                        else
                        {
                            Console.WriteLine($"{itmes[i].itemName} | {itmes[i].itemType} +{itmes[i].itemStat} | {itmes[i].itemDescript} | {itmes[i].itemPrice}G");
                        }
                    }
                    Console.WriteLine();
    
                    if (buy == false)
                        Console.WriteLine("1. 아이템구매");
    
                    Console.WriteLine("0. 나가기\n");
                    Console.WriteLine("원하시는 행동을 입력해주세요");
    
                }
                //상점에 들어와서 다음 행동 입력받기
                public void EnterShop(ref int _Gold,ref List<Item> inven)
                {
                    ShopDialogue(ref _Gold, ref inven);
                    int answer = -1 ;
    
                    if(buy==false)
                    {
                        answer = CheckInput(0, 1);
    
                        if (answer == 1)
                        {
                            buy = true;
                            EnterShop(ref _Gold,ref inven);
                        }
                        else
                        {
                            buy = false;
                        }
                    }
                    else if(buy == true)
                    {
                        while (true)
                        {
                            answer = CheckInput(0, itmes.Count());
                            if(answer==0)
                            {
                                buy = false;
                                EnterShop(ref _Gold, ref inven);
                                break;
                            }
                            BuyItem(ref _Gold, answer, ref inven);
                        }
                    }
                }
            }
       
           
            //아이템 클래스
            class Item
            {
                public bool itemEquip = false;
                public bool itemBuy { get; set; }
                public string itemName { get;  set; }
                public string itemType { get;  set; }
                public int itemStat { get; set; }
                public string itemDescript { get; set; }
                public int itemPrice {  get; set; }    
    
    
                public Item(bool _itemBuy, string _itemName,string _itemType, int _itemStat, string _itemDescript,int _itemPrice)
                {
                    itemBuy = _itemBuy;
                    itemName = _itemName;
                    itemType = _itemType;
                    itemStat = _itemStat;
                    itemDescript = _itemDescript;
                    itemPrice = _itemPrice;
                }
                 
            }
          
           
         //올바른 입력인지 확인
            static public int CheckInput(int _startNum, int _endNum)
            {
                int answer = 0;
                while (true)
                {
                    try
                    {
                        Console.Write(">> ");
                        answer = int.Parse(Console.ReadLine());
    
                        for (int i = _startNum; i <= _endNum; i++) //입력이 숫자이지만 지정범위 내에 숫자가 아닐 경우
                        {
                            if (answer == i)
                            {
                                return answer;
                            }
    
                        }
                        Console.WriteLine("잘못된 입력입니다.");
    
                    }
                    catch (FormatException ex) //입력이 숫자가 아닐때 발생하는 오류
                    {
                        Console.WriteLine("잘못된 입력입니다.");
                    }
         
                }
    
            }
        }
    
    }

    과제 중 필수 구현만 하고 제출해버린 제 코드입니다.

    추가 기능 구현은 내일쯤 하지않을까..싶습니다... 

    깔끔하게 짠 느낌도 아니라서 고민되네요

     

    'TIL' 카테고리의 다른 글

    [TIL]C# 알고리즘  (0) 2024.04.28
    [TIL]C# 문법 4  (0) 2024.04.26
    [TIL]C#문법3  (0) 2024.04.24
    [TIL]C#문법 2  (0) 2024.04.23
    [TIL]C#문법1주차(수정중)  (0) 2024.04.23
Designed by Tistory.