Deal cards for FreeCell: Difference between revisions
Content added Content deleted
(→{{header|Python}}: Modified code to run with both python2 and python3) |
MaiconSoft (talk | contribs) (Added Delphi example) |
||
Line 972: | Line 972: | ||
JD 7D 8H 9C 2H QD 4C 5H |
JD 7D 8H 9C 2H QD 4C 5H |
||
KC 8D 2S 3S</pre> |
KC 8D 2S 3S</pre> |
||
=={{header|Delphi}}== |
|||
{{libheader| System.SysUtils}} |
|||
{{Trans|C#}} |
|||
<lang Delphi> |
|||
program Deal_cards_for_FreeCell; |
|||
{$APPTYPE CONSOLE} |
|||
uses |
|||
System.SysUtils; |
|||
type |
|||
TRandom = record |
|||
Seed: Int64; |
|||
function Next: Integer; |
|||
end; |
|||
TCard = record |
|||
const |
|||
kSuits = '♣♦♥♠'; |
|||
kValues = 'A23456789TJQK'; |
|||
var |
|||
Value: Integer; |
|||
Suit: Integer; |
|||
procedure Create(rawvalue: Integer); overload; |
|||
procedure Create(value, suit: Integer); overload; |
|||
procedure Assign(other: TCard); |
|||
function ToString: string; |
|||
end; |
|||
TDeck = record |
|||
Cards: TArray<TCard>; |
|||
procedure Create(Seed: Integer); |
|||
function ToString: string; |
|||
end; |
|||
{ TRandom } |
|||
function TRandom.Next: Integer; |
|||
begin |
|||
Seed := ((Seed * 214013 + 2531011) and Integer.MaxValue); |
|||
Result := Seed shr 16; |
|||
end; |
|||
{ TCard } |
|||
procedure TCard.Create(rawvalue: Integer); |
|||
begin |
|||
Create(rawvalue div 4, rawvalue mod 4); |
|||
end; |
|||
procedure TCard.Assign(other: TCard); |
|||
begin |
|||
Create(other.Value, other.Suit); |
|||
end; |
|||
procedure TCard.Create(value, suit: Integer); |
|||
begin |
|||
self.Value := value; |
|||
self.Suit := suit; |
|||
end; |
|||
function TCard.ToString: string; |
|||
begin |
|||
result := format('%s%s', [kValues[value + 1], kSuits[suit + 1]]); |
|||
end; |
|||
{ TDeck } |
|||
procedure TDeck.Create(Seed: Integer); |
|||
var |
|||
r: TRandom; |
|||
i, j: integer; |
|||
tmp: Tcard; |
|||
begin |
|||
r.Seed := Seed; |
|||
SetLength(Cards, 52); |
|||
for i := 0 to 51 do |
|||
Cards[i].Create(51 - i); |
|||
for i := 0 to 50 do |
|||
begin |
|||
j := 51 - (r.Next mod (52 - i)); |
|||
tmp.Assign(Cards[i]); |
|||
Cards[i].Assign(Cards[j]); |
|||
Cards[j].Assign(tmp); |
|||
end; |
|||
end; |
|||
function TDeck.ToString: string; |
|||
var |
|||
i: Integer; |
|||
begin |
|||
Result := ''; |
|||
for i := 0 to length(Cards) - 1 do |
|||
begin |
|||
Result := Result + Cards[i].ToString; |
|||
if i mod 8 = 7 then |
|||
Result := Result + #10 |
|||
else |
|||
Result := Result + ' '; |
|||
end; |
|||
end; |
|||
var |
|||
Deck: TDeck; |
|||
begin |
|||
Deck.Create(1); |
|||
Writeln('Deck 1'#10, Deck.ToString, #10); |
|||
Deck.Create(617); |
|||
Writeln('Deck 617'#10, Deck.ToString); |
|||
readln; |
|||
end.</lang> |
|||
{{out}} |
|||
<pre>Deck 1 |
|||
J♦ 2♦ 9♥ J♣ 5♦ 7♥ 7♣ 5♥ |
|||
K♦ K♣ 9♠ 5♠ A♦ Q♣ K♥ 3♥ |
|||
2♠ K♠ 9♦ Q♦ J♠ A♠ A♥ 3♣ |
|||
4♣ 5♣ T♠ Q♥ 4♥ A♣ 4♦ 7♠ |
|||
3♠ T♦ 4♠ T♥ 8♥ 2♣ J♥ 7♦ |
|||
6♦ 8♠ 8♦ Q♠ 6♣ 3♦ 8♣ T♣ |
|||
6♠ 9♣ 2♥ 6♥ |
|||
Deck 617 |
|||
7♦ A♦ 5♣ 3♠ 5♠ 8♣ 2♦ A♥ |
|||
T♦ 7♠ Q♦ A♣ 6♦ 8♥ A♠ K♥ |
|||
T♥ Q♣ 3♥ 9♦ 6♠ 8♦ 3♦ T♣ |
|||
K♦ 5♥ 9♠ 3♣ 8♠ 7♥ 4♦ J♠ |
|||
4♣ Q♠ 9♣ 9♥ 7♣ 6♥ 2♣ 2♠ |
|||
4♠ T♠ 2♥ 5♦ J♣ 6♣ J♥ Q♥ |
|||
J♦ K♠ K♣ 4♥</pre> |
|||
=={{header|Elixir}}== |
=={{header|Elixir}}== |
||
{{trans|Ruby}} |
{{trans|Ruby}} |