게임 알고리즘

enum으로 과일 관리 배열 만들기

101won 2024. 8. 15. 23:41

 타입, 상태는 90%정도 enum으로 만든다.

  • Main
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Enum_Fruits
{
    internal class Program
    {
        static void Main(string[] args)
        {
            App app = new App();

            //과일 추가
            app.Add();

            // 과일 리스트 확인
            app.ShowList();

            // 과일 가격 합산
            app.Sum();

            //인자 가격 보다 비싼 과일 리스트
            app.Compare(4000);

            // 과일의 타입, 수량을 받아 삭제
            app.Remove(Fruit.FruitType.Strawberry, 4);


            // 삭제 확인용 과일 리스트 확인
            app.ShowList();

            // 삭제 확인용 과일 가격 합산
            app.Sum();
        }
    }
}

 

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

namespace Enum_Fruits
{
    internal class Fruit
    {
        public enum FruitType
        {
            Watermelon,
            Orange,
            Apple,
            Strawberry
        }

        // 맴버 변수
        public FruitType type;
        public int price;
        public string name;
        public int num; // 과일 개수

        //생성자
        public Fruit(FruitType type, string name, int num, int price) 
        {
            Console.WriteLine("Fruit 생성자 실행");
            this.type = type;
            this.price = price; 
            this.name = name;
            this.num = num;
        }
    }
}

 
 

  • App
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Enum_Fruits
{
    internal class App
    {
        // 맴버 변수
        Fruit[] fruits;
        int idx;


        //생성자
        public App() 
        {
            Console.WriteLine("App 생성자 실행");
            fruits = new Fruit[4];
        }


        public void Add()
        {
            Console.WriteLine("===========과일 추가 시작==========");
            Fruit Watermelon = new Fruit(Fruit.FruitType.Watermelon, "수박", 1, 5000);
            fruits[0] = Watermelon;
            
            Fruit Orange = new Fruit(Fruit.FruitType.Orange, "오렌지", 2, 3000);
            fruits[1] = Orange;

            Fruit Apple = new Fruit(Fruit.FruitType.Apple, "사과", 1, 4500);
            fruits[2] = Apple;

            Fruit Strawberry = new Fruit(Fruit.FruitType.Strawberry, "딸기", 5, 6000);
            fruits[3] = Strawberry;
            Console.WriteLine("===================================\n");
        }


        public void ShowList()
        {
            Console.WriteLine("===========ShowList 실행===========");

            for (int i = 0; i < fruits.Length; i++)
            { 
            Console.WriteLine($"{fruits[i].name} X {fruits[i].num}, {fruits[i].price}won");
            }
            Console.WriteLine("===================================\n");
        }


        public void Sum()
        {
            Console.WriteLine("=======과일 가격 더하기 실행=======");

            int a = 0;
            for(int i = 0;i < fruits.Length;i++)
            {
                a += fruits[i].price* fruits[i].num;
            }
            Console.WriteLine($"모든 과일 합산 가격: {a}won");
            Console.WriteLine("===================================\n");
        }


        public void Compare(int price)
        {
            int a = 0;
            Console.WriteLine($"==={price}won 보다 비싼 과일 리스트===");

            for (int i = 0; i < fruits.Length; i++)
            {
                if( fruits[i].price > price )
                {
                    Console.WriteLine($"{fruits[i].name}이(가) {fruits[i].price -price}won 비싸다.");
                    a++;
                }
            }
            Console.WriteLine();
            Console.WriteLine($"비싼 과일은 총 {a}종");
            Console.WriteLine("===================================\n");
        }


        public void Remove(Fruit.FruitType type, int num)
        {
            Console.WriteLine("===========과일 삭제 실행==========");
            string delName;

            for (int i = 0; i < fruits.Length; i++)
            {
                if(fruits[i].type == type && fruits[i].num >= num)
                {
                    fruits[i].num -= num;
                    delName = fruits[i].name;
                
                    Console.WriteLine($"{delName}를 {num}개 삭제했습니다.");
                }
            }
            Console.WriteLine("===================================\n");
        }
    }
}