일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 멀티플레이
- input system
- meta
- XR
- 모작
- 개발
- CGV
- 팀 프로젝트
- 가상현실
- 드래곤 플라이트
- 연습
- meta xr
- 길건너 친구들
- ChatGPT
- 개발일지
- 드래곤 플라이트 모작
- Photon Fusion
- 유니티 UI
- 앱 배포
- VR
- 포트폴리오
- 유니티
- 오브젝트 풀링
- 팀프로젝트
- Oculus
- 유니티 GUI
- 유니티 Json 데이터 연동
- 오큘러스
- HAPTIC
- OVR
Archives
- Today
- Total
EasyCastleUNITY
2차원 배열을 통한 맵 이동 (워프 히어로) 본문
벡터(위치 정보 및 인덱스 정보 활용)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
//구조체 : 값형식 -> 스택
//기본생성자 못씀
//상속이 불가, 기본클래스로 못씀
//인터페이스 사용가능
internal 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 $"({this.x},{this.y})";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Utils
{
//좌표를 인덱스로
public static Vector2 ConvertPosition2Indices(Vector2 position)
{
return new Vector2(position.y, position.x);
}
//인덱스를 좌표로
public static Vector2 ConvertIndices2Position(Vector2 indices)
{
return new Vector2(indices.y, indices.x);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class Hero
{
//멤버 변수
public Vector2 position; //영웅의 위치
int[,] playerMap; //index 정보 저장
int id; //영웅의 id
string name; //영웅의 이름
//생성자
public Hero()
{
this.id = 100;
this.name = "Zave";
}
public Hero(int id, string name)
{
this.id = id;
this.name = name;
}
//멤버 메서드
//처음 위치 초기화 하는 기능
public void Init(Vector2 position, int[,]playerMap)
{
this.position = position;
this.playerMap = playerMap;
UpdatePlayerMap(this.position);
}
//현재 위치를 출력하는 기능
public void PrintPosition()
{
Console.WriteLine("영웅의 현재 위치:{0}",this.position.ToString());
}
//영웅 움직임
public void WarpHero(Vector2 position)
{
if((position.x>=0 && position.x<=3) && (position.y >=0 && position.y <= 4))
{
Vector2 indices = Utils.ConvertPosition2Indices(this.position);
this.playerMap[indices.x, indices.y] = 0;
this.position = position;
UpdatePlayerMap(this.position);
}
else
{
Console.WriteLine("이동할 수 없는 곳입니다");
}
}
void UpdatePlayerMap(Vector2 pos)
{
Vector2 indices = Utils.ConvertPosition2Indices(pos);
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("[영웅의 index {0},{1}]:{2} ", i, j, this.playerMap[i, j]);
}
Console.WriteLine();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LearnDotnet
{
internal class App
{
int[,] map = new int[4, 3];
//생성자
public App()
{
Hero hero = new Hero();
hero.Init(new Vector2(2,3),map); //좌표 2,3 에서 시작
hero.PrintPosition(); //현재 좌표 출력
hero.PrintPlayerMap(); //현재 맵의 index 전부 출력
hero.WarpHero(new Vector2(2,0));
hero.PrintPosition();
hero.PrintPlayerMap();
hero.WarpHero(new Vector2(4, 0));
}
}
}
'C#프로그래밍' 카테고리의 다른 글
컬렉션을 활용한 아이템 및 인벤토리 (0) | 2023.07.26 |
---|---|
2048 (이동 까지만 구현) (0) | 2023.07.25 |
2차원 배열 응용, 맵 만들기 (0) | 2023.07.25 |
1차원 배열을 통한 인벤토리 생성 (0) | 2023.07.25 |
배열 간단 복습 (0) | 2023.07.25 |