EasyCastleUNITY

2048 (이동 까지만 구현) 본문

C#프로그래밍

2048 (이동 까지만 구현)

EasyCastleT 2023. 7. 25. 23:14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2048
{
    internal class App
    {
        int[] board; //바탕이 되는 보드 
        Random random = new Random();
        int randomPosition = 0;
        int randomNumber = 0;
        int[] pathBoard; //통로 역할을 하는 보드 
        int pointerLeft = 3;
        int pointerRight = 0;
        public App()
        {
            board = new int[4];
            pathBoard = new int[4];
            // board[0] = 2;
            Console.WriteLine("새로운 게임이 시작됐습니다");
            while (true)
            {
                PrintBoard();
                ConsoleKeyInfo info = Console.ReadKey();
                Console.WriteLine(info.Key);
                RandomCreate();
                //  Console.WriteLine(this.randomPosition);
                //  Console.WriteLine("[{0}] [{1}] [{2}] [{3}] ", board[0], board[1], board[2], board[3]);

                if (info.Key == ConsoleKey.RightArrow)
                {
                    //Console.WriteLine("오른쪽 키 눌림");
                    MoveRight();
                }

                else if (info.Key == ConsoleKey.LeftArrow)
                {
                    //Console.WriteLine("왼쪽 키 눌림");
                    MoveLeft();
                }
                Console.WriteLine("---------------------");
                PrintBoard();

            }
        }
        // 랜덤 생성
        public void RandomCreate()
        {

            this.randomPosition = random.Next(0, 4); // 0 ~ 3까지 랜덤 정수 생성
            this.randomNumber = 2 * random.Next(1, 3); // 1 ~2 로 랜덤 생성하고 곱하기 2를 통해 2 4가 나오도록 설정
            if (board[randomPosition] == 0)
            {
                board[randomPosition] = randomNumber;
            }

        }
        //현재 보드 상태 출력
        void PrintBoard()
        {
            for(int i=0; i<board.Length; i++)
            {
                Console.Write("[{0}]  ", board[i]);
            }
        }

        //오른쪽 움직임
        public void MoveRight()
        {
            for (int i = 0; i < board.Length; i++)
            {
                if (board[i] != 0 && i < 3)
                {
                    board[i + 1] = board[i];
                    board[i] = 0;
                }
            }
        }
        //왼쪽 움직임 
        public void MoveLeft()
        {
            for (int i = board.Length - 1; i > 0; i--)
            {
                if (board[i] != 0 && i > 0)
                {
                    board[i - 1] = board[i];
                    board[i] = 0;
                }
            }
        }
    }
}