Posted to tcl by Zarutian at Fri Nov 16 02:29:09 GMT 2007view raw

  1. proc create {deck} {
  2. upvar $deck d
  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. while {[llength $cards]} {
  9. set item [lpick $cards]
  10. lappend d $item
  11. lremove cards $item
  12. }
  13. }
  14. proc lpick {list} {
  15. return [lindex $list [expr int(rand()*[llength $list])]]
  16. }
  17. proc lremove {var item} {
  18. upvar $var v
  19. set t [lsearch -exact $v $item]
  20. set v [lreplace $v $t $t]
  21. }