과제

콘솔 섯다 만들기(C#) 12/3~12/5

qltjfeo55555 2024. 12. 5. 17:08

콘솔 섯다 만들기(C#)

(아직은 족보, draw 없이 제작)

1. 카드: 1~10까지 2장씩 보유, 이미지로 시각화
2. 카드 패 : 중복 없이 1장 1장 분배
3. 승판결 : 족보 return 함수로 만들 거지만 지금은 더하기 했을 때 높은 게  이기는 걸로 (win)
4. 배팅 : 하프(기본 배팅 * 3), 땡(기본 배팅 * 2)
5. 순서 : 기본 배팅 > 카드 분배 > 배팅 > 카드 분배 > 승판결 //(반복) 

 

 

 

static void AiCardnumber1(int firstcard)
{

    string[,,] str = new string[10, 7, 7]
    {
        //1
        {
        {"■","■","■","■","■","■","■"},
        {"■","■","■"," ","■","■","■"},
        {"■","■"," "," ","■","■","■"},
        {"■","■","■"," ","■","■","■"},
        {"■","■","■"," ","■","■","■"},
        {"■","■"," "," "," ","■","■"},
        {"■","■","■","■","■","■","■"},
        },

         //2
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },

        //3
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },

         //4
        {
        {"■","■","■","■","■","■","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■","■","■"},
        },

        //5
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },

         //6
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },

        //7
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■","■","■"},
        },

         //8
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },

        //9
        {
        {"■","■","■","■","■","■","■"},
        {"■"," "," "," "," "," ","■"},
        {"■"," ","■","■","■"," ","■"},
        {"■"," "," "," "," "," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■"," ","■"},
        {"■","■","■","■","■","■","■"},
        },

        //10
        {
        {"■","■","■","■","■","■","■"},
        {"■"," ","■"," "," "," ","■"},
        {"■"," ","■"," ","■"," ","■"},
        {"■"," ","■"," ","■"," ","■"},
        {"■"," ","■"," ","■"," ","■"},
        {"■"," ","■"," "," "," ","■"},
        {"■","■","■","■","■","■","■"},
        },


    };
	
    //뒷면 시각화
    if (firstcard == 11) 
    {
        for (int j = 0; j < 7; j++)
        {
            for (int k = 0; k < 7; k++)
            {
                Console.SetCursorPosition(33 + 2 * k, 5 + j);
                Console.Write("■");


            }

            Console.WriteLine();

        }

    }
    else
    {
        for (int j = 0; j < 7; j++)
        {
            for (int k = 0; k < 7; k++)
            {
                Console.SetCursorPosition(33 + 2 * k, 5 + j);
                Console.Write(str[firstcard - 1, j, k]);


            }

            Console.WriteLine();

        }
    }

    
}

카드 시각화

배열에 특수문자를 넣어서 위치값 정한 곳에 반복문으로 이미지를 시각화를 하였다

배열 쓴 이유 : 처음에 위치값 입력 출력 반복하려했지만 길어지고 가독성이 떨어져 배열 써서 반복문으로  할 수 있었다.

예시)

Console.SetCursorPosition(3, 5) console.witeLine("■  ■  ■  ■ "),

Console.SetCursorPosition(3, 6)

Console.SetCursorPosition(3, 5) console.witeLine("■  ■  ■  ■ "),

Console.SetCursorPosition(3, 6)

1~10에 대한 문자 이미지를 배열로 만들어 놓고 카드 숫자를 받을 수 있게 3중 배열로 선언했다 [cardnum, 문자, 문자] 

예시)

for (int j = 0; j < 7; j++)
{
    for (int k = 0; k < 7; k++)
    {
        Console.SetCursorPosition(3 + 2 * k, 5 + j);
        Console.Write( str[card, j, k] );
    }
    Console.WriteLine();
}

 int[] totalCard = new int[20];//총카드 숫자에대한 배열
 int aiCard1;//ai카드패
 int aiCard2;

 int myCard1;//나의패
 int myCard2;
 
 //랜덤 선언
 Random airandom1 = new Random();
  //총카드 초기화 1~10,1~10 대입
 for (int i = 0; i < 10; i++)
 {
     totalCard[i] = i + 1;
     //Console.Write(totalCard[i]);
 }
 for (int i = 10; i < 20; i++)
 {
     totalCard[i] = -10 + i + 1;
     // Console.Write(totalCard[i]);
 }

 //총카드 셔플 
 for (int i = 0; i < shuffle; i++)
 {

     adrand1 = airandom1.Next(0, 20);
     adrand2 = airandom1.Next(0, 20);
     temp = totalCard[adrand1];
     totalCard[adrand1] = totalCard[adrand2];
     totalCard[adrand2] = temp;

 }


aiCard1 = totalCard[0];
aiCard2 = totalCard[1];

myCard1 = totalCard[2];
myCard2 = totalCard[3];

카드패

 

1~10,1~10 각각 2장씩 필요해 중복 처리가 힘들 거 같아 배열로 넣었다.

totalCard[20] , 20가지를 랜덤으로 돌려 하나씩 뽑는 과정에서 하나하나 랜덤으로 돌리는 것보다 실제 카드 섞는 느낌을 내기 위해 처음에는 배열[] 안 숫자를 바꾸려고 했지만 기존이랑 동일한 거 같아 totalCard[20] 안에 있는 배열들을 랜덤으로 변경 후 [0],[1],[2],[3] 뽑으면 될 거 같았다. 랜덤 수를 두 개 뽑고 두 개의 배열의 값을 바꾸는 과정을 반복문으로 했다.

for (int i = 0; i < shuffle; i++)
{
    adrand1 = airandom1.Next(0, 20);
    adrand2 = airandom1.Next(0, 20);
    temp = totalCard[adrand1];
    totalCard[adrand1] = totalCard[adrand2];
    totalCard[adrand2] = temp;
}

 

int aipoint ;//승 포인트
int mypoint ;
int winpoint = 0;//승판결 나중에 draw발동시


if (aipoint > mypoint)
{
    aimoney = aimoney + totalbettingmoney;
    Console.WriteLine("ai win");

}
else if (aipoint < mypoint)
{
    mymoney = mymoney + totalbettingmoney;
    Console.WriteLine("player win");


}
else if (aipoint == mypoint)
{
    Console.WriteLine("draw");
}

승판결

아직 족보 없지만 나중을 위해서 player와 ai 포인트라는 변수를 만들었다

포인트가 높으면 승, 낮으면 패인데 비기거나 다시 해야 되는 상황(4,9파토)이 오면 winpoint라는 변수를 사용해 다시 하는 방법을 모색할 것이다.

 

 

int aimoney = 100000; //총 가지고있는돈 
int mymoney = 100000;
int totoalmoney = aimoney + mymoney;//게임전체 소지돈
int basicbettingmoney = 1000;//기본배팅금, 다음배팅담는변수

int totalbettingmoney = 0; //한 싸이클 총배팅돈 
int aitotalbettingmoney = 0; //한 싸이클 배팅돈 담는 변수 (일시적)
int mytotalbettingmoney = 0;


//ai,내가 기본금보다 돈이 적을때
 if (aimoney < basicbettingmoney)
 {
     Console.WriteLine("기본배팅금 보다 돈이 없습니다.");
     break;
 }
 
 
 if (aimoney == 0)
{
    Console.WriteLine("콜");
    if (mymoney <= mytotalbettingmoney)
    {
        mytotalbettingmoney = mytotalbettingmoney + mymoney;
        mymoney = 0;
    }
    else if (mymoney > mytotalbettingmoney)
    {
        if (basicbettingmoney <= mymoney)
        {
            mymoney -= basicbettingmoney;
            mytotalbettingmoney += basicbettingmoney;
        }
        else if (basicbettingmoney > mymoney)
        {
            //배팅금차이
            bettinggap = 0;
            bettinggap = basicbettingmoney - mymoney;
            basicbettingmoney = basicbettingmoney - bettinggap;
            mytotalbettingmoney = mytotalbettingmoney + mymoney;
            mymoney = 0;
        }



    }

}
else if (aimoney > 0)
{
    //배팅금보다 내돈이 적을때 if()???
    if (mymoney <= mytotalbettingmoney)
    {
        mytotalbettingmoney = mytotalbettingmoney + mymoney;
        mymoney = 0;
    }
    else if (mymoney > mytotalbettingmoney)
    {
        if (bettinganswer == "1")
        {
            if (basicbettingmoney * 3 <= mymoney)
            {
                mymoney -= basicbettingmoney * 3;
                mytotalbettingmoney += basicbettingmoney * 3;
                basicbettingmoney = basicbettingmoney * 3;
            }
            else if (basicbettingmoney * 3 > mymoney)
            {
                //배팅금차이
                bettinggap = 0;
                bettinggap = basicbettingmoney * 3 - mymoney;
                basicbettingmoney = basicbettingmoney * 3 - bettinggap;
                mytotalbettingmoney = mytotalbettingmoney + mymoney;
                mymoney = 0;

            }

        }
        else if (bettinganswer == "2")
        {
            if (basicbettingmoney * 2 <= mymoney)
            {
                mymoney -= basicbettingmoney * 2;
                mytotalbettingmoney += basicbettingmoney * 2;
                basicbettingmoney = basicbettingmoney * 2;
            }
            else if (basicbettingmoney * 2 > mymoney)
            {
                bettinggap = 0;
                bettinggap = basicbettingmoney * 2 - mymoney;
                basicbettingmoney = basicbettingmoney * 2 - bettinggap;
                mytotalbettingmoney = mytotalbettingmoney + mymoney;
                mymoney = 0;

            }


        }
        else if (bettinganswer == "3")
        {
            Console.WriteLine("다이");
        }

    }
}
//ai배팅
if (mymoney == 0)
{
    Console.WriteLine("콜");
    //올인
    if (aimoney <= aitotalbettingmoney)
    {
        aitotalbettingmoney = aitotalbettingmoney + aimoney;
        aimoney = 0;
    }
    else if (aimoney > aitotalbettingmoney)
    {
        //ai배팅 1,2,3 랜덤 금액 변경

        if (basicbettingmoney <= aimoney)
        {
            aimoney -= basicbettingmoney;
            aitotalbettingmoney += basicbettingmoney;
        }

        else if (basicbettingmoney > aimoney)
        {
            //배팅금차이
            bettinggap = 0;
            bettinggap = basicbettingmoney  - aimoney;
            basicbettingmoney = basicbettingmoney  - bettinggap;
            aitotalbettingmoney = aitotalbettingmoney + aimoney;
            aimoney = 0;
        }
    }
}
else if (mymoney > 0)
{
    if (aimoney <= aitotalbettingmoney)
    {
        aitotalbettingmoney = aitotalbettingmoney + aimoney;
        aimoney = 0;
    }
    else if (aimoney > aitotalbettingmoney)
    {
        //ai배팅 1,2,3 랜덤 금액 변경
        if (airandombetting == 1)
        {
            if (basicbettingmoney * 3 <= aimoney)
            {
                aimoney -= basicbettingmoney * 3;
                aitotalbettingmoney += basicbettingmoney * 3;
                basicbettingmoney = basicbettingmoney * 3;
            }
            else if (basicbettingmoney * 3 > aimoney)
            {
                //배팅금차이
                bettinggap = 0;
                bettinggap = basicbettingmoney * 3 - aimoney;
                basicbettingmoney = basicbettingmoney * 3 - bettinggap;
                aitotalbettingmoney = aitotalbettingmoney + aimoney;
                aimoney = 0;
            }
        }
        else if (airandombetting == 2)
        {
            if (basicbettingmoney * 2 <= aimoney)
            {
                aimoney -= basicbettingmoney * 2;
                aitotalbettingmoney += basicbettingmoney * 2;
                basicbettingmoney = basicbettingmoney * 2;
            }
            else if (basicbettingmoney * 2 > aimoney)
            {
                //배팅금차이
                bettinggap = 0;
                bettinggap = basicbettingmoney * 2 - aimoney;
                basicbettingmoney = basicbettingmoney * 2 - bettinggap;
                aitotalbettingmoney = aitotalbettingmoney + aimoney;
                aimoney = 0;
            }
        }
        else if (airandombetting == 3)
        {
            Console.WriteLine("다이");
        }
    }
}

배팅

전체적인 흐름으로 기본배팅 > 카드 분배 > 배팅 > 카드 분배 > 배팅인데 각자(ai, player)의 소지 돈과 배팅을 담는 변수로  뒀다. 인간적 언어로 하프 일시 배팅 * 3등 만들었고  ai 배팅은 쉽게 Random 사용하여 3개 무작위로 뽑게 했다.

또한 bettinggap을 만들었고 소지 돈이 배팅 돈보다 작으면 그 차이만큼 bettinggap 넣어서 다음 순서는 배팅금액- bettinggap을 하게 해 실제로 손해 보지 않게 만들었고 

소지돈이 배팅금보다 많지만 배팅 할려는 돈이 소지 돈보다 큰 상황도 처리 했다.

 

정리

처음 생각한 것과 달리 추가 및 변경이 많았다. 이로 인해 애자일을 몸소 느끼게 되었다.

또한 많은 실패 디버그 과정이 있었지만 한번 성공하니 과정을 잊게 되었다. 

 

 

'과제' 카테고리의 다른 글

Day14 - Class 심화  (2) 2024.12.09
Day14 - Class 1,2,3단계  (0) 2024.12.09
Day8 - 함수, 피보나치 수열  (0) 2024.11.29
Day4 - 연산  (1) 2024.11.29
Day7 - 3의 배수 행렬, if (C#)  (0) 2024.11.29