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 ..................
'C#프로그래밍' 카테고리의 다른 글
컬렉션 [제네릭 - List<T>, Dictonary <TKey, TValue>, Queue<T>, Stack<T>] (0) | 2023.07.26 |
---|---|
namespace, 컬렉션[ArrayList, Hashtable, Stack, Queue] (0) | 2023.07.26 |
2048[미완] (0) | 2023.07.25 |
2차원 배열 (0) | 2023.07.25 |
1차원 배열 (0) | 2023.07.25 |