Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

행복한 개구리

C# 21.03.26.수업내용 본문

C#/수업내용

C# 21.03.26.수업내용

HappyFrog 2021. 3. 26. 10:43

엑셀에 데이터 작성할 때 빈 내용은 기본값으로 지정한다.ex) int 0, string null, bool false etc

 

============================================================================

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;

namespace Study004
{
    public class App
    {
        private List<QuestInfo> questinfos;
        
        public App()
        {
            Console.WriteLine("App");
            
            DataManager.GetInstance().LoadQuestData("./quest_data.json");
            DataManager.GetInstance().LoadMonsterData("./monster_data.json");
            DataManager.GetInstance().LoadRewardData("./reward_data.json");
            string json = File.ReadAllText("./quest_data.json");
            QuestInfo[] questInfos;

            bool exist = File.Exists("./quest_info.json");
            if (exist == true)
            {
                Console.WriteLine("기존유저입니다.");
                string save = File.ReadAllText("./quest_info.json");
                questInfos = JsonConvert.DeserializeObject<QuestInfo[]>(save);
            }
            else
            {
                Console.WriteLine("신규유저입니다.");
                questInfos = JsonConvert.DeserializeObject<QuestInfo[]>(json);
                File.WriteAllText("./quest_info.json", json);
            }

            Console.WriteLine("게임을 시작합니다.");

            QuestData quest1 = DataManager.GetInstance().dicQuestDatas[601];
            QuestData quest2 = DataManager.GetInstance().dicQuestDatas[602];

            Console.WriteLine("======================================================");
                       
            //퀘스트 이름 ||  진행/목표
            int count1 = 0;
            Console.WriteLine("{0} {1}/{2}", quest1.name, count1, quest1.goal_count);
            int count2 = 0;
            Console.WriteLine("{0} {1}/{2}", quest2.name, count2, quest2.goal_count);
            //버튼 생성
            Button btn = new Button();

            //이벤트 등록
            btn.onClick += (sender, args) =>
            {
                PrintQuestDetails(quest1);
                Console.WriteLine("======================================================");
                PrintQuestDetails(quest2);
            };

            //5초후
            for (int i = 0; i < 3; i++)
            {
                Console.WriteLine("Loading {0}sec...", i + 1);
                Thread.Sleep(1000);
            }
            btn.Click();

        }

        private void PrintQuestDetails(QuestData questData)
        {
            Console.WriteLine("***** 목표 *****");
            string goalDesc = string.Format(questData.goal_desc, questData.goal_count);
            Console.WriteLine(goalDesc);

            Console.WriteLine("***** 내용 *****");
            Console.WriteLine(questData.desc);

            Console.WriteLine("***** 보상 *****");
            RewardData reward1 = DataManager.GetInstance().GetRewardType(questData.reward_type_id1);
            RewardData reward1_2 = DataManager.GetInstance().GetRewardType(questData.reward_type_id2);
            Console.WriteLine("{0}:{1}, {2}:{3}", reward1.name, questData.reward_amount1, reward1_2.name, questData.reward_amount2);
        }
    }
}

어제한거에 유저 판별하는 코드만 추가했다.

이 다음에 다시 실행하면

이와 같이 신규유저는 info파일에 data가 기본으로 들어가 저장이 되어서 두번째 실행부터는 기존유저로 분류된다

============================================================================

Thread

닷넷에서 thread는 작업자 한 명을 나타냅니다. 다중 스레드 또는 다중 스레딩은 여러 작업자를 두고 동시에 여러 작업을 처리하는 것을 의미한다. 

 

C#의 메인스레드는 순차적으로 작업을 처리하며 다중스레드를 사용하면 다발적으로 작업을 처리하게된다. (동시는 아님. 전환되는 시간이 짧아서 동시같아 보이는 것.)

 

thread는 프로그램이 실행되는 시점에 생긴다.

 

Process : 실행파일이 실행되어 메모리에 적재된 인스턴스(현재 실행중인)

Thread : 프로세스내에서 실행되는 흐름의 단위

 

C#에서 스레드를 만들때는 System.Threading 네임스페이스에 정의된 ThreadStart 대리자를 사용해야한다.

 

Priority : 스레드의 우선순위를 결정한다. ThreadPriority 열거형의 Highest, Normal, Lowest가 있다.

Abort() : 스레드를 종료시킨다

Sleep() : 스레드를 설정된 밀리초(1/1000초)만큼 중지시킵니다.

 

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


namespace Study801
{
    class App
    {
        public App()
        {
            Console.WriteLine("App");

            Account account = new Account(10000);
            Console.WriteLine(account.balance);

            Customer customer1 = new Customer("곽태철", account);
            Customer customer2 = new Customer("곽중철", account);
            customer1.Withdraw(100);
            customer2.Withdraw(100);
            
            Thread t1;
            Thread t2;
            Thread t3
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace Study801
{
    class Customer
    {
        public string name;
        public Account account;
        private Thread t;
        public Customer(string name, Account account)
        {
            this.name = name;
            this.account = account;
        }
        public void Withdraw(int amount)
        {
            t = new Thread(new ThreadStart(() =>
            {
                this.account.balance -= amount;
                Console.WriteLine("{0}, {1}", this.name, this.account.balance);
            }));
            t.Start();          

        }       
    }
}

 

'C# > 수업내용' 카테고리의 다른 글

C# 21.03.29.수업내용  (0) 2021.03.29
C# 21.03.25.수업내용  (0) 2021.03.25
C# 21.03.24.수업내용  (0) 2021.03.24
C# 21.03.23.수업내용  (0) 2021.03.23
C# 21.03.22.수업내용  (0) 2021.03.22