서양 오목이라고불리는 틱택토를 C# 에서 아주 간단하게 구현해보았다
콘솔에서 진행하는 과정이라 UI 없이 (필자의 실력부족도 한몫)
오로지 문자로 하는 틱택토라 좀다르긴하지만...
본인도 틱택토고 뭐시기고 한번도안해봤다 ..
일단 상수로 PlayerX , PlayerO 를 선언했다 프로그램 실행도중 바뀔리 없는 값이기에
static 으로 currentPlayer 를 선언하여 전역에서 값을 바꿀수있게하였고
board 배열도 마찬가지 X,Y 의 값을 넣어야하기에
UI 가 아무리없더라도 시각적으론 보이긴해야하니 ..
Console.WriteLine 으로 시각화 시켜주었다 중간중간 board의 요소가 배치될 라인은 좀더 띄워져있는데
포맷되어있는 에 배열요소가 배치될경우 자리가어긋나서 조금씩 미세조정했다
while 문으로 플레이어의 입력을 받아옴과 동시에 여러조건을 OR 문으로 검사한다 하나라도 해당될경우
경고문 표시후 다시 플레이어의 입력을 받아온다
choice 값을 받아온후 현재플레이어의 값을 2로나눈후 그나머지를 이용하여 플레이어를 구분한다 (삼항연산자 사용)
삼항연산자 ?
currentPlayer % 2 == 0 의값이 True일경우 PlayerO의 값을 False 의 경우 PlayerX의 값을 반환한다
한마디로 currentPlayer 가 짝수일경우 PlayerO의 차례니 해당위치에 O가 입력될것이고 홀수일경우 X 가입력된다
이차원배열 생성 이차원 배열의 각행에는 모든 승리조건이 들어가고
반복문을 통해 행을 바꿔가면서 board 배열의 실제값이 모두일치하는(and) 경우에 아래의 조건문으로 진행한다
아래의 조건문에선 해당 board의 값이 X 또는 O 일경우 1을 리턴한다 (그런데생각해보니 필요없다 x나 o가 아닐경우 위의 조건이 만족할리가 없기떄문)
사라져라...
이제마지막으로 무승부조건을 확인해준후 TrueForAll 매서드를 이용해서 board 의 모든요소를 순회하며 람다식뒤의 조건문을 확인해나간다
사실 람다식에서 많은 애를먹었는데
var add = (a, b) => a + b;
Console.WriteLine(add(3, 4));
기존에 이용하던 (a, b) 를 매개변수로 받아 => a+b 의 함수를 실행한다
예를들어 void sum(a,b) = a + b 를 '=>' 로 축약한다는 것은 알았으나
Predicate 라는것이 어떤것인지에대한 궁금증이 계속솟아 참조까지해가며 찾아보았지만 ..
사실내가 뭘궁금해 하는건지도 모른다는걸 깨달았고 => 에대한 내부로직이 있는거아니야 ? 라는 막연한 생각으로 접근했다는걸 깨닫고
결국 => 는 매개변수 => 익명함수 로 외우기로했다...
그리고 완벽히 이해못하는건 의미없으니 그냥바꾸기로
마지막으로 정리한 변수와 매서드를 활용해서
do while 문에 로직을 만들어주면 끝
DisplayBoard 매서드를 호출해서 보드표시를 해주고
choice 변수에 GetPlayerChoice() 매서드의 값을 넣어준다 // 이때 리턴값은 플레이어가 Console.ReadLine 으로 불러온 플레이어의 입력값이 되겠다.