Advertisement
Guest User

sources du jeu de la loutre .-.

a guest
Aug 5th, 2014
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.99 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <string>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <cstdlib>
  6. #include <fmod.h>
  7. #include <stdio.h>
  8. #include <cmath>
  9.  
  10. using namespace sf;
  11. using namespace std;
  12.  
  13. bool failed = true,
  14.      firstlaunch = true,
  15.      paused = false,
  16.      keychangement = false;
  17.  
  18. float fallspeed = 2.0;
  19.  
  20. unsigned int heart_status = 3,
  21.              score = 0,
  22.              objx[4] = {2, 46, 91, 135},
  23.              keyss[4] = {18, 3, 9, 10},
  24.              keychangementstep = 0,
  25.              explstep[4] = {0, 0, 0, 0},
  26.              laststep[4] = {0, 0, 0, 0},
  27.              music = 0;
  28.  
  29. Color colors[] = {Color(182, 152, 192),
  30.                   Color(182, 192, 154),
  31.                   Color(151, 128, 117),
  32.                   Color(180, 203, 220),
  33.                   Color(150, 68, 251),
  34.                   Color(254, 56, 170),
  35.                   Color(255, 64, 69),
  36.                   Color(253, 228, 57),
  37.                   Color(243, 120, 67),
  38.                   Color(176, 253, 100),
  39.                   Color(120, 252, 232),
  40.                   Color(65, 69, 252),
  41.                   Color(215, 123, 0),
  42.                   Color(202, 0, 0),
  43.                   Color(29, 250, 139),
  44.                   Color(24, 197, 254),
  45.                   Color(185, 237, 65),
  46.                   Color(228, 176, 249),
  47.                   Color(55, 200, 185),
  48.                   Color(186, 69, 174),
  49.                   Color(204, 68, 69),
  50.                   Color(185, 185, 185),
  51.                   Color(91, 116, 162),
  52.                   Color(163, 176, 203),
  53.                   Color(36, 174, 136),
  54.                   Color(147, 255, 231),
  55.                   Color(187, 255, 147),
  56.                   Color(246, 156, 156),
  57.                   Color(241, 124, 213)
  58.                   };
  59.  
  60. FMOD_SOUND *sound[2];
  61. FMOD_SYSTEM *vsystem;
  62.  
  63. RectangleShape keys[4], objects[4], bobject, line[2], heartr[3],
  64.                shoot[4], background;
  65.  
  66. RenderWindow window(VideoMode(176, 450), "Kiloutre Game Test", Style::Close | Style::Titlebar);
  67. Texture heart[2];
  68. Text tscore, tfallspeed, tfailed, text[4];
  69.  
  70. int OnKeyStateChange(Event::KeyEvent key, bool pressed);
  71. bool VerifyPos(unsigned int which);
  72. void IncreaseFallSpeed();
  73. void OnHit(bool good);
  74. void ReplaceObject(unsigned int which);
  75. bool Collision(unsigned int which);
  76.  
  77. void SaveKeys()
  78. {
  79.     ofstream mfile;
  80.     mfile.open ("preferences.txt");
  81.     mfile << keyss[0] << ' ' << keyss[1] << ' ' << keyss[2] << ' ' << keyss[3];
  82.     mfile.close();
  83. }
  84.  
  85. int main()
  86. {
  87.     FMOD_System_Create(&vsystem);
  88.     FMOD_System_Init(vsystem, 1, FMOD_INIT_NORMAL, NULL);
  89.  
  90.     window.setFramerateLimit(60);
  91.     window.setKeyRepeatEnabled(false);
  92.  
  93.     FMOD_System_CreateSound(vsystem, "music.mp3", FMOD_CREATESAMPLE, 0, &sound[0]);
  94.     FMOD_System_CreateSound(vsystem, "music2.mp3", FMOD_CREATESAMPLE, 0, &sound[1]);
  95.  
  96.     sf::Font font;
  97.     font.loadFromFile("04B_19__.ttf");
  98.  
  99.     Texture turret[4], enemy, tbackground;
  100.  
  101.     RectangleShape band[2],
  102.                    expl[4];
  103.  
  104.     tbackground.loadFromFile("background.png", IntRect(0, 0, 176, 1808));
  105.  
  106.     background.setTexture(&tbackground, true);
  107.     background.setSize(Vector2f(176, 1808));
  108.  
  109.     turret[0].loadFromFile("sprite.png", IntRect(1, 23, 30, 53));
  110.     turret[1].loadFromFile("sprite.png", IntRect(94, 23, 30, 53));
  111.     turret[2].loadFromFile("sprite.png", IntRect(32, 23, 30, 53));
  112.     turret[3].loadFromFile("sprite.png", IntRect(63, 23, 30, 53));
  113.  
  114.     enemy.loadFromFile("sprite.png", IntRect(125, 0, 77, 56));
  115.  
  116.     heart[0].loadFromFile("sprite.png", IntRect(1, 1, 12, 10));
  117.     heart[1].loadFromFile("sprite.png", IntRect(1, 12, 12, 10));
  118.  
  119.     tscore.setString("0");
  120.     tscore.setFont(font);
  121.     tscore.setCharacterSize(40);
  122.  
  123.     tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
  124.  
  125.     tfallspeed.setString("Fall speed: 2.0");
  126.     tfallspeed.setFont(font);
  127.     tfallspeed.setCharacterSize(10);
  128.  
  129.     tfallspeed.setPosition(2, 35);
  130.  
  131.     tfailed.setString("Press SPACE\nto start\n\n\nPress + to\nchange the\nkeys");
  132.     tfailed.setFont(font);
  133.     tfailed.setCharacterSize(20);
  134.     tfailed.setPosition(31, 60);
  135.  
  136.     band[0].setSize(Vector2f(176, 50));
  137.     band[1].setSize(Vector2f(176, 56));
  138.     band[0].setFillColor(Color(56, 56, 56));
  139.     band[1].setFillColor(Color(35, 35, 35));
  140.     band[1].setPosition(0, 394);
  141.  
  142.     line[0].setSize(Vector2f(176, 4));
  143.     line[1].setSize(Vector2f(176, 4));
  144.     line[0].setFillColor(Color(87, 87, 87));
  145.     line[1].setFillColor(Color(87, 87, 87));
  146.     line[0].setPosition(0, 390);
  147.     line[1].setPosition(0, 50);
  148.     unsigned int linehitbox = 390;
  149.  
  150.     bobject.setSize(Vector2f(77, 56));
  151.     bobject.setTexture(&enemy, true);
  152.     bobject.setPosition(49.5, 0);
  153.     bobject.setFillColor(Color(200, 200, 200));
  154.  
  155.     for(unsigned int i = 0; i < 4; i++) {
  156.         objects[i].setSize(Vector2f(38, 28));
  157.         objects[i].setTexture(&enemy, true);
  158.         ReplaceObject(i);
  159.  
  160.         shoot[i].setSize(Vector2f(4, 10));
  161.         shoot[i].setPosition(-20, -220);
  162.  
  163.         keys[i].setSize(Vector2f(42, 74));
  164.         keys[i].setTexture(&turret[i], true);
  165.  
  166.         text[i].setFont(font);
  167.         text[i].setCharacterSize(20);
  168.  
  169.         if(i != 3)
  170.         {
  171.             heartr[i].setSize(Vector2f(12, 10));
  172.             heartr[i].setTexture(&heart[0], true);
  173.         }
  174.     }
  175.  
  176.     ifstream file("preferences.txt");
  177.     if(file)
  178.     {
  179.         string line;
  180.         getline(file, line);
  181.         sscanf((char*)line.c_str(),"%i %i %i %i", &keyss[0], &keyss[1], &keyss[2], &keyss[3]);
  182.     }
  183.  
  184.     char tmp[2];
  185.     sprintf(tmp, "%c", keyss[0] + 65);
  186.     text[0].setString((string)tmp);
  187.     sprintf(tmp, "%c", keyss[1] + 65);
  188.     text[1].setString((string)tmp);
  189.     sprintf(tmp, "%c", keyss[2] + 65);
  190.     text[2].setString((string)tmp);
  191.     sprintf(tmp, "%c", keyss[3] + 65);
  192.     text[3].setString((string)tmp);
  193.  
  194.     heartr[0].setPosition(2, 2);
  195.     heartr[1].setPosition(16, 2);
  196.     heartr[2].setPosition(30, 2);
  197.  
  198.     keys[0].setPosition(0, 375);
  199.     keys[1].setPosition(44, 375);
  200.     keys[2].setPosition(89, 375);
  201.     keys[3].setPosition(134, 375);
  202.  
  203.     text[0].setPosition(16, 415);
  204.     text[1].setPosition(60, 415);
  205.     text[2].setPosition(105, 415);
  206.     text[3].setPosition(150, 415);
  207.  
  208.     while(window.isOpen()) {
  209.  
  210.         Event event;
  211.  
  212.         while(window.pollEvent(event))
  213.         {
  214.             if(event.type == Event::Closed)
  215.             {
  216.                 window.close();
  217.                 return 1;
  218.             }
  219.             if(event.type == Event::KeyPressed)
  220.                 OnKeyStateChange(event.key, true);
  221.             if(event.type == Event::KeyReleased)
  222.                 OnKeyStateChange(event.key, false);
  223.         }
  224.  
  225.         if(!paused)
  226.         {
  227.             for(unsigned int i = 0; i < 4; i++)
  228.             {
  229.                 shoot[i].move(0, -25);
  230.                 float objpos = objects[i].getPosition().y;
  231.                 if(!failed)
  232.                 {
  233.                     if(Collision(i))
  234.                     {
  235.                         bool error = false;
  236.                         if(objpos > 0){
  237.                             for(unsigned int o = 0; !error && o < 4 ; o++)
  238.                             {
  239.                                 if(o == i)
  240.                                     continue;
  241.                                 if(objpos < objects[o].getPosition().y)
  242.                                     error = true;
  243.  
  244.                             }
  245.                             if(error){
  246.                                 OnHit(false);
  247.                                 shoot[i].setPosition(-20, -220);
  248.                                 ReplaceObject(i);
  249.                                 continue;
  250.                             }
  251.                             OnHit(true);
  252.                             shoot[i].setPosition(-20, -220);
  253.                             explstep[i] = 0;
  254.                             expl[i].setPosition(objects[i].getPosition());
  255.                             ReplaceObject(i);
  256.                         }
  257.                         continue;
  258.                     }
  259.                 }
  260.                 if(objpos + fallspeed + 56 < linehitbox)
  261.                 {
  262.                     objects[i].move(0, fallspeed);
  263.                     continue;
  264.                 }
  265.  
  266.                 OnHit(false);
  267.                 ReplaceObject(i);
  268.             }
  269.         }
  270.  
  271.  
  272.         if(!failed && !paused)
  273.             background.move(0, (-fallspeed) / 10);
  274.  
  275.         if(background.getPosition().y < -1332)
  276.             background.setPosition(0, 0);
  277.  
  278.         if(failed && !firstlaunch && bobject.getPosition().y < 60){
  279.             bobject.move(0, 6);
  280.             tfailed.move(0, 6);
  281.         }
  282.  
  283.         window.clear();
  284.         window.draw(background);
  285.         window.draw(line[0]);
  286.         window.draw(band[1]);
  287.         for(unsigned int i = 0; i < 4; i++) {
  288.             window.draw(objects[i]);
  289.             window.draw(keys[i]);
  290.             window.draw(shoot[i]);
  291.             if(failed || paused) window.draw(text[i]);
  292.         }
  293.         window.draw(line[1]);
  294.         window.draw(band[0]);
  295.         window.draw(tscore);
  296.         window.draw(tfallspeed);
  297.         if(failed || paused) window.draw(tfailed);
  298.         for(unsigned int i = 0; i < 3; i++)
  299.             window.draw(heartr[i]);
  300.         if(failed && !firstlaunch)
  301.             window.draw(bobject);
  302.         window.display();
  303.     }
  304.  
  305.     SaveKeys();
  306.     return 0;
  307. }
  308.  
  309. bool Collision(unsigned int which)
  310. {
  311.     float fActualY, fNextY;
  312.  
  313.     fActualY    = shoot[which].getPosition().y;
  314.     fNextY      = fActualY - 25;
  315.  
  316.     if(objects[which].getPosition().y <= (fActualY + 10) && objects[which].getPosition().y >= fNextY)
  317.     {
  318.         return true;
  319.     }
  320.  
  321.     if((objects[which].getPosition().y + 28) <= (fActualY + 10) && (objects[which].getPosition().y + 28) >= fNextY)
  322.     {
  323.         return true;
  324.     }
  325.     return false;
  326. }
  327.  
  328. void ReplaceObject(unsigned int which)
  329. {
  330.     objects[which].setPosition(objx[which], 0 - (float)(rand() % 200));
  331.     while(!VerifyPos(which))
  332.         objects[which].setPosition(objx[which], 0 - (float)(rand() % 300));
  333.     objects[which].setFillColor(colors[(rand() % (((sizeof(colors)))/sizeof(*colors)))]);
  334. }
  335.  
  336. bool VerifyPos(unsigned int which)
  337. {
  338.     bool bPosOK;
  339.  
  340.     bPosOK = true;
  341.  
  342.     for(unsigned int i = 0; i < 4 && bPosOK; i++)
  343.     {
  344.         if(which != i)
  345.         {
  346.             float fDiff = abs((float)objects[i].getPosition().y - (float)objects[which].getPosition().y);
  347.  
  348.             if(fDiff < 28.0f)
  349.             {
  350.                 bPosOK = false;
  351.             }
  352.         }
  353.     }
  354.  
  355.     return bPosOK;
  356. }
  357.  
  358. void IncreaseScore()
  359. {
  360.     score++;
  361.     char temp[4];
  362.     sprintf(temp, "%d", score);
  363.     tscore.setString((string)temp);
  364.     tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
  365.     if(music == 0 && score == 100)
  366.         FMOD_System_PlaySound(vsystem, sound[0], 0, false, 0);
  367.     else if(music != 0 && score == 1)
  368.         FMOD_System_PlaySound(vsystem, sound[1], 0, false, 0);
  369. }
  370.  
  371. void IncreaseFallSpeed()
  372. {
  373.     if(!failed){
  374.         fallspeed+=0.0179;
  375.         char temp[30];
  376.         sprintf(temp, "Fall speed: %.2f", fallspeed);
  377.         tfallspeed.setString((string)temp);
  378.     }
  379. }
  380.  
  381. void LifeDecrease()
  382. {
  383.     if(heart_status != 1)
  384.     {
  385.         heart_status--;
  386.         heartr[heart_status].setTexture(&heart[1], true);
  387.     }
  388.     else
  389.     {
  390.         heartr[0].setTexture(&heart[1], true);
  391.         tfailed.setString(" You failed\n\nPress SPACE\nto restart \n\n\nPress + to\nchange the\nkeys");
  392.         tfailed.setPosition(31, -154);
  393.         bobject.setPosition(49.5, -230);
  394.         failed = true;
  395.     }
  396. }
  397.  
  398. void OnHit(bool good)
  399. {
  400.     if(paused) return;
  401.  
  402.     if(failed){
  403.         IncreaseFallSpeed();
  404.         return;
  405.     }
  406.  
  407.     if(good){
  408.         IncreaseScore();
  409.         IncreaseFallSpeed();
  410.     }
  411.  
  412.     else
  413.         LifeDecrease();
  414.  
  415. }
  416.  
  417. void kShoot(unsigned int which)
  418. {
  419.     float x;
  420.     switch(which)
  421.     {
  422.         case 0:
  423.             x = 18;
  424.         break;
  425.         case 1:
  426.             x = 62;
  427.         break;
  428.         case 2:
  429.             x = 107;
  430.         break;
  431.         case 3:
  432.             x = 151;
  433.         break;
  434.     }
  435.     shoot[which].setPosition(x, 365);
  436. }
  437.  
  438. int OnKeyStateChange(Event::KeyEvent key, bool pressed)
  439. {
  440.     switch(key.code)
  441.     {
  442.         case 67: case 55:
  443.         {
  444.             if(pressed && !keychangement && failed && !paused)
  445.             {
  446.                 keychangement = true;
  447.                 keychangementstep = 0;
  448.                 tfailed.setString("Press the key\nfor the\nfirst turret");
  449.                 text[0].setColor(Color::Red);
  450.                 return 1;
  451.             }
  452.             break;
  453.         }
  454.         case Keyboard::Space: case Keyboard::Escape:
  455.         {
  456.             if(!firstlaunch && !failed && pressed)
  457.             {
  458.                 if(paused)
  459.                 {
  460.                     tfailed.setString(" You failed\n\nPress SPACE\nto restart \n\n\nPress + to\nchange the\nkeys");
  461.                     paused = false;
  462.                     return 1;
  463.                 }
  464.                 else
  465.                 {
  466.                     tfailed.setString("Game paused\n\nPress SPACE\nto resume");
  467.                     paused = true;
  468.                     return 1;
  469.                 }
  470.             }
  471.             if(!failed || keychangement) return 1;
  472.             if(key.code == Keyboard::Escape)
  473.                 return 1;
  474.  
  475.             for(unsigned int i = 0; i < 4; i++) {
  476.                 shoot[i].setPosition(0, -300);
  477.                 ReplaceObject(i);
  478.             }
  479.  
  480.             score = 0;
  481.             fallspeed = 2.0;
  482.             heart_status = 3;
  483.  
  484.             heartr[0].setTexture(&heart[0], true);
  485.             heartr[1].setTexture(&heart[0], true);
  486.             heartr[2].setTexture(&heart[0], true);
  487.  
  488.             tscore.setString("0");
  489.             tscore.setPosition(170 - tscore.getLocalBounds().width, 0);
  490.             tfallspeed.setString("Fall speed: 2.0");
  491.  
  492.             music = rand() % 2;
  493.  
  494.             if(!firstlaunch){
  495.                 FMOD_Sound_Release(sound[0]);
  496.                 FMOD_Sound_Release(sound[1]);
  497.                 FMOD_System_CreateSound(vsystem, "music.mp3", FMOD_CREATESAMPLE, 0, &sound[0]);
  498.                 FMOD_System_CreateSound(vsystem, "music2.mp3", FMOD_CREATESAMPLE, 0, &sound[1]);
  499.                 background.setPosition(0, 0);
  500.             }
  501.             else firstlaunch = false;
  502.  
  503.             failed = false;
  504.             return 1;
  505.         }
  506.     }
  507.     if(keychangement && pressed && key.code != 67 && key.code != 55 && key.code != Keyboard::Escape && key.code != Keyboard::Space)
  508.     {
  509.         switch(keychangementstep)
  510.         {
  511.             case 0:
  512.             {
  513.                 keyss[keychangementstep] = key.code;
  514.                 char tmp[2];
  515.                 sprintf(tmp, "%c", keyss[0] + 65);
  516.                 text[0].setString((string)tmp);
  517.                 text[0].setColor(Color::White);
  518.                 text[1].setColor(Color::Red);
  519.                 tfailed.setString("Press the key\nfor the\nsecond turret");
  520.                 keychangementstep++;
  521.                 break;
  522.             }
  523.             case 1:
  524.             {
  525.                 if(key.code == keyss[0])
  526.                     return 1;
  527.                 keyss[keychangementstep] = key.code;
  528.                 char tmp[2];
  529.                 sprintf(tmp, "%c", keyss[1] + 65);
  530.                 text[1].setString((string)tmp);
  531.                 text[1].setColor(Color::White);
  532.                 text[2].setColor(Color::Red);
  533.                 tfailed.setString("Press the key\nfor the\nthird turret");
  534.                 keychangementstep++;
  535.                 break;
  536.             }
  537.             case 2:
  538.             {
  539.                 if(key.code == keyss[0] || key.code == keyss[1])
  540.                     return 1;
  541.                 keyss[keychangementstep] = key.code;
  542.                 char tmp[2];
  543.                 sprintf(tmp, "%c", keyss[2] + 65);
  544.                 text[2].setString((string)tmp);
  545.                 text[2].setColor(Color::White);
  546.                 text[3].setColor(Color::Red);
  547.                 tfailed.setString("Press the key\nfor the\nfourth turret");
  548.                 keychangementstep=3;
  549.                 break;
  550.             }
  551.             case 3:
  552.             {
  553.                 if(key.code == keyss[0] || key.code == keyss[1] || key.code == keyss[2])
  554.                     return 1;
  555.                 keyss[keychangementstep] = key.code;
  556.                 char tmp[2];
  557.                 sprintf(tmp, "%c", keyss[3] + 65);
  558.                 text[3].setString((string)tmp);
  559.                 text[3].setColor(Color::White);
  560.                 keychangement=false;
  561.                 keychangementstep=0;
  562.                 tfailed.setString("Press SPACE\nto start\n\n\nPress + to\nchange the\nkeys");
  563.                 SaveKeys();
  564.                 break;
  565.             }
  566.         }
  567.         return 1;
  568.     }
  569.     if(!paused)
  570.     {
  571.         if((unsigned int)key.code == keyss[0])
  572.         {
  573.             if(pressed)
  574.             {
  575.                 keys[0].setFillColor(Color(180, 180, 180));
  576.                 kShoot(0);
  577.             }
  578.             else if(!pressed)
  579.                 keys[0].setFillColor(Color::White);
  580.         }
  581.         if((unsigned int)key.code == keyss[1])
  582.         {
  583.             if(pressed)
  584.             {
  585.                 keys[1].setFillColor(Color(180, 180, 180));
  586.                 kShoot(1);
  587.             }
  588.             else if(!pressed)
  589.                 keys[1].setFillColor(Color::White);
  590.         }
  591.         if((unsigned int)key.code == keyss[2])
  592.         {
  593.             if(pressed)
  594.             {
  595.                 keys[2].setFillColor(Color(180, 180, 180));
  596.                 kShoot(2);
  597.             }
  598.             else if(!pressed)
  599.                 keys[2].setFillColor(Color::White);
  600.         }
  601.         if((unsigned int)key.code == keyss[3])
  602.         {
  603.             if(pressed)
  604.             {
  605.                 keys[3].setFillColor(Color(180, 180, 180));
  606.                 kShoot(3);
  607.             }
  608.             else if(!pressed)
  609.                 keys[3].setFillColor(Color::White);
  610.         }
  611.     }
  612.     return 1;
  613. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement