Posted to tcl by Zarutian at Fri Nov 16 02:43:42 GMT 2007view raw

  1. proc create {deck} {
  2. set cards ""
  3. foreach type {S H D C} {
  4. foreach value {A 2 3 4 5 6 7 8 9 10 J Q K} {
  5. lappend cards [set value][set type]
  6. }
  7. }
  8. set j 52
  9. while true {
  10. set r [expr rand()]
  11. set k [expr int(($j * $r) + 1)]
  12. set t1 [lindex $cards [expr $k -1]]
  13. set t2 [lindex $cards [expr $j -1]]
  14. lset cards [expr $j -1] $t1
  15. lset cards [expr $k -1] $t2
  16. incr j -1
  17. if {$j > 1} {
  18. continue
  19. } else {
  20. break
  21. }
  22. }
  23. upvar $deck d
  24. set d $cards
  25. }