C#프로그래밍

좌표, 인덱스, Utils, Vector2, Hero

다모아 2023. 7. 25. 17:08

App 클래스

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

namespace Game2048
{
    public class App
    {

        //생성자
        public App()
        {
            Vector2 v = new Vector2(0, 0);
            Console.WriteLine(v.ToString());
        }
    }
}

 

Vector2 클래스

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

namespace Game2048
{
    public struct Vector2
    {
        //구조체 : 값형식 - > 스택
        //기본생성자 못씀
        //상속불가, 기본클래스로 못씀
        //인터페이스 사용가능
        //클래스와 구조체의 차이점이 뭐냐 ,, 단골문제
        public int x;
        public int y;
        //생성자
        public Vector2(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //부모클래스의 virtual멤버메서드 재정의
        public override string ToString()
        {
            //return string.Format("{0}, {1}", this.x, this.y); <- 같은거
            return $"{this.x}, {this.y}";
        }
    }
}

1. Vector2 클래스

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

namespace Game2048
{
    public struct Vector2
    {
        //구조체 : 값형식 - > 스택
        //기본생성자 못씀
        //상속불가, 기본클래스로 못씀
        //인터페이스 사용가능
        //클래스와 구조체의 차이점이 뭐냐 ,, 단골문제
        public int x;
        public int y;
        //생성자
        public Vector2(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //부모클래스의 virtual멤버메서드 재정의
        public override string ToString()
        {
            //return string.Format("{0}, {1}", this.x, this.y); <- 같은거
            return $"({this.x},{this.y})";
        }
    }
}

1. Utils 클래스

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

namespace Game2048
{
    internal class Utils
    {
        //생성자
        public Utils()
        {

        }
        //좌표 -> 인덱스로
        //static = 정적메서드, 프로그램 시작시 가장 먼저 메모리에 올라가서 프로그램 종료까지 살아있음
        //Static은 Static끼리만 접근가능
        //Static은 인스턴스로 접근 불가 타입으로 접근 가능
        //Utils.ConVertPosition2...로 접근
        public static Vector2 ConvertPosition2Indices(Vector2 position)
        {
            // 1, 2 -> 2, 1 반대로 바뀌어야함
            return new Vector2(position.y, position.x);
        }
        //인덱스 -> 좌표
        public static Vector2 ConvertPosition2Position(Vector2 indices)
        {
            // 2, 1 -> 1, 2
            return new Vector2(indices.y, indices.x);
        }
    }
}

1. App 클래스

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

namespace Game2048
{
    public class App
    {

        //생성자
        public App()
        {
            Vector2 position = new Vector2(2, 1); //좌표
            Console.WriteLine(position.ToString());
            Vector2 indices = Utils.ConvertPosition2Indices(position);
            Console.WriteLine(indices.ToString());
            position = Utils.ConvertPosition2Position(indices);
            Console.WriteLine(position.ToString());

        }
    }
}

2. App 클래스

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

namespace Game2048
{
    public class App
    {

        //생성자
        public App()
        {
            Hero hero = new Hero("홍길동");
            hero.Init(new Vector2(1, 2)); //위치
            hero.PrintPosition();
        }
    }
}

 

2. Hero 클래스

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

namespace Game2048
{
    internal class Hero
    {
        public string nickname;
        public Vector2 position;
        //생성자
        public Hero(string nickname)
        {
            this.nickname = nickname;
        }

        //초기화
        public void Init(Vector2 position)
        {
            this.position = position;
            Console.WriteLine(this.position.ToString());
        }
        //위치를 출력
        public void PrintPosition()
        {
            Console.WriteLine("좌표: {0}", this.position.ToString());
        }
        
    }
}

 

2. Utils 클래스

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

namespace Game2048
{
    internal class Utils
    {
        //생성자
        public Utils()
        {

        }
        //좌표 -> 인덱스로
        //static = 정적메서드, 프로그램 시작시 가장 먼저 메모리에 올라가서 프로그램 종료까지 살아있음
        //Static은 Static끼리만 접근가능
        //Static은 인스턴스로 접근 불가 타입으로 접근 가능
        //Utils.ConVertPosition2...로 접근
        public static Vector2 ConvertPosition2Indices(Vector2 position)
        {
            // 1, 2 -> 2, 1 반대로 바뀌어야함
            return new Vector2(position.y, position.x);
        }
        //인덱스 -> 좌표
        public static Vector2 ConvertPosition2Position(Vector2 indices)
        {
            // 2, 1 -> 1, 2
            return new Vector2(indices.y, indices.x);
        }
    }
}

 

2. Vector2 클래스

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

namespace Game2048
{
    public struct Vector2
    {
        //구조체 : 값형식 - > 스택
        //기본생성자 못씀
        //상속불가, 기본클래스로 못씀
        //인터페이스 사용가능
        //클래스와 구조체의 차이점이 뭐냐 ,, 단골문제
        public int x;
        public int y;
        //생성자
        public Vector2(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //부모클래스의 virtual멤버메서드 재정의
        public override string ToString()
        {
            //return string.Format("{0}, {1}", this.x, this.y); <- 같은거
            return $"({this.x},{this.y})";
        }
    }
}

3. Hero 클래스

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

namespace Game2048
{
    internal class Hero
    {
        public string nickname;
        public Vector2 position;
        private int[,] playerMap;
        private int id;

        //생성자
        public Hero(int id, string nickname)
        {
            this.id = id;
            this.nickname = nickname;
            Console.WriteLine(this.nickname);
        }

        //초기화
        public void Init(int[,] playerMap, Vector2 position)
        {
            this.playerMap = playerMap;
            this.UpdatePosition(position); //초기 위치 설정 (위치)
            this.UpdatePlayerMap(); //플레이어 맵 업데이트 (2차원배열)
        }
        //위치를 출력
        public void PrintPosition()
        {
            Console.WriteLine("좌표: {0}", this.position.ToString());
        }
        //위치를 변경하는 메서드
        void UpdatePosition(Vector2 targetPosition)
        {
            this.position = targetPosition;
        }

        //위치가 바뀔때마다 playerMap을 업데이트 함
        void UpdatePlayerMap()
        {
            //위치 -> 인덱스
            Vector2 indices= Utils.ConvertPosition2Indices(this.position);
            this.playerMap[indices.x, indices.y] = this.id;
        }

        //플레이어맵을 출력
        public void PrintPlayerMap()
        {
            for(int i = 0; i < this.playerMap.GetLength(0); i++)
            {
                for (int j = 0; j < this.playerMap.GetLength(1); j++)
                {
                    Console.Write("[{0},{1}] : {2}\t", i, j, playerMap[i, j]);
                }
                Console.WriteLine();
            }

        }
    }
}

 

3. Utils 클래스

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

namespace Game2048
{
    internal class Utils
    {
        //생성자
        public Utils()
        {

        }
        //좌표 -> 인덱스로
        //static = 정적메서드, 프로그램 시작시 가장 먼저 메모리에 올라가서 프로그램 종료까지 살아있음
        //Static은 Static끼리만 접근가능
        //Static은 인스턴스로 접근 불가 타입으로 접근 가능
        //Utils.ConVertPosition2...로 접근
        public static Vector2 ConvertPosition2Indices(Vector2 position)
        {
            // 1, 2 -> 2, 1 반대로 바뀌어야함
            return new Vector2(position.y, position.x);
        }
        //인덱스 -> 좌표
        public static Vector2 ConvertPosition2Position(Vector2 indices)
        {
            // 2, 1 -> 1, 2
            return new Vector2(indices.y, indices.x);
        }
    }
}

 

3. Vector2 클래스

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

namespace Game2048
{
    public struct Vector2
    {
        //구조체 : 값형식 - > 스택
        //기본생성자 못씀
        //상속불가, 기본클래스로 못씀
        //인터페이스 사용가능
        //클래스와 구조체의 차이점이 뭐냐 ,, 단골문제
        public int x;
        public int y;
        //생성자
        public Vector2(int x, int y)
        {
            this.x = x;
            this.y = y;
        }

        //부모클래스의 virtual멤버메서드 재정의
        public override string ToString()
        {
            //return string.Format("{0}, {1}", this.x, this.y); <- 같은거
            return $"({this.x},{this.y})";
        }
    }
}

 

3. App 클래스

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

namespace Starcraft
{
    internal class App
    {
        int[,] playerMap = new int[3, 3];

        public App()
        {
            Hero hero = new Hero(100, "홍길동");
            hero.Init(playerMap, new Vector2(1, 2));
            hero.PrintPosition();   //1,2
            hero.PrintPlayerMap();
           
        }
    }
}

App
[위치설정]
[영웅 생성 -> id, 이름]
초기화
위치출력
플레이어위치출력

[영웅 좌표 및 영웅 위치 표시]
ㅡㅡㅡㅡㅡㅡㅡ


Hero 
[id, 이름] 저장
ㅡㅡㅡㅡㅡㅡㅡ
이름
id
위치[배열]
위치
ㅡㅡㅡㅡㅡㅡㅡ
초기화  init [초기위치 설정, 플레이어 맵 업데이트]
위치출력 PrintPosition [좌표 출력]
위치변경 UpdatePosition
위치변경시
playerMap업데이트 UpdatePlayerMap
플레이어 맵 출력 PrintPlayerMap


Vector2
[x, y] 좌표
ㅡㅡㅡㅡㅡㅡㅡ


Utils
[영웅위치와 좌표위치 출력해주는 기능]
ㅡㅡㅡㅡㅡㅡㅡ
ㅡㅡㅡㅡㅡㅡㅡ
영웅 ConvertPosition2Position
좌표 ConvertPosition2Indices

출력예시
홍길동
좌표: (1, 2)
좌표..[0,0] : 0 ..................