Browse Source

Bugs correction

Leo VIALLON-GALINIER 11 months ago
parent
commit
350283959f
15 changed files with 58 additions and 29 deletions
  1. 2 0
      .gitignore
  2. 11 0
      app.py
  3. 0 0
      app.wsgi
  4. 3 2
      belote.py
  5. 4 4
      belote_ws.py
  6. 5 4
      db.py
  7. 3 0
      settings.example.py
  8. 3 1
      static/belote.css
  9. BIN
      static/favicon.ico
  10. 18 12
      static/game_script.js
  11. BIN
      static/logo.gif
  12. BIN
      static/logo.png
  13. 2 1
      templates/base.html
  14. 3 3
      templates/game_zone_jeu.html
  15. 4 2
      templates/index.html

+ 2 - 0
.gitignore

@@ -27,6 +27,8 @@ venv.bak/
27 27
 
28 28
 # Secret configuration
29 29
 settings.cfg
30
+settings.py
31
+*.sqlite
30 32
 
31 33
 # Personal conf
32 34
 static/jquery.js

+ 11 - 0
app.py

@@ -0,0 +1,11 @@
1
+import os
2
+import sys
3
+here = os.path.dirname(os.path.abspath(__file__))
4
+os.chdir(here)
5
+sys.path.insert(0,here+'/venv/lib/python{}.{}/site-packages'.format(sys.version_info.major, sys.version_info.minor))
6
+sys.path.insert(0,here)
7
+
8
+import settings
9
+from belote import app, socketio
10
+socketio.run(app, debug=False, host=settings.PUBLIC_URL, port=8080)
11
+

belote.wsgi → app.wsgi


+ 3 - 2
belote.py

@@ -8,6 +8,7 @@ import datetime
8 8
 from db import db, User, Game, Player, levels_users
9 9
 from belote_jeu import N_TURN, N_PLAYERS
10 10
 import belote_ws
11
+import settings
11 12
 
12 13
 login_manager = fll.LoginManager()
13 14
 
@@ -19,7 +20,7 @@ app.config.from_pyfile('settings.cfg')
19 20
 #######################################################################
20 21
 
21 22
 # SocketIO
22
-socketio = SocketIO(app)
23
+socketio = SocketIO(app, cors_allowed_origins=settings.PUBLIC_URL)
23 24
 login_manager.init_app(app)
24 25
 
25 26
 # Database management
@@ -362,5 +363,5 @@ def delete_game(user=None, game=None):
362 363
 
363 364
 
364 365
 if __name__ == '__main__':
365
-    socketio.run(app, debug=True, host='127.0.0.1')
366
+    socketio.run(app, debug=True, host='127.0.0.1', port=8080 )
366 367
 

+ 4 - 4
belote_ws.py

@@ -20,7 +20,7 @@ class CustomNamespacePlay(fio.Namespace):
20 20
             if len(self.users)==1:
21 21
                 fio.emit('text', {'text': '{} est là !'.format(self.users[0]), 'username':None, 'name':NAME_BONJOUR})
22 22
             elif len(self.users)>1:
23
-                fio.emit('text', {'text': '{} est là !'.format(', '.join(self.users)), 'username':None, 'name':NAME_BONJOUR})
23
+                fio.emit('text', {'text': '{} sont là !'.format(', '.join(self.users)), 'username':None, 'name':NAME_BONJOUR})
24 24
             self.users.append(current_user.name)
25 25
             fio.emit('text', {'text': '{} vient d\'arriver !'.format(current_user.name), 'username':None, 'name':NAME_BONJOUR}, broadcast=True)
26 26
         pass
@@ -28,7 +28,7 @@ class CustomNamespacePlay(fio.Namespace):
28 28
     def on_disconnect(self):
29 29
         if current_user.name in self.users:
30 30
             self.users.remove(current_user.name)
31
-            fio.emit('text', {'text': '{} est parti.'.format(current_user.name), 'username':None, 'name':NAME_BONJOUR}, broadcast=True)
31
+            fio.emit('text', {'text': '{} est parti.e.'.format(current_user.name), 'username':None, 'name':NAME_BONJOUR}, broadcast=True)
32 32
         pass
33 33
 
34 34
     def on_join(self, data):
@@ -69,7 +69,7 @@ class CustomNamespacePlay(fio.Namespace):
69 69
         card = data['card']
70 70
 
71 71
         game = self.game()
72
-        if game.turn<0:
72
+        if game.turn<0 or game.atout is None or game.atout =='':
73 73
             fio.emit('text', {'text': "Jeu pas encore disponible. Il faut choisir l'atout !", 'username':None, 'name':NAME_ARBITRE})
74 74
             return
75 75
         # C'est mon tour ?
@@ -99,7 +99,7 @@ class CustomNamespacePlay(fio.Namespace):
99 99
     def on_restart(self, data):
100 100
         game = self.game()
101 101
         if game.isadmin(current_user):
102
-            if game.turn==N_TURN*N_PLAYERS:
102
+            if game.turn==N_TURN*N_PLAYERS or (game.turn==0 and (game.atout is None or game.atout == '')):
103 103
                 game.restart_jeu()
104 104
                 fio.emit('restart', game.serialize_state_anonymous(), broadcast=True)
105 105
             else:

+ 5 - 4
db.py

@@ -53,11 +53,11 @@ class Game(db.Model):
53 53
 
54 54
     id = db.Column(db.Integer, 
55 55
             primary_key=True)
56
-    name = db.Column(db.String(100))
56
+    name = db.Column(db.String(200))
57 57
     players = relationship("Player")
58 58
     turn = db.Column(db.Integer, default=-8)
59 59
     atout = db.Column(db.String(1))
60
-    preneur = db.Column(db.Integer)
60
+    preneur = db.Column(db.String(100))
61 61
     admin = db.Column(db.String(100), db.ForeignKey('users.login'))
62 62
     cards_to_distribute = db.Column(db.String(200))
63 63
     first_player = db.Column(db.Integer)
@@ -305,7 +305,7 @@ class Game(db.Model):
305 305
         return False, -1
306 306
     
307 307
     def restart_jeu(self):
308
-        if self.turn==N_TURN*N_PLAYERS:
308
+        if (self.turn==0 and (self.atout=='' or self.atout is None)) or self.turn==N_TURN*N_PLAYERS:
309 309
             self.turn = -8
310 310
             self.atout = None
311 311
             self.preneur = None
@@ -315,7 +315,8 @@ class Game(db.Model):
315 315
             self.cumul_1 += self.points_1
316 316
             self.points_0 = 0
317 317
             self.points_1 = 0
318
-            self.partie +=1
318
+            if self.turn>0:
319
+                self.partie +=1
319 320
             self.first_player = 0
320 321
             self.distribute()
321 322
             db.session.commit()

+ 3 - 0
settings.example.py

@@ -0,0 +1,3 @@
1
+# The public url for preventing 
2
+# Cross_origin bugs
3
+PUBLIC_URL='127.0.0.1'

+ 3 - 1
static/belote.css

@@ -270,11 +270,13 @@ position: absolute;
270 270
 #a-vous {
271 271
 	float: left;
272 272
 	width: 90px;
273
-	height: 79px;
273
+	height: 59px;
274 274
 	padding-top: 20px;
275 275
 	text-align: center;
276 276
 	margin-right: 20px;
277 277
 	visibility: hidden;
278
+        background:white;
279
+        font-weight: bold;
278 280
 }
279 281
 #points {
280 282
 	height: 98px;

BIN
static/favicon.ico


+ 18 - 12
static/game_script.js

@@ -43,16 +43,16 @@ var set_atout = function(){
43 43
         var coulprop = jeu['played'][0];
44 44
         $('#atout').html(`<img src="/static/cards/${coulprop}.png" width=100% />`);
45 45
         if (jeu['turn']<-4 && (jeu['turn']+jeu['first_player']+8)%4 == jeu['nr']){
46
-            $('#prispar').html(`<input type="submit" onclick="javascript:choixcouleur('${coulprop[1]}')" value="Prendre" />`);
47
-            $('#preneur').html(`<input type="submit" onclick="javascript:choixcouleur(null)" value="Passer" />`);
46
+            $('#preneur').html(`<input type="submit" onclick="javascript:choixcouleur('${coulprop[1]}')" value="Prendre" />`);
47
+            $('#prispar').html(`<input type="submit" onclick="javascript:choixcouleur(null)" value="Passer" />`);
48 48
         }else if((jeu['turn']+jeu['first_player']+8)%4 == jeu['nr']){
49
-            $('#prispar').html(`<input type="submit" onclick="javascript:choixcouleur('P')" value="Pique" />
49
+            $('#preneur').html(`<input type="submit" onclick="javascript:choixcouleur('P')" value="Pique" />
50 50
                                 <input type="submit" onclick="javascript:choixcouleur('C')" value="Coeur" />
51 51
                                 <br />
52 52
                                 <input type="submit" onclick="javascript:choixcouleur('T')" value="Trèfle" />
53 53
                                 <input type="submit" onclick="javascript:choixcouleur('F')" value="Carreau" />
54 54
                 `);
55
-            $('#preneur').html(`<input type="submit" onclick="javascript:choixcouleur(null)" value="Passer" />`);
55
+            $('#prispar').html(`<input type="submit" onclick="javascript:choixcouleur(null)" value="Passer" />`);
56 56
         }else{
57 57
             $('#prispar').html(`Pris par`);
58 58
             $('#preneur').html(`----`);
@@ -92,7 +92,7 @@ var set_jeu = function(){
92 92
     console.log(jeu['monjeu']);
93 93
     
94 94
     for(i=0;i<jeu['monjeu'].length;i++){
95
-        if (jeu['monjeu'][i]==null){
95
+        if (jeu['monjeu'][i]==null || jeu['monjeu'][i]==''){
96 96
             $('#carte-'+i).html('');
97 97
         }else{
98 98
             $('#carte-'+i).html(`<a href="javascript:jouer('${jeu['monjeu'][i]}', ${i})"><img src="/static/cards/${jeu['monjeu'][i]}.png" width=100% /></a>`);
@@ -102,14 +102,14 @@ var set_jeu = function(){
102 102
 
103 103
 var set_cartes = function(){
104 104
     first_player = jeu['first_player']
105
-    if (jeu['turn']%4==0 && 'lastfirstplayer' in jeu){
105
+    if (jeu['turn']%4==0 && 'lastfirstplayer' in jeu && jeu['turn']>0){
106 106
         first_player = jeu['lastfirstplayer']
107 107
     }
108
-    if (jeu['preneur'] == null){
108
+    if (jeu['atout'] == null || jeu['atout']==''){
109
+        $('#jeu-0').html('');
109 110
         $('#jeu-1').html('');
110 111
         $('#jeu-2').html('');
111 112
         $('#jeu-3').html('');
112
-        $('#jeu-4').html('');
113 113
     }else{
114 114
         for(i=first_player;i<first_player+4;i++){
115 115
             j = i-first_player
@@ -124,7 +124,7 @@ var set_cartes = function(){
124 124
 }
125 125
 
126 126
 var set_derpli = function(){
127
-    if(jeu['last_played'].length >0){
127
+    if(jeu['last_played'].length >0 && jeu['turn']>0){
128 128
         for(i=0;i<4;i++){
129 129
             $('#der-pli-'+i).html(`<img src="/static/cards/${jeu['last_played'][i]}.png" width=100% />`);
130 130
         }
@@ -140,9 +140,11 @@ var set_players = function(){
140 140
 var set_current_player = function(){
141 141
     for(i=0;i<4;i++){
142 142
         $('#joueur-'+i).css('font-weight', 'normal');
143
+        $('#joueur-'+i).css('text-decoration', 'none');
143 144
     }
144 145
     i = (jeu['turn']+jeu['first_player']+8)%4;
145 146
     $('#joueur-'+i).css('font-weight', 'bold');
147
+    $('#joueur-'+i).css('text-decoration', 'underline overline');
146 148
     if((jeu['turn']+jeu['first_player']+8)%4 == jeu['nr']){
147 149
         $('#a-vous').css('visibility', 'visible');
148 150
     }else{
@@ -152,6 +154,9 @@ var set_current_player = function(){
152 154
     if(jeu['turn']==32 && jeu['admin']==jeu['players'][jeu['nr']]){
153 155
         $('#suivant').show();
154 156
     }
157
+    if(jeu['turn']==0 && (jeu['atout'] == null||jeu['atout']=='') && jeu['admin']==jeu['players'][jeu['nr']]){
158
+        $('#suivant').show();
159
+    }
155 160
 }
156 161
 
157 162
 
@@ -166,9 +171,6 @@ set_derpli();
166 171
 set_players();
167 172
 set_current_player();
168 173
 
169
-for (e in jeu){
170
-        $('#jeu').append(`${e} : ${jeu[e]} <br />`)
171
-}
172 174
 if((jeu['turn']+jeu['first_player'] + 8)%4 == jeu['nr']){
173 175
     $('#a-vous').css('visibility', 'visible');
174 176
 }
@@ -252,6 +254,10 @@ socket.on('play', function(data){
252 254
     set_current_player();
253 255
 });
254 256
 
257
+socket.on('disconnect', function() {
258
+      $('#chat').prepend('<b>Souci technique</b> : Vous avez été déconnecté<br />Une tentative de reconnexion va avoir lieu<br />');
259
+      setTimeout(function(){window.location.reload()}, 5000);
260
+});
255 261
 
256 262
 $('#texte-msg').pressEnter(function(e){
257 263
     sendtext();

BIN
static/logo.gif


BIN
static/logo.png


+ 2 - 1
templates/base.html

@@ -1,6 +1,7 @@
1 1
 <html>
2 2
     <head>
3 3
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
4
+        <link rel="shortcut icon" href="/static/favicon.ico">
4 5
             {% include ['head-perso.html', 'head.html'] %}
5 6
             {% block head %}
6 7
             <title>{% block title %}{% endblock %} - Belote</title>
@@ -11,7 +12,7 @@
11 12
             <!--     ENTETE       -->
12 13
             <div id="entete" class="clearfix-head">
13 14
                 <div id="logo">
14
-                    <img src="/static/logo.gif" />
15
+                    <img src="/static/logo.png" height=100% width=100% />
15 16
                 </div><!-- logo -->
16 17
                 <div id="titre">
17 18
                     {% block titre %} {% endblock %}

+ 3 - 3
templates/game_zone_jeu.html

@@ -8,9 +8,9 @@
8 8
 <div id="jeu-1" class="carte"></div><!-- jeu-1 -->
9 9
 <div id="jeu-2" class="carte"></div><!-- jeu-2 -->
10 10
 <div id="jeu-3" class="carte"></div><!-- jeu-3 -->
11
-<form id="suivant">
11
+<div id="suivant">
12 12
 <input type="submit" name="suivant" value="Recommencer" onclick="javascript:restart_jeu()"> 
13
-</form><!-- suivant -->
13
+</div><!-- suivant -->
14 14
 </div><!-- plateau -->
15 15
 <div id="ov">
16 16
 <table id="table-atout">
@@ -40,7 +40,7 @@
40 40
 </div><!-- choix -->
41 41
 </div><!-- ov -->
42 42
 <div id="jeu-en-main" class="clearfix">
43
-<div id="a-vous">A vous de jouer !
43
+<div id="a-vous">À vous de jouer !
44 44
 </div>
45 45
 <div id="carte-0" class="carte carte-en-main">
46 46
 </div>

+ 4 - 2
templates/index.html

@@ -6,7 +6,9 @@
6 6
 
7 7
 {% block contenu %}
8 8
 <div id="zone-de-contenu">
9
-    <p> Bienvenue sur le jeu de belote !</p>
10
-    <p> Vous devez vous identifier pour jouer, rendez vous sur <a href="/login">la page de login</a></p>
9
+    <fieldset class="fieldset"><legend style="font-size:25px;">Bienvenue</legend>
10
+        <p> Bienvenue sur le jeu de belote !</p>
11
+        <p> Vous devez vous identifier pour jouer, rendez vous sur <a href="/login">la page de login</a></p>
12
+    </fieldset>
11 13
 </div>
12 14
 {% endblock %}