Neko250

C++ Pong !

Dec 19th, 2012
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.37 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. using namespace std;
  5.  
  6. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  7.  
  8. #define K_Left 0x25
  9. #define K_Right 0x27
  10. #define K_A 0x41
  11. #define K_D 0x44
  12. #define K_Esc 0x1B
  13. #define K_Space 0x20
  14. #define K_C 0x43
  15. #define K_R 0x52
  16. #define K_S 0x53
  17. #define K_Num1 0x61
  18. #define K_Num2 0x62
  19. #define K_Num3 0x63
  20. #define K_1 0x31
  21. #define K_2 0x32
  22. #define K_3 0x33
  23.  
  24. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  25.  
  26. const char beep = 7;
  27.  
  28.  
  29.  
  30. const int pala = 8;
  31.  
  32. const int cols = 40;
  33. const int lines = 40;
  34.  
  35. typedef char vector[cols];
  36. typedef char surface[lines][(cols + 1)];
  37.  
  38. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  39.  
  40. void title();
  41. void difficulty(int&, bool&);
  42. void setRow(vector&, int);
  43. void printRow(const vector&, int);
  44. void getKey(int&, int&, bool&, bool&, bool&);
  45. void setBall(bool&, bool&, int&, int&, int, int, int&);
  46. void setSurface(surface&, int, int);
  47. void printSurface(const surface&, int, int);
  48. bool checkOut(int, int, int, int);
  49. void gameOver(int&, int&, int&, int&, int, bool&, bool&, bool&, int&, int&);
  50. void openingSong();
  51. void gameOverSong();
  52. void clearBufer();
  53.  
  54. void printVoid();
  55.  
  56. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  57.  
  58. int main()
  59. {
  60.     bool close = false, wait = true, run;
  61.    
  62.     int angle = 1, cont1 = 0, cont2 = 0, freq = 40;
  63.    
  64.     vector player1, player2;
  65.     int start1 = ((cols/2)-(pala/2)), start2 = ((cols/2)-(pala/2));
  66.    
  67.     surface table;
  68.     int x = 20, y = 39;
  69.     bool right = true, up = true;
  70.    
  71.     system("title Pong !");
  72.    
  73.     // Tablero de 40x40
  74.     system("mode con: lines=46 cols=40");
  75.    
  76.     title();
  77.     difficulty(freq, close);
  78.    
  79.     while(!close)
  80.     {
  81.         while(wait)
  82.         {
  83.             setRow(player1, start1);
  84.             setRow(player2, start2);
  85.             setSurface(table, x, y);
  86.            
  87.             system("cls");
  88.             cout << endl << endl;
  89.             printRow(player1, start1);
  90.             printSurface(table, x, y);
  91.             printRow(player2, start2);
  92.            
  93.             cout << "\n\t Press Space to Serve...";
  94.            
  95.             Sleep(freq);
  96.            
  97.             getKey(start1, start2, close, run, wait);
  98.         }
  99.        
  100.         while(run)
  101.         {
  102.             setRow(player1, start1);
  103.             setRow(player2, start2);
  104.             setBall(right, up, x, y, start1, start2, angle);
  105.             setSurface(table, x, y);
  106.            
  107.             system("cls");
  108.             cout << endl << endl;
  109.             printRow(player1, start1);
  110.             printSurface(table, x, y);
  111.             printRow(player2, start2);
  112.            
  113.             if(checkOut(start1, start2, x, y))
  114.             {
  115.                 gameOver(freq, start1, start2, x, y, close, run, wait, cont1, cont2);
  116.             }
  117.            
  118.             //system("pause");
  119.             Sleep(freq);
  120.            
  121.             getKey(start1, start2, close, run, wait);
  122.         }
  123.     }
  124.    
  125.     return 0;
  126. }
  127.  
  128. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  129.  
  130. void title()
  131. {
  132.     system("cls");
  133.     cout << "\n\n\n\n\n\n\n\n\n\n" << beep
  134.          << "\t ______\n"
  135.          << "\t(_____ \\\n"
  136.          << "\t _____) )\n"
  137.          << "\t|  ____/\n"
  138.          << "\t| |\n"
  139.          << "\t|_|";
  140.     Sleep(500);
  141.     system("cls");
  142.     cout << "\n\n\n\n\n\n\n\n\n\n" << beep
  143.          << "\t ______\n"
  144.          << "\t(_____ \\\n"
  145.          << "\t _____) )__\n"
  146.          << "\t|  ____/ _ \\\n"
  147.          << "\t| |   | |_| |\n"
  148.          << "\t|_|    \\___/";
  149.     Sleep(500);
  150.     system("cls");
  151.     cout << "\n\n\n\n\n\n\n\n\n\n" << beep
  152.          << "\t ______\n"
  153.          << "\t(_____ \\\n"
  154.          << "\t _____) )__  ____\n"
  155.          << "\t|  ____/ _ \\|  _ \\\n"
  156.          << "\t| |   | |_| | | | |\n"
  157.          << "\t|_|    \\___/|_| |_|";
  158.     Sleep(500);
  159.     system("cls");
  160.     cout << "\n\n\n\n\n\n\n\n\n\n" << beep
  161.          << "\t ______\n"
  162.          << "\t(_____ \\\n"
  163.          << "\t _____) )__  ____   ____\n"
  164.          << "\t|  ____/ _ \\|  _ \\ / _  |\n"
  165.          << "\t| |   | |_| | | | ( (_| |\n"
  166.          << "\t|_|    \\___/|_| |_|\\___ |\n"
  167.          << "\t                  (_____|";
  168.     Sleep(500);
  169.     openingSong();
  170.     Sleep(500);
  171. }
  172.  
  173. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  174.  
  175. void difficulty(int& freq, bool& close)
  176. {
  177.     bool ans = false;
  178.    
  179.     system("cls");
  180.    
  181.     for(int i = 0; i < 15; i++)
  182.     {
  183.         cout << endl;
  184.     }
  185.    
  186.     cout << "\t      Ball Speed:\n\n\n\n"
  187.          << "\t       1. Slow\n\n"
  188.          << "\t       2. Medium\n\n"
  189.          << "\t       3. Fast";
  190.    
  191.     clearBufer();
  192.    
  193.     while(!ans)
  194.     {
  195.         if(GetAsyncKeyState(K_Num1) || GetAsyncKeyState(K_1))
  196.         {
  197.             freq = 40;
  198.            
  199.             ans = true;
  200.         }
  201.        
  202.         if(GetAsyncKeyState(K_Num2) || GetAsyncKeyState(K_2))
  203.         {
  204.             freq = 25;
  205.            
  206.             ans = true;
  207.         }
  208.        
  209.         if(GetAsyncKeyState(K_Num3) || GetAsyncKeyState(K_3))
  210.         {
  211.             freq = 10;
  212.            
  213.             ans = true;
  214.         }
  215.        
  216.         if(GetAsyncKeyState(K_Esc))
  217.         {
  218.             close = true;
  219.            
  220.             ans = true;
  221.         }
  222.     }
  223.    
  224.     clearBufer();
  225. }
  226.  
  227. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  228.  
  229. void getKey(int& start1, int& start2, bool& close, bool& run, bool& wait)
  230. {
  231.     if(GetAsyncKeyState(K_Esc))
  232.     {
  233.         close = true;
  234.         run = false;
  235.         wait = false;
  236.     }
  237.    
  238.     if(GetAsyncKeyState(K_Space))
  239.     {
  240.         run = true;
  241.         wait = false;
  242.     }
  243.    
  244.     if(GetAsyncKeyState(K_Left))
  245.     {
  246.         if(start1 > 0)
  247.         {
  248.             start1 -= 1;
  249.         }
  250.     }
  251.    
  252.     if(GetAsyncKeyState(K_Right))
  253.     {
  254.         if(start1 < cols-pala)
  255.         {
  256.             start1 += 1;
  257.         }
  258.     }
  259.    
  260.     if(GetAsyncKeyState(K_A))
  261.     {
  262.         if(start2 > 0)
  263.         {
  264.             start2 -= 1;
  265.         }
  266.     }
  267.    
  268.     if(GetAsyncKeyState(K_D))
  269.     {
  270.         if(start2 < cols-pala)
  271.         {
  272.             start2 += 1;
  273.         }
  274.     }
  275. }
  276.  
  277. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  278.  
  279. void setRow(vector& row, int start)
  280. {
  281.     for(int i = 0; i < start; i++)
  282.     {
  283.         row[i] = ' ';
  284.     }
  285.    
  286.     for(int k = start; k < (start + pala); k++)
  287.     {
  288.         row[k] = '=';
  289.     }
  290. }
  291.  
  292. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  293.  
  294. void printRow(const vector& row, int start)
  295. {
  296.     for(int i = 0; i < (start + pala); i++)
  297.     {
  298.         cout << row[i];
  299.     }
  300.    
  301.     cout << endl;
  302. }
  303.  
  304. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  305.  
  306. void setBall(bool& right, bool& up, int& x, int& y, int start1, int start2, int& angle)
  307. {
  308.     if(x == 0)
  309.     {
  310.         cout << beep;
  311.        
  312.         right = true;
  313.     }
  314.     else if(x == 39)
  315.     {
  316.         cout << beep;
  317.        
  318.         right = false;
  319.     }
  320.    
  321.     if(y == 0)
  322.     {
  323.         cout << beep;
  324.        
  325.         up = false;
  326.        
  327.         if(x == start1)
  328.         {
  329.             right = false;
  330.             angle = 3;
  331.         }
  332.         else if(x == (start1 + 1) || x == (start1 + 2))
  333.         {
  334.             right = false;
  335.             angle = 2;
  336.         }
  337.         else if(x == (start1 + 3))
  338.         {
  339.             right = false;
  340.             angle = 1;
  341.         }
  342.         else if(x == (start1 + 4))
  343.         {
  344.             right = true;
  345.             angle = 1;
  346.         }
  347.         else if(x == (start1 + 5) || x == (start1 + 6))
  348.         {
  349.             right = true;
  350.             angle = 2;
  351.         }
  352.         else if(x == (start1 + 7))
  353.         {
  354.             right = true;
  355.             angle = 3;
  356.         }
  357.     }
  358.     else if(y == 39)
  359.     {
  360.         cout << beep;
  361.        
  362.         up = true;
  363.        
  364.         if(x == start2)
  365.         {
  366.             right = false;
  367.             angle = 3;
  368.         }
  369.         else if(x == (start2 + 1) || x == (start2 + 2))
  370.         {
  371.             right = false;
  372.             angle = 2;
  373.         }
  374.         else if(x == (start2 + 3))
  375.         {
  376.             right = false;
  377.             angle = 1;
  378.         }
  379.         else if(x == (start2 + 4))
  380.         {
  381.             right = true;
  382.             angle = 1;
  383.         }
  384.         else if(x == (start2 + 5) || x == (start2 + 6))
  385.         {
  386.             right = true;
  387.             angle = 2;
  388.         }
  389.         else if(x == (start2 + 7))
  390.         {
  391.             right = true;
  392.             angle = 3;
  393.         }
  394.     }
  395.    
  396.     if(right)
  397.     {
  398.         x += angle;
  399.        
  400.         if(x > 39)
  401.         {
  402.             x = 39;
  403.         }
  404.     }
  405.     else
  406.     {
  407.         x -= angle;
  408.        
  409.         if(x < 0)
  410.         {
  411.             x = 0;
  412.         }
  413.     }
  414.    
  415.     if(up)
  416.     {
  417.         y--;
  418.     }
  419.     else
  420.     {
  421.         y++;
  422.     }
  423. }
  424.  
  425. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  426.  
  427. void setSurface(surface& table, int x, int y)
  428. {
  429.     for(int k = 0; k < x; k++)
  430.     {
  431.         table[y][k] = ' ';
  432.     }
  433.    
  434.     table[y][x] = '*';
  435. }
  436.  
  437. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  438.  
  439. void printSurface(const surface& table, int x, int y)
  440. {
  441.     for(int i = 0; i < y; i++)
  442.     {
  443.         cout << endl;
  444.     }
  445.    
  446.     for(int j = 0; j <= x; j++)
  447.     {
  448.         cout << table[y][j];
  449.     }
  450.    
  451.     for(int k = 0; k < (lines - y); k++)
  452.     {
  453.         cout << endl;
  454.     }
  455. }
  456.  
  457. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  458.  
  459. bool checkOut(int start1, int start2, int x, int y)
  460. {
  461.     if(y == 0)
  462.     {
  463.         if((x < start1) || ((start1 + pala - 1) < x))
  464.         {
  465.             return true;
  466.         }
  467.     }
  468.     else if(y == 39)
  469.     {
  470.         if((x < start2) || ((start2 + pala - 1) < x))
  471.         {
  472.             return true;
  473.         }
  474.     }
  475.    
  476.     return false;
  477. }
  478.  
  479. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  480.  
  481. void gameOver(int& freq,
  482.               int& start1,
  483.               int& start2,
  484.               int& x,
  485.               int y,
  486.               bool& close,
  487.               bool& run,
  488.               bool& wait,
  489.               int& cont1,
  490.               int& cont2)
  491. {
  492.     bool ans1 = false, ans2;
  493.    
  494.     gameOverSong();
  495.    
  496.     start1 = ((cols/2)-(pala/2));
  497.     start2 = ((cols/2)-(pala/2));
  498.     x = 20;
  499.    
  500.     wait = true;
  501.     run = false;
  502.    
  503.     if(y == 0)
  504.     {
  505.         cont2++;
  506.     }
  507.     else if(y == 39)
  508.     {
  509.         cont1++;
  510.     }
  511.    
  512.     clearBufer();
  513.    
  514.     while(!ans1)
  515.     {
  516.         ans2 = false;
  517.        
  518.         system("cls");
  519.        
  520.         for(int i = 0; i < 15; i++)
  521.         {
  522.             cout << endl;
  523.         }
  524.        
  525.         cout << "\t       GAME OVER\n\n\n\n"
  526.              << "\t      Player 1: " << cont1 << endl
  527.              << "\t      Player 2: " << cont2 << "\n\n"
  528.              << "\t   Ball Speed: ";
  529.        
  530.         if(freq == 40)
  531.         {
  532.             cout << "Slow";
  533.         }
  534.         else if(freq == 25)
  535.         {
  536.             cout << "Medium";
  537.         }
  538.         else
  539.         {
  540.             cout << "Fast";
  541.         }
  542.        
  543.         cout <<"\n\n\n\n"
  544.              << "\t     Continue (C) ?\n"
  545.              << "\t   Reset Scores (R) ?\n"
  546.              << "\t Change Ball Speed (S) ?\n\n"
  547.              << "\t     'Esc' to Exit";
  548.        
  549.         while(!ans2)
  550.         {
  551.             if(GetAsyncKeyState(K_C))
  552.             {
  553.                 ans1 = true;
  554.                 ans2 = true;
  555.             }
  556.            
  557.             if(GetAsyncKeyState(K_R))
  558.             {
  559.                 cont1 = 0;
  560.                 cont2 = 0;
  561.                
  562.                 ans2 = true;
  563.             }
  564.            
  565.             if(GetAsyncKeyState(K_S))
  566.             {
  567.                 difficulty(freq, close);
  568.                
  569.                 if(close)
  570.                 {
  571.                     ans1 = true;
  572.                 }
  573.                
  574.                 ans2 = true;
  575.             }
  576.            
  577.             if(GetAsyncKeyState(K_Esc))
  578.             {
  579.                 close = true;
  580.                 ans1 = true;
  581.                 ans2 = true;
  582.             }
  583.         }
  584.        
  585.         clearBufer();
  586.     }
  587. }
  588.  
  589. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  590.  
  591. void openingSong()
  592. {
  593.     //  G G2 G A2 G B2 G2 G G2
  594.    
  595.     Beep(392, 250);
  596.     Beep(784, 250);
  597.     Beep(392, 250);
  598.     Beep(880, 250);
  599.     Beep(392, 250);
  600.     Beep(988, 250);
  601.     Beep(784, 250);
  602.     Beep(392, 250);
  603.     Beep(784, 250);
  604. }
  605.  
  606. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  607.  
  608. void gameOverSong()
  609. {
  610.     //  D2 D2 A2 D2 G2 D2 F2 D2
  611.    
  612.     Beep(587, 250);
  613.     Beep(587, 250);
  614.     Beep(880, 250);
  615.     Beep(587, 250);
  616.     Beep(784, 250);
  617.     Beep(587, 250);
  618.     Beep(699, 250);
  619.     Beep(587, 250);
  620. }
  621.  
  622. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  623.  
  624. void clearBufer()
  625. {
  626.     HANDLE hConsole = GetStdHandle(STD_INPUT_HANDLE);
  627.     FlushConsoleInputBuffer(hConsole);
  628. }
  629.  
  630. //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  631.  
  632. void printVoid()
  633. {
  634.     for(int i = 0; i < 40; i++) cout << endl;
  635. }
Advertisement
Add Comment
Please, Sign In to add comment