사용 목적
배열값에 랜덤으로 번호를 생성을한다.
대신 조건이 있다.
예를 들어서..
Game_Round[0,7] : 12, 32, 8, 20, 19, 32, 41
Game_Round[1,7] : 42, 19, 9, 35, 49, 32, 9
Game_Round[2,7] : 11, 14, 10, 5, 15, 35, 11
.
.
이런식으로...Game_Round[0,7]값들중 같은 값이 들어가지 않도록 while돌려서 체크한다.
또한 숫자가 작은순으로 정렬할수 있도록 구현하려합니다.
짱구를 굴려서 해보려했는데 ㅡ.,ㅡ 힘드네영!
//배열선언
Game_Round : Array[0..4, 0..6] of String;
function TForm1.Number_Create : Boolean;
var
Round, Number : Integer;
begin
Randomize; // 초기화
for Round := 0 to 4 do begin
for Number := 0 to 6 do begin
Game_Round[Round, Number] := IntToStr(RANDOM(49)+1);
end;
end;
Result := TRUE;
end;
흠.. 별로 어려워 보이지는 않는데..
그냥, 함수별로 기능을 분리해서 만들어봤습니다..
아래에 소스 뿌립니다..
procedure TForm1.BitBtn1Click(Sender: TObject);
//배열중 유일한값 검색 및 확정
Function FindUnique(var ar_Array: Array of Integer; Value:Integer): Integer;
Var
I: Integer;
Begin
I := Low(ar_Array);
While I <= High(ar_Array) Do
Begin
If ar_Array[I] = Value Then
Begin
I := Low(ar_Array)-1;
Value := Random(49)+1;
End;
I := I + 1;
End;
Result := Value;
End;
//난수값을 입력할 배열 위치 검색
Function FindIndex(var ar_Array: Array of Integer; Value:Integer): Integer;
Var
I: Integer;
Begin
For I := Low(ar_Array) To High(ar_Array) Do
If Value < ar_Array[I] Then
Begin
Result := I;
Exit;
End;
End;
//정렬
Procedure MoveData(var ar_Array: Array of Integer; Y, Index:Integer);
Var
I: Integer;
Begin
For I := High(ar_Array)-1 DownTo Index Do
Begin
ar_Array[I+1] := ar_Array[I];
StringGrid1.Cells[I+1, Y] := IntToStr(ar_Array[I]);
Application.ProcessMessages;
End;
End;
Var
ll_X, ll_Y, ll_Value, ll_Idx: Integer;
l_Array: Array[0..4,0..6] Of Integer;
begin
For ll_Y := 0 To 4 Do
For ll_X := 0 To 6 Do
Begin
l_Array[ll_Y,ll_X] := ((ll_Y+1)*100) + (ll_X+1);
StringGrid1.Cells[ll_X, ll_Y] := IntToStr(l_Array[ll_Y,ll_X]);
End;
Randomize;
For ll_Y := 0 To 4 Do
For ll_X := 0 To 6 Do
Begin
ll_Value := FindUnique(l_Array[ll_Y], Random(49)+1);
ll_Idx := FindIndex(l_Array[ll_Y], ll_Value);
MoveData(l_Array[ll_Y], ll_Y, ll_Idx);
l_Array[ll_Y, ll_Idx] := ll_Value;
End;
For ll_Y := 0 To 4 Do
For ll_X := 0 To 6 Do
StringGrid1.Cells[ll_X, ll_Y] := IntToStr(l_Array[ll_Y, ll_X]);
end;