Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add some words on installation.
[graphlib.git] / chateaux / chateaux.cpp
index 1002157..6ad81b7 100644 (file)
@@ -6,8 +6,8 @@
 #include <cstdlib>
 #include <sstream>
 
-/* Note : les coordonnées réelles vont de -100 à +100 en abscisse, et
- *  de -10 à +140 en ordonnée
+/* Note : les coordonnées réelles vont de -100 à +100 en abscisse, et
+ *  de -10 à +140 en ordonnée
  */
 
 const float PI = 4.0 * atan(1.0);
@@ -22,6 +22,8 @@ const float hauteurMax = 130;
 const float largeurMin = 40;
 const float largeurMax = 150;
 
+const float ventMax = 30;
+
 const float largeurChateau = 8.5;
 const float hauteurChateau = 7;
 
@@ -40,8 +42,8 @@ float largeurMont;
 float hauteurMont;
 float wnd;
 
-/* Retourne un nombre pseudo-aléatoire compris entre 0 et le paramètre
- * 'max' (exclus)
+/* Retourne un nombre pseudo-aléatoire compris entre le paramètre
+ * 'min' (inclus) et le paramètre 'max' (exclus)
  */
 float frand(float min, float max)
 {
@@ -58,26 +60,26 @@ float deg2rad(float deg)
     return deg * PI / 180.0;
 }
 
-// conversion coordonnées réelles -> coordonnées fenêtre
+// conversion coordonnées réelles -> coordonnées fenêtre
 int rtowX(const DrawingWindow& w, float rx)
 {
-    return (int )roundf(w.width * (rx - rXMin) / (rXMax - rXMin + 1.0));
+    return (int )roundf((w.width - 1) * (rx - rXMin) / (rXMax - rXMin));
 }
 
 int rtowY(const DrawingWindow& w, float ry)
 {
-    return (int )roundf(w.height * (rYMax - ry) / (rYMax - rYMin + 1.0));
+    return (int )roundf((w.height - 1) * (rYMax - ry) / (rYMax - rYMin));
 }
 
-// conversion coordonnées réelles -> coordonnées fenêtre
+// conversion coordonnées fenêtre -> coordonnées réelles
 float wtorX(const DrawingWindow& w, int wx)
 {
-    return (rXMax - rXMin + 1.0) * wx / w.width + rXMin;
+    return (rXMax - rXMin) * wx / (w.width - 1) + rXMin;
 }
 
 float wtorY(const DrawingWindow& w, int wy)
 {
-    return -(rYMax - rYMin + 1.0) * wy / w.height - rYMax;
+    return -(rYMax - rYMin) * wy / (w.height - 1) + rYMax;
 }
 
 float hauteurMontagne(float largeur, float hauteur, float x)
@@ -202,7 +204,7 @@ void initialise(DrawingWindow& w)
 {
     largeurMont = frand(largeurMin, largeurMax);
     hauteurMont = frand(hauteurMin, hauteurMax);
-    wnd = frand(-30, 30);
+    wnd = frand(-ventMax, ventMax);
     w.setBgColor("skyblue");
     w.clearGraph();
     dessineTerrain(w, largeurMont, hauteurMont);
@@ -216,12 +218,12 @@ void initialise(DrawingWindow& w)
                Qt::AlignHCenter);
     std::stringstream s;
     s << score1 << " / " << score2;
-    w.drawText(rtowX(w, 0), rtowY(w, 0) + 8, s.str().c_str(),
+    w.drawText(rtowX(w, 0), rtowY(w, 0) + 8, s.str(),
                Qt::AlignHCenter);
 }
 
-/* Retour : numéro du perdant, 0 sinon
-   x et y contiennent les coordonnées de la collision
+/* Retour : numéro du perdant, 0 sinon
+   x et y contiennent les coordonnées de la collision
 */
 int tir(DrawingWindow& w,
         float x0, float y0, float v0, float alpha, float& x, float &y)
@@ -247,7 +249,7 @@ int tir(DrawingWindow& w,
         vy += ay * dt;
 
         w.msleep(10);
-        w.sync();
+//         w.sync();
         w.setColor("skyblue");
         w.fillCircle(wx, wy, 2);
 //         w.setColor("black");
@@ -281,6 +283,7 @@ int jeu1(DrawingWindow& w)
     do {
         joueur = 3 - joueur;
 
+        w.sync();
         std::cout << "-=| Joueur " << joueur << " |=-";
 
         float alpha;
@@ -293,7 +296,7 @@ int jeu1(DrawingWindow& w)
         } else {
             alpha = frand(10, 90);
             v0 = frand(10, 100);
-            std::cout << " [ " << (int )alpha << "° ; " << (int )v0 << " ]"
+            std::cout << " [ " << (int )alpha << "° ; " << (int )v0 << " ]"
                       << std::endl;
         }
 
@@ -309,18 +312,17 @@ int jeu1(DrawingWindow& w)
         perdant = tir(w, x0, y0, v0, alpha, x, y);
         dessineExplosion(w, x, y);
         dessineVent(w, wnd);
-        w.sync();
     } while (!perdant);
     dessineFlammes(w, x, y);
     std::stringstream msg;
     msg << " Joueur " << perdant;
     if (perdant == joueur)
-        msg << " s'est suicidé ! ";
+        msg << " s'est suicidé ! ";
     else
         msg << " a perdu ! ";
     w.setColor("darkred");
     w.setBgColor("white");
-    w.drawTextBg(w.width / 2, w.height / 3, msg.str().c_str(),
+    w.drawTextBg(w.width / 2, w.height / 3, msg.str(),
                  Qt::AlignCenter);
     w.sync();
     std::cout << msg.str() << std::endl;