델파이

델파이/Delphi ] 심심해서 만들어본 lotto 게임

il-ma-re 2024. 7. 10. 15:34
728x90

안녕하세요, 일마레입니다.

 

업무를 보다 무료함을 느껴 로또 게임을 만들어 보았다.

한 장에 5천원 3번이 당첨된 적은 있으나...

더 이상의 금액은 무리였다.

 

과연 당첨이 될까...?

procedure TForm1.Button1Click(Sender: TObject);

// mm_lotto : 폼에 메모 하나 올려놓았음.
  const  
  BallMax = 45;
  SelectionMax = 6;
  SelectCount = 5;

  procedure QuickSort(var A: array of Integer; L, R: Integer);
  var
    I, J, P, T: Integer;
  begin
    if L < R then
    begin
      I := L;
      J := R;
      P := A[(L + R) div 2]; // Pivot 값 선택
      repeat
        while A[I] < P do
          Inc(I);
        while A[J] > P do
          Dec(J);
        if I <= J then
        begin
          T := A[I];
          A[I] := A[J];
          A[J] := T;
          Inc(I);
          Dec(J);
        end;
      until I > J;
      QuickSort(A, L, J); // 왼쪽 부분 배열 정렬
      QuickSort(A, I, R); // 오른쪽 부분 배열 정렬
    end;
  end;
var
  i,cnt,j: Integer;
  lotto : string;
  randomNumber: Integer;
  randomNumbers: array of Integer;
  probabilities: array of Double;
  isDuplicate: Boolean;
begin
SetLength(randomNumbers, 6);
SetLength(probabilities, 45); // 각 숫자마다 확률을 저장하는 배열

    for cnt := 0 to SelectCount - 1 do
    begin
        Randomize; // 시드 값을 초기화하여 매번 다른 난수를 얻을 수 있도록 함
        for i := 0 to 5 do
        begin
          repeat
            randomNumber := Random(45) + 1; // 1부터 45까지의 난수 생성
            isDuplicate := False;
            if Random <= probabilities[randomNumber] then
            else
            begin
              // 다른 숫자 선택
              repeat
                randomNumber := Random(45) + 1;
              until Random <= probabilities[randomNumber];
            end;
            for j := 0 to i - 1 do
            begin
              if randomNumbers[j] = randomNumber then
              begin
                isDuplicate := True;
              end;
            end;
          until not isDuplicate;
          randomNumbers[i] := randomNumber;
        end;

    // 정렬된 숫자 출력
        lotto := '';
        QuickSort(randomNumbers, Low(randomNumbers), High(randomNumbers));
        for i := 0 to 5 do
        begin
            if  i = 5 then
            begin
                lotto := lotto + '-' + IntToStr(randomNumbers[i]);
            end else
            if  i = 0 then
            begin
                lotto := IntToStr(randomNumbers[i]);
            end else
            begin
                lotto := lotto + '-' + IntToStr(randomNumbers[i]);
            end;
        end;
         mm_lotto.Lines.Add(lotto);
    end;

 

심심풀이로 한 번 해보시는건 어떨까요?ㅎㅎ

화이팅!

728x90
LIST