SHOW:
|
|
- or go back to the newest paste.
1 | # http://zetcode.com/lang/tcl/io/ | |
2 | # http://wiki.tcl.tk/1549 | |
3 | # https://fr.wikipedia.org/wiki/Tool_Command_Language | |
4 | ||
5 | # --------- | |
6 | # Fonctions | |
7 | # --------- | |
8 | # Récupérer une valeur au hasard dans une liste | |
9 | proc random_pick { a_list } { | |
10 | - | # [expr int(rand() * $upper_limit + 1)] |
10 | + | lindex $a_list [ expr { int(rand() * [ llength $a_list ]) } ] |
11 | - | lindex $a_list [ expr { int(rand() * [ expr { [ llength $a_list ] - 1 } ]) } ] |
11 | + | |
12 | ||
13 | # Donner la valeur d'une carte | |
14 | proc card_value { card } { | |
15 | set value [ lindex [ regexp -all -inline "(.+) de (.+)" $card ] 1 ] | |
16 | - | set value [ lindex [ regexp -all -inline {(.+) de (.+)} $card ] 1 ] |
16 | + | |
17 | switch $value { | |
18 | valet - dame - roi { return 10 } | |
19 | as { return 11 } | |
20 | default { return $value } | |
21 | } | |
22 | } | |
23 | ||
24 | # Récupérer une carte dans le jeu | |
25 | proc pick_card { game i } { | |
26 | upvar $game a_game | |
27 | - | puts $i |
27 | + | |
28 | set a_game $card | |
29 | return [ lindex $card $i ] | |
30 | } | |
31 | ||
32 | # Récupérer une carte dans le jeu | |
33 | proc pick_name { names i } { | |
34 | upvar $names a_names | |
35 | set name [ lreplace $a_names $i $i ] | |
36 | set a_names $name | |
37 | return [ lindex $name $i ] | |
38 | } | |
39 | ||
40 | # --- | |
41 | # Jeu | |
42 | # --- | |
43 | # Noms | |
44 | set names { | |
45 | Yannick Aurelie Guillaume Benoit Hugo Aymeric | |
46 | George Jeremy Matthieu Romain Elisa Corentin | |
47 | } | |
48 | ||
49 | # Cartes | |
50 | set cards { 2 3 4 5 6 7 8 9 10 valet dame roi as } | |
51 | ||
52 | # Types | |
53 | set types { coeur pique trefle carreau } | |
54 | ||
55 | # Création du jeu de cartes | |
56 | set game [ list ] | |
57 | ||
58 | - | set player(Yannick) [ list ] |
58 | + | |
59 | foreach type $types { | |
60 | lappend game "$card de $type" | |
61 | - | lappend player(Yannick) [ pick_card game [ lsearch $game [ random_pick $game ] ] ] |
61 | + | |
62 | } | |
63 | ||
64 | - | puts $player(Yannick) |
64 | + | set players [ list ] |
65 | ||
66 | - | set score(Yannick) 0 |
66 | + | |
67 | random_pick $names | |
68 | } | |
69 | - | set score(Yannick) [ expr { $score(Yannick) + [ card_value [ lindex $player(Yannick) $i ] ] } ] |
69 | + | |
70 | # set nb_players [ gets stdin ] | |
71 | set nb_players 3 | |
72 | - | puts $score(Yannick) |
72 | + | |
73 | if { $nb_players > [ llength $names ] } { | |
74 | - | # puts $player(Yannick) |
74 | + | set nb_players [ llength $names ] |
75 | } | |
76 | - | # gets stdin |
76 | + | |
77 | for { set i 0 } { $i < $nb_players } { incr i } { | |
78 | # puts $names | |
79 | ||
80 | set name [ random_pick $names ] | |
81 | pick_name names [ lsearch $names $name ] | |
82 | lappend players $name | |
83 | ||
84 | set player($name) [ list ] | |
85 | set score($name) 0 | |
86 | ||
87 | for { set j 0 } { $j < 3 } { incr j } { | |
88 | set card [ random_pick $game ] | |
89 | lappend player($name) $card | |
90 | set score($name) [ expr { $score($name) + [ card_value $card ] } ] | |
91 | pick_card game [ lsearch $game $card ] | |
92 | } | |
93 | ||
94 | # puts $name | |
95 | } | |
96 | ||
97 | parray player | |
98 | ||
99 | puts {} | |
100 | ||
101 | set nb_victories 0 | |
102 | ||
103 | foreach name $players { | |
104 | if { $score($name) == 21 } { | |
105 | incr nb_victories | |
106 | } | |
107 | } | |
108 | ||
109 | foreach name $players { | |
110 | if { $score($name) == 21 } { | |
111 | if { $nb_victories == 1 } { | |
112 | set victory victoire | |
113 | } else { | |
114 | set victory egalite | |
115 | } | |
116 | } else { | |
117 | set victory defaite | |
118 | } | |
119 | ||
120 | puts "Score de $name : $score($name) - $victory" | |
121 | } |