Bonjour bonjour.
Alors voila comme projet de cour on doit faire un jeu de plateau et pour ma part j'ai décidé de faire un jeu de poker (Texas Hold'em) car ce jeu me passionne.
Après être passé par une première phase où j'ai implémenter les règles (c'est-à-dire le déroulement d'un coup) en mode console. Il me reste à développer une interface graphique à présent.
Bon alors j'ai choisit Qt Jambi car cela me semblait être une bibliothèque intéressante et surtout au niveau de la gestion des événements.

Bon voici pour le contexte.

Voici la hiérarchie de mon programme

Party --> classe principale de gestion d'une partie
Table --> classe s'occupant de la gestion du pot et du tour de table
Player
Card --> une carte
Dealer --> s'occupe de la gestion du deck de cartes
Board --> représente le tableau (cartes communes à tous les joueurs)

Ensuite pour la partie graphique

MainFrame --> fenetre de démarrage du programme
TableFrame --> fenetre d'une partie

----------------------------------------------

Pour l'instant au niveau de l'interface graphique mon but est de pouvoir afficher
tous les joueurs et leurs cartes
Pour cela j'ai défini deux signaux dans ma classe Party:

playersChanged --> dit a TableFrame que la composition des joueurs a changer
cardsChanged --> dit a TableFrame que la composition des cartes a changer

J'ai deux slots correspondant auxquels je connecte ces signaux dans TablFrame:

displayPlayers --> affiche les joueurs encore dans le coup
displayCards --> affiche les cartes

Cependant quand je fais tourner mon programme il n'affiche strictement rien, c'est comme si le signal n'avait pas été envoyé. Je suis presque certain que ce n'est pas un problème d'update graphique car en essayant une autre méthode cela marche (simplement apeller directement displayCards a partir de Party)

Voici les fichiers intéressants:

TableFrame
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
public class TableFrame extends QWidget{
 
    private QWidget fenetre;
    private Party party;
 
    //top
    private QLabel table_zone;
 
    //bottom
    private QFrame action_zone;
    //bottom left
    private QPushButton quit;
    private QPushButton pause;
    private QPushButton new_party;
    //bottom center
    private QGroupBox actions;
    private QGridLayout bottom_center_grid;
    	//vue 0
    private QLabel message_acceuil;
    	//vue 1
    private QLabel message_tour;
    	//vue 2
    private QPushButton check;
    private QPushButton fold;
    private QPushButton call;
    private QPushButton raise;
    private QSlider amount_slide;
    private QSpinBox amount_spin;
    //bottom right
    private QTabWidget info;
    private QTextEdit histo;
    private QTextEdit stat;
 
    //les joueurs
    private QPoint p_p[];
    private QLabel p[];
    public void initializePlayers(int player_nb) {
	p_p = new QPoint[player_nb];
	p = new QLabel[player_nb];
	setPlayersLocation(player_nb);
    }
    //Il ne peut y avoir des tables de plus de 10 joueurs
    private void setPlayersLocation(int player_nb) {
	for(int i=0; i<player_nb; i++){
	    switch(i){ 
	    case 0: p_p[i] = new QPoint(120, 115); break;
	    case 1: p_p[i] = new QPoint(270, 50); break;
	    case 2: p_p[i] = new QPoint(480, 50); break;
	    case 3: p_p[i] = new QPoint(630, 115); break;
	    case 4: p_p[i] = new QPoint(655, 215); break;
	    case 5: p_p[i] = new QPoint(590, 315); break;
	    case 6: p_p[i] = new QPoint(440, 350); break;
	    case 7: p_p[i] = new QPoint(300, 350); break;
	    case 8: p_p[i] = new QPoint(150, 315); break;
	    case 9: p_p[i] = new QPoint(95, 215); break;
	    }
	}
    }
    //fin des operations d'initialisation des joueurs
 
    //les cartes
    private QPoint c_p[];
    private QLabel c[][];
    public void initializeCards(int player_nb){
	c_p = new QPoint[player_nb];
	c = new QLabel[player_nb][2];
	setCardsLocation(player_nb);
 
    }
    private void setCardsLocation(int player_nb) {
	for(int i=0; i<player_nb; i++){
	    switch(i){ 
	    case 0: c_p[i] = new QPoint(20, 115); break;
	    case 1: c_p[i] = new QPoint(170, 50); break;
	    case 2: c_p[i] = new QPoint(540, 50); break;
	    case 3: c_p[i] = new QPoint(690, 115); break;
	    case 4: c_p[i] = new QPoint(715, 215); break;
	    case 5: c_p[i] = new QPoint(650, 315); break;
	    case 6: c_p[i] = new QPoint(500, 350); break;
	    case 7: c_p[i] = new QPoint(200, 350); break;
	    case 8: c_p[i] = new QPoint(50, 315); break;
	    case 9: c_p[i] = new QPoint(0, 215); break;
	    }
	}
    }
    //fin des operations d'initialisation des cartes
 
    /*
     * Global
     */
    public TableFrame(){
	super();
	fenetre = new QWidget(this);
	fenetre.setUpdatesEnabled(true);
	initializeFrame();
	party = new Party();
	initializePlayers(party.getPlayer_nb());
	initializeCards(party.getPlayer_nb());
	party.playersChanged.connect(this, "displayPlayers(java.util.ArrayList)");
	party.cardsChanged.connect(this, "displayCards(java.util.ArrayList)");
    }
 
    private void initializeFrame(){
	createTop();
	createBottom();
 
	//Box vertivale principale
	QVBoxLayout mainbox = new QVBoxLayout();
	mainbox.addWidget(table_zone);
	mainbox.addWidget(action_zone);
 
	fenetre.setLayout(mainbox);
	fenetre.setVisible(true);
    }
 
 
    /*
     * Top
     */
    private void createTop(){
	//Image de la table
	table_zone = new QLabel();
	table_zone.setPixmap(new QPixmap("img/table-brown-goodsize.png"));
 
	//On superpose dessus les autres images
    }
 
    public void displayPlayers(ArrayList<Player> table_round){
	for(Player player: table_round){
	    p[player.getId()] = new QLabel(tr("Joueur "+player.getId()+"\n"+player.getStack()), table_zone);
	    p[player.getId()].move(p_p[player.getId()]);
	}
	fenetre.update();
    }
 
    //note: s:0 h:1 d:2 c:3  as:12
    public void displayCards(ArrayList<Player> table_round){
	for(Player p: table_round){
	    if(p instanceof Human_Controlled && p.getStill_in()){
		c[p.getId()][0] = new QLabel(table_zone);
		c[p.getId()][0].setPixmap(new QPixmap("img/cards-d/"+(p.getCard1().getStrength())+"_"+p.getCard1().getColor()+".png")); 
		c[p.getId()][0].move(c_p[p.getId()]);
		c[p.getId()][1] = new QLabel(table_zone);
		c[p.getId()][1].setPixmap(new QPixmap("img/cards-d/"+(p.getCard2().getStrength())+"_"+p.getCard2().getColor()+".png")); 
		c[p.getId()][1].move(c_p[p.getId()].x()+40, c_p[p.getId()].y());
	    }else if(p.getStill_in()){
		c[p.getId()][0] = new QLabel(table_zone);
		c[p.getId()][0].setPixmap(new QPixmap("img/cards-d/back_yellow.png")); 
		c[p.getId()][0].move(c_p[p.getId()]);
		c[p.getId()][1] = new QLabel(table_zone);
		c[p.getId()][1].setPixmap(new QPixmap("img/cards-d/back_yellow.png")); 
		c[p.getId()][1].move(c_p[p.getId()].x()+40, c_p[p.getId()].y());
	    }
	}
	fenetre.update();
    }
 
    /*
     * Bottom
     */
    private void createBottom(){
	action_zone = new QFrame();
 
	//Premiere box horizontale
	QHBoxLayout hbox = new QHBoxLayout();
 
	//bottom right
	quit = new QPushButton("Quitter");
	quit.clicked.connect(this, "close()");
	pause = new QPushButton("Pause");
	new_party = new QPushButton("Nouvelle Partie");
	QVBoxLayout vbox = new QVBoxLayout();
	vbox.addWidget(quit);
	vbox.addWidget(pause);
	vbox.addWidget(new_party);
 
	//bottom center
	actions = new QGroupBox(tr("Actions"));
	actions.setFixedWidth(350);
	createBottomCenter(0);
	actions.setLayout(bottom_center_grid);
 
	//bottom left
	info = new QTabWidget();
	info.setFixedWidth(200);
	QWidget tab1 = new QWidget();
	QWidget tab2 = new QWidget();
	info.addTab(tab1, tr("&Historique"));
	info.addTab(tab2, tr("&Statistiques"));
 
	hbox.addLayout(vbox);
	hbox.addWidget(actions);
	hbox.addWidget(info);
	action_zone.setLayout(hbox);
    }
 
    /*L'argument vue sert a dire ce qu'on doit afficher
     *  0 est la vue de depart
     *  1 correspond a la vue qd ce n'est pas au joueur de parler
     *  2 correspond a la vue qd c'est au joueur de parler
     */
    public void createBottomCenter(int vue){
	if(bottom_center_grid != null){
	    bottom_center_grid.dispose();
	}
	bottom_center_grid = new QGridLayout();
	switch(vue){
	case 0: 
	    message_acceuil = new QLabel("Bonne partie et surtout good luck !");
	    bottom_center_grid.addWidget(message_acceuil, 1, 1);
	    break;
	case 1:
	    message_tour = new QLabel("Ce n'est pas a votre tour de jouer."); 
	    bottom_center_grid.addWidget(message_tour, 1, 1);
	    break;
	case 2:
	    fold = new QPushButton("Fold");
	    call = new QPushButton("Call");
	    raise = new QPushButton("Raise");
	    amount_slide = new QSlider(Qt.Orientation.Horizontal);
	    amount_spin = new QSpinBox();
	    bottom_center_grid.addWidget(fold, 0, 0);
	    bottom_center_grid.addWidget(call, 0, 1);
	    bottom_center_grid.addWidget(raise, 0, 2);
	    bottom_center_grid.addWidget(amount_slide, 1, 0, 1, 2);
	    bottom_center_grid.addWidget(amount_spin, 1, 2);
	    break;
	}
	fenetre.update();
    }
 
}

Party (méthode intéressante: newCard_round (les autres ne sont pas encore appelées))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
 
public class Party extends QSignalEmitter{
 
    /*
     * Signaux
     */
    public Signal1<ArrayList<Player>> playersChanged = new Signal1<ArrayList<Player>>();
    public Signal1<ArrayList<Player>> cardsChanged = new Signal1<ArrayList<Player>>();
    public Signal2<Board,Integer> boardChanged = new  Signal2<Board, Integer>();
 
    /*
     * Attributs
     */
    //
    private Table table;
    private Board board;
    private ArrayList<Player> table_round;
    private Dealer dealer;
 
    //
    private int start_stack, player_nb;
    private ArrayList<Card> ordered_deck;
    private ArrayList<Player> players;
    private int dealer_id;
    private int nb_play = 0; 
    private Player bb_player;
    private LinkedList<Card> deck;
 
    //
    private Player relanceur;
    private int nbPlayersIn;
    private int p;
    private int tab_pos;
 
    /*
     * Constructeurs
     */
    public Party(){
	//Creation des differents acteurs
	table = new Table(2000, 10, 15);   //initialisation de la table, 10 joueurs stack de 2000, petite blinde de 15.
	board = new Board();
	start_stack = table.getStart_stack();
	player_nb = table.getPlayer_nb();
	ordered_deck = table.createOrdered_deck();
	players = table.createPlayers(start_stack, player_nb);
	dealer_id = (int) (Math.random()*player_nb);
	table_round = table.createTable_round(dealer_id, players, player_nb);
	dealer = new Dealer(ordered_deck, table_round, dealer_id);
	nb_play = 0; //nombre de tours joues
 
	newCard_round();
    }
 
    /*
     * Accesseurs
     */
    public int getPlayer_nb() {
        return player_nb;
    }
 
    /*
     * Mutateurs
     */
    public void setPlayer_nb(int player_nb) {
        this.player_nb = player_nb;
    }
 
 
    /*
     * Autres methodes
     */
    //methode de debut de tour de carte
    public void newCard_round(){
	//Melange des cartes
	deck = dealer.shuffle();
 
	int p_player_nb = player_nb; //mise a jour du nombre de joueurs
	for(int j=0; j<p_player_nb; j++){
	    Player p = table_round.get(j);
	    if(p.getStack() <= 0){
		player_nb--;
	    }
	}
	if(player_nb <= 1){endOfGame();} //si il n'y a plus qu'un seul joueur on a fini la partie
 
	//********************************************************************************************************************************
	/*
	 * *** Si on est pas au premier tour, on regarde si la small blinde est eliminee: (au premeir tour, les verifs ne servent a rien)
	 * 				si elle est eliminee, le nouvel ID du dealer est le premier joueur dont le stack est non nul
	 * 									  en partant du dealer precedent. ( TODO BUG POSSIBLE: ne parvient pas a retrouve a SB)
	 * 				
	 * 				si elle n'est pas eliminee, l'ID du dealer est celui de la SB.
	 * *** player_nb (nombre de joueur en jeu) est mis a jour.
	 * *** le nouveau tour de table est cree
	 * 
	 * MODIF: la mise a jour du nombre de joueurs est sortie de ce morceau (voir un peu au dessus)
	 */
	if(nb_play > 0){
	    if(player_nb > 2 || (player_nb == 2 && p_player_nb == 2)){ //cas a plus de deux joueurs
		if(table_round.get(0).getPosition() == 0){ //cas de base
		    if(table_round.get(0).getStack() == 0){ //la SB du tour precedent a ete eliminee
			ListIterator<Player> it = table_round.listIterator(p_player_nb);
			while(it.hasPrevious()){
			    Player p = it.previous();
			    if(p.getStack() != 0){
				dealer_id = p.getId();
				break;
			    }
			}
		    }else{ //cas de base
			dealer_id = table_round.get(0).getId();
		    }
		}else{ //au tour precedent il n'y avait pas de SB => le dealer ne bouge pas si il n'a pas ete elimine
		    if(table_round.get(p_player_nb-1).getStack() == 0){
			ListIterator<Player> it = table_round.listIterator(p_player_nb);
			while(it.hasPrevious()){
			    Player p = it.previous();
			    if(p.getStack() != 0){
				dealer_id = p.getId();
				break;
			    }
			}
		    }else{ 
			dealer_id = table_round.get(p_player_nb-1).getId();
		    }
		}
	    }else{ // si on passe de trois a deux joueurs alors la BB passe SB peut importe le cas
		ListIterator<Player> it = table_round.listIterator(0);
		while(it.hasNext()){
		    Player p = it.next();
		    if(p.getStack() != 0 && p.getPosition() >= 1){
			dealer_id = p.getId();
			break;
		    }
		}
	    }
	    dealer.setId(dealer_id);	
	    table_round = table.createTable_round(dealer_id, players, player_nb); //ce table_round est la nouveau table_round (celui qu'on utilise ce tour-ci)
	}
	//***********************************************************************************************************************************
	//on met a jour l'affichage des joueurs
	playersChanged.emit(table_round);
 
	//Mise des blinds
	bb_player = table.postBlinds(table_round, player_nb);
 
	//Distribution des cartes -> gere aussi l'affichage des cartes
	dealer.deal(deck);
	cardsChanged.emit(table_round);
 
	//Jouer un coup
	relanceur = bb_player;//le relanceur initial est la BB
	p = 2; //numero du joueur courant
	//si on est à deux joueurs, la SB qui est aussi le dealer parle en premier
	// OU
	//si le joueur en position 1 dans le table round est en realite le joueur en
	// position 2 car la petite blind a ete eliminee au tour precedent dans ce cas
	// on fait bien evidement jouer ce joueur la en premier
	if(player_nb == 2 || table_round.get(1).getPosition() == 2){p=1;}
 
	tab_pos = 0; //position dans le tableau
	nbPlayersIn = player_nb; //nombre de joueurs encore dans le coup
 
	//on lance un nouveau tour de parole
	//speak_round();
    }
 
    //methopde de debut de tour de parole -> ne s'effectue que lorsqu'on recommence un tour de parole
    public void newSpeak_round(){
 
	p = 0;
	if(nbPlayersIn == 1){endOfPot();}//empeche de montre les dernieres cartes quand le pot est gagne par un joueur.
								//si tout le monde a fold, on break tout.
	if(tab_pos < 3){	
	    tab_pos++;
	    switch(tab_pos){
	    case 1: 
		dealer.putFlop(deck, board); 
		boardChanged.emit(board, 1);
		break;
	    case 2: 
		dealer.putTurn(deck, board);
		boardChanged.emit(board, 2);
		break;
	    case 3: 
		dealer.putRiver(deck, board);
		boardChanged.emit(board, 3);
		break;
	    default: break;
	    }
	}else{endOfPot();}
 
	//On reinitialise la parole
	for(int i=0; i<player_nb; i++){
	    table_round.get(i).setSpoken(false);
	}
 
	//On initialise le relanceur au premier de parole
	for(int i=0; i<player_nb; i++){
	    if(table_round.get(i).getStill_in() == true && table_round.get(i).getStack() > 0){
		relanceur = table_round.get(i);
		break;
	    }
	}
 
	int nb = 0; //nb represente le nombre de joueurs ayant encore la possibilite de parler
	for(int k=0; k<player_nb; k++){
	    if(table_round.get(k).getStack() > 0 && table_round.get(k).getStill_in() == true){
		nb++;
	    }
	}
 
	if(table_round.get(p).getSum_bet() != relanceur.getSum_bet() || table_round.get(p).getSpoken() == false){
	    speak_round();
	}else if(nb<=1){
	    newSpeak_round();
	}else{
	    endOfPot();
	}
    }
 
    //methode de tour de parole
    public void speak_round(){
	Player c_p = table_round.get(p);
	if(table_round.get(p) instanceof Human_Controlled){//le joueur humain doit parler
	    if(c_p.getStack() <= 0 || c_p.getStill_in() == false){
		if(c_p.getStill_in() == true){
		    c_p.setSpoken(true);
		}
		if(p >= player_nb-1){p = 0;}else{p++;}
	    }else{
		humanSpeak();
	    }
	}else{ //le CPU parle
	    CPUSpeak(c_p);
	}
	cardsChanged.emit(table_round);
    }
 
    public void CPUSpeak(Player c_p){
	if(c_p.getStack() <= 0 || c_p.getStill_in() == false){
	    if(c_p.getStill_in() == true){
		c_p.setSpoken(true);
	    }
	    if(p >= player_nb-1){p = 0;}else{p++;}
	}else{
	    int action = c_p.play(relanceur.getSum_bet() - c_p.getSum_bet(), board);
	    if(action == Player.FOLD || action < 0){
		nbPlayersIn --;
	    }else if(action == 0){
	    }else if(c_p.getSum_bet() <= relanceur.getSum_bet()){
		if(c_p != relanceur){
		}else{
		}
		table.setPot(table.getPot() + action);
	    }else if(c_p.getSum_bet() > relanceur.getSum_bet()){
		table.setPot(table.getPot()+ action);
		relanceur = c_p;
	    }
 
	    if(p >= player_nb-1){p = 0;}else{p++;}
 
	}
	newSpeak_round();
    }
 
    public void humanSpeak(){
	while(true){
	    //boucle infinie quand le joueur humain joue
	}
    }
    //slot afin de pouvoir quitter la boucle infinie sur le player
    public void humanSpoken(int action){
	Player c_p = table_round.get(p);
	if(action == Player.FOLD || action < 0){
	    nbPlayersIn --;
	}else if(action == 0){
	}else if(c_p.getSum_bet() <= relanceur.getSum_bet()){
	    if(c_p != relanceur){
	    }else{
	    }
	    table.setPot(table.getPot() + action);
	}else if(c_p.getSum_bet() > relanceur.getSum_bet()){
	    table.setPot(table.getPot()+ action);
	    relanceur = c_p;
	}
 
	if(p >= player_nb-1){p = 0;}else{p++;}
	newSpeak_round();
    }
 
    //methode de fin d'un tour de carte
    public void endOfPot(){
	//Maintenant on appelle la fonction s'occupant de gerer la repartition du pot entre les joueurs
	distribuePot(table_round, nbPlayersIn, board);
 
	//On fait les reinitialisation
	table.setPot(0);
	for(int i=0; i<player_nb; i++){
	    Player player = table_round.get(i);
	    player.setSpoken(false);
	    player.setStill_in(true);
	    player.setSum_bet(0);
	}
 
	nb_play++;
 
	if(player_nb > 1){
	    newCard_round();
	}else{
	    endOfGame();
	}
    }
 
    //methode de fin de partie
    public void endOfGame(){
 
    }
 
    //methode de distribution de pot
    private static void distribuePot(ArrayList<Player> table_round, int numberIn, Board b){
 
	if(table_round != null){
	    if(numberIn > 1){//cas general, plusieurs joueurs se disputent le pot.
 
		/*
		 * on cree un tableau et on le met a jour.
		 * 1) on met dans un tableau secondaire tous les joueurs ayant la main la plus forte dont le sumbet est > 0
		 * 2) on recupere le joueur dont le stack est le plus petit
		 * 3) on retire son sumBet a tous les joueurs du table round dont le sumbet est >0.
		 * 4) on divise le total des jetons obtenus par le nombre d occurences.
		 * 5) on recommence tant qu un joueur a un sumbet>0
		 */
 
		//tableau reprenant tous les joueurs se disputant le pot
		Player all_winners[] = new Player[numberIn];
		//on remplit le tableau avec les joueurs dont le sumbet est > 0 et qui sont tjs dans le coup, grace a l' accumulateur 'acc3'
		int acc3 = 0;
		for(Player p: table_round){
		    if(p.getSum_bet() > 0 && p.getStill_in() == true){
			all_winners[acc3] = p;
			acc3 ++;
		    }
		}
 
		//creation de lindice pour la boucle 'do..while(nbroueurs>0)'
		//en francais, on attribue les pots tant qu'un joueur a un sumbet > 0
		int nbrjoueurs = numberIn;
 
		int nbboucle = 0;//%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
		do{//debut de la boucle
 
		    long winningHand = 0; //force de la meilleur main
		    int nb_winners = 0; //nombre de joueurs ayant la meilleur main
		    Player winner = all_winners[0]; //par defaut, initialise au premier joueur du tableau
		    				    //sert uniquement dans le cas d une unique occurence de la main gagnante
 
		    // on compte le nombre de joueurs avec le meilleur jeu
		    // on ne tient compte que des joueurs ayant encore un sumbet > 0
		    for(Player p1: all_winners){
			long mainJoueur = p1.whatHand(b);
			int sumBetJoueur = p1.getSum_bet();
			if(mainJoueur > winningHand && sumBetJoueur > 0){
			    winningHand = mainJoueur;
			    winner = p1;
			    nb_winners = 1;
			}else if(mainJoueur == winningHand && sumBetJoueur > 0){
			    nb_winners ++;
			}
			if(sumBetJoueur <= 0){ //chaque fois qu un sumBet = 0 est repere, cela veut dire que un joueur en moins est concerne 
			                       //par la division du pot
			    nbrjoueurs --;
			}
		    }
		    System.out.println("nb_winners: "+nb_winners);
		    System.out.println("nbrjoueurs: "+nbrjoueurs);
 
		    //si plus aucun joueur n'est concerne par le pot, on break la boucle
		    if(nbrjoueurs <= 0){break;}
 
		    //si il y a plus d un joueur avec la meilleure main courante, on les retrouve et on les place dans un tableau
		    //apres cette boucle, all_winners est mis a jour
		    //si 1 seul gagnant => voir le else
		    if(nb_winners > 1){
			//tableau intermediaire
			Player new_winners[] = new Player[nb_winners];
			int acc1 = 0;
			for(Player p: all_winners){
			    if(acc1 < nb_winners){
				if(p.whatHand(b) == winningHand){
				    new_winners[acc1]=p;
				    acc1 ++;
				}
			    }else{
				System.out.println("accumulateur trop grand dans la boucle ou on retrouve les possssuers des meilleurs jeux");
				break;
			    }
			}
			all_winners = new_winners;
 
			//on recupere le sum_bet le plus petit
			int smallestSumBet = all_winners[0].getSum_bet();
			for(Player p2: all_winners){
			    int sumBetPlayer = p2.getSum_bet();
			    if(sumBetPlayer < smallestSumBet && sumBetPlayer > 0){
				smallestSumBet = sumBetPlayer;
			    }
			}
 
			//apres avoir recupere le smallsumbet, on recupere le pot qui concerne ce joueur
			//on fait attention a ne pas mettre un sumbet negatif quand le sumbet est mis a jour
			int potConcerned = 0;
			for(Player p3: table_round){
			    int sumBetJoueurCourant = p3.getSum_bet();
			    if(sumBetJoueurCourant <= smallestSumBet && sumBetJoueurCourant > 0){
				potConcerned += sumBetJoueurCourant;
				p3.setSum_bet(0);
			    }else if(sumBetJoueurCourant > smallestSumBet){
				potConcerned += smallestSumBet;
				p3.setSum_bet(sumBetJoueurCourant - smallestSumBet);
			    }else{
 
				System.out.println("Le joueur en position: "+p3.getPosition() + " a un sumbet negatif, c'est moche!");
				p3.setSum_bet(0);
			    }
			}
			System.out.println("Les joueurs se separent un pot de: "+potConcerned);
			//on attribue les morceaux de pots
			int cas = 1;
			for(Player p4: all_winners){
			    System.out.println("Le joueur "+p4.getPosition()+" stack begin: "+p4.getStack());
			    if(cas == 1){
				p4.setStack(p4.getStack() + (potConcerned % nb_winners));
				cas++;
			    }
			    p4.setStack(p4.getStack() + (potConcerned / nb_winners));
			    System.out.println("Le joueur "+p4.getPosition()+" stack after: "+p4.getStack()+"\n");
			}
 
		    //cas du representant unique de la meilleure main	
		    }else if(nb_winners == 1){
			//on forme le pot a attribuer
			int potConcerned = 0;
			int sumBet = winner.getSum_bet();
			System.out.println("Le joueur "+winner.getPosition()+" stack begin: "+winner.getStack());
			for(Player p3: table_round){
			    int sumBetJoueurCourant = p3.getSum_bet();
			    if(sumBetJoueurCourant <= sumBet && sumBetJoueurCourant > 0){
				potConcerned += sumBetJoueurCourant;
				p3.setSum_bet(0);
			    }else if(sumBetJoueurCourant > sumBet){
				potConcerned += sumBet;
				p3.setSum_bet(sumBetJoueurCourant - sumBet);
			    }else if(sumBetJoueurCourant != 0){
				System.out.println("Le joueur en position: "+p3.getPosition() + " a un sumbet negatif, c'est moche!");
				p3.setSum_bet(0);
			    }
			}
			System.out.println("Le joueur gagnant gagne un pot de: "+potConcerned);
			winner.setStack(winner.getStack() + potConcerned);
			System.out.println("Le joueur "+winner.getPosition()+" stack after: "+winner.getStack()+"\n");
		    }
 
		    nbboucle++;//%%%%%%%%%%%%%%%%%%%%%%%%%%
 
		}while(nbrjoueurs > 0);
 
		//On redistribue les jetons en trop du pot au joueurs ayant mise une mise superieure
		// a ce que les autres pouvant payer.
		// exemple: joueur 1 stack: 2000 bet 1000
		//		joueur 2 stack: 955 call
		//			pot = 1000 + 955 = 1955
		//		joueur 2 gagne, potConcerned = 955 + 955 = 1910
		//		il faut rendre au joueur 1 les 45 excedentaires qu'il a mise
		System.out.println("Recuperation des excedentaires");
		for(Player p: table_round){
		    int sumBetJoueurCourant = p.getSum_bet();
		    if(sumBetJoueurCourant != 0){
			System.out.println("Le joueur "+p.getPosition()+" stack begin: "+p.getStack());
			p.setStack(p.getStack() + sumBetJoueurCourant);
			p.setSum_bet(0);
			System.out.println("Le joueur "+p.getPosition()+" stack after: "+p.getStack());
		    }
		}
 
	    }else if(numberIn == 1){ //cas ou il n y a qu un seul joueur pour le pot.
		int potConcerned = 0;
		Player winner = null;
		for(Player p: table_round){
		    if(p.getStill_in() == true){ //on recupere le gagnant
			winner = p;
			System.out.println("Le joueur "+winner.getPosition()+" stack begin: "+winner.getStack());
		    }
		    potConcerned += p.getSum_bet();// on recupere le pot (faisable autrement)
		    p.setSum_bet(0);
		}
		System.out.println("Le joueur gagnant gagne un pot de: "+potConcerned);
		winner.setStack(winner.getStack() + potConcerned);
		System.out.println("Le joueur "+winner.getPosition()+" stack after: "+winner.getStack()+"\n");
 
	    }else{ //cas pour numberIn incomptable: negatif ou nul.
		System.out.println("Erreur dans la fonction distribuePot, numberIn est negatif ou nul!");
	    }
	}else{
	    System.out.println("Le table_round introduit dans la fonction distribuePot est null!");
	}
 
    }
 
}
Merci d'avance aux courageux qui auront pris le temps de lire mon message et de se pencher sur mon problème