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