j4ggi

Solitaire Console Windows

Sep 26th, 2013
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.20 KB | None | 0 0
  1. //-------------------------------------------------------------------------------------------------
  2. //file:Solitaire.cpp
  3. //-------------------------------------------------------------------------------------------------
  4. #include <iostream>
  5. #include <conio.h>
  6. #include "ConsoleColor.cpp"
  7. using namespace std;
  8.  
  9. void rysuj(int tab[7][7])
  10. {
  11.     color(1);
  12.     cout<<"\n   1 2 3 4 5 6 7\n";
  13.     for(int i=0;i<7;i++)
  14.     {
  15.         color(1);
  16.         color(0);
  17.         cout<<"  ";
  18.         for(int j=0;j<15;j++)
  19.             if(i)
  20.             cout<<"-";
  21.         cout<<endl<<i+1<<" ";
  22.         for(int j=0;j<7;j++)
  23.         {
  24.             color(0);
  25.             if(j)
  26.                 cout<<"|";
  27.             else
  28.                 cout<<" ";
  29.             color(1);
  30.             if(tab[i][j]==1)
  31.                 cout<<"X";
  32.             else if (!tab[i][j])
  33.                 cout<<" ";
  34.             else
  35.             {
  36.                 color(0);
  37.                 cout<<"*";
  38.             }
  39.         }
  40.         cout<<endl;
  41.     }
  42.     cout<<endl;
  43. }
  44.  
  45. int ruch()
  46. {
  47.     int x;
  48.     int y;
  49.     cout<<"Podaj wspolrzedne";
  50.     color(1);
  51.     cout<<" [x]";
  52.     color(0);
  53.     cout<<" [y] --> ";
  54.     color(1);
  55.     cout<<"[x] ";
  56.     color(0);
  57.     cout<<"[y]: ";
  58.     color(1);
  59.     cout<<char ( y=getch() );
  60.     if(y==27) return -1;
  61.     x=int (y-'0')*1000;
  62.     cout<<" "<<char ( y=getch() );
  63.     if(y==27) return -1;
  64.     x+=int (y-'0')*100;
  65.     cout<<" --> ";
  66.     cout<<char ( y=getch() );
  67.     if(y==27) return -1;
  68.     x+=int (y-'0')*10;
  69.     cout<<" "<<char ( y=getch() )<<endl;
  70.     if(y==27) return -1;
  71.     x+=int (y-'0');
  72.     return x;
  73. }
  74.  
  75. bool zmien(int x, int tab[7][7])
  76. {
  77.     int b=x/1000-1, a=(x/100)%10-1, d=(x/10)%10-1, c=x%10-1;
  78.     if(a>6 || b>6 || c>6 || d>6) return false;
  79.     if(tab[c][d] || tab[a][b]<=0) return false;
  80.     if(a==c && abs(b-d)==2)
  81.     {
  82.         if(tab[a][(b+d)/2]==0) return false;
  83.         tab[a][(b+d)/2]=0;
  84.         tab[a][b]=0;
  85.         tab[c][d]=1;
  86.         return true;
  87.     }
  88.     else if(b==d && abs(a-c)==2)
  89.     {
  90.         if(tab[(a+c)/2][b]==0) return false;
  91.         tab[(a+c)/2][b]=0;
  92.         tab[a][b]=0;
  93.         tab[c][d]=1;
  94.         return true;
  95.     }
  96.     else return false;
  97. }
  98.  
  99. bool sprawdz(int tab[7][7])
  100. {
  101.     int x;
  102.     for(int i=0;i<7;i++)
  103.         for(int j=0;j<7;j++)
  104.             if(tab[i][j]==1)    x++;
  105.     return (x>1 ? false:true);
  106. }
  107.  
  108. void start(int tab[7][7])
  109. {
  110.     color(2);
  111.     cout<<"Gra Solitaire. Zasady:\n";
  112.     color(1);
  113.     cout<<"X";
  114.     color(2);
  115.     cout<<" - symbolizuje pionek. Gra polega na tym, zeby zbic inne pionki przestawiajac \njeden pionek nad drugim na wolne pole. "
  116.     <<"Pionek, nad ktorym zostal wykonany ruch \nzostaje usuniety z planszy. Mozna przeskoczyc tylko nad jednym pionkiem. "
  117.     <<"Celem \ngry jest doprowadzenie do tego, aby na planszy pozostal tylko jeden pionek.\nPoczatkowo wszystkie pola z wyjatkiem srodkowego sa zajete.\n"
  118.     <<"By jaggi --> ";
  119.     color(4);
  120.     cout<<"[email protected]";
  121.     color(2);
  122.     cout<<".\nNacisnij ";
  123.     color(5);
  124.     cout<<"ESC ";
  125.     color(2);
  126.     cout<<"aby zakonczyc gre. \nEnjoy :) \n";
  127.     tab[0][0]=-1;
  128.     tab[0][1]=-1;
  129.     tab[0][5]=-1;
  130.     tab[0][6]=-1;
  131.     tab[1][0]=-1;
  132.     tab[1][1]=-1;
  133.     tab[1][5]=-1;
  134.     tab[1][6]=-1;
  135.     tab[5][0]=-1;
  136.     tab[5][1]=-1;
  137.     tab[5][5]=-1;
  138.     tab[5][6]=-1;
  139.     tab[6][0]=-1;
  140.     tab[6][1]=-1;
  141.     tab[6][5]=-1;
  142.     tab[6][6]=-1;
  143.     tab[3][3]=0;
  144. }
  145. int main()
  146. {
  147.     int x;
  148.     int tab[7][7];
  149.     for(int i=0;i<7;i++)
  150.         for(int j=0;j<7;j++)
  151.             tab[i][j]=1;
  152.     start(tab);
  153.     do
  154.     {
  155.         rysuj(tab);
  156.         do
  157.         {
  158.             x=ruch();
  159.             if(x==-1) break;
  160.         }while( !zmien(x, tab) );
  161.         if(x==-1) break;
  162.     }while(!sprawdz(tab));
  163.     if(x!=-1)
  164.     cout<<"Gratulacje, wygrales!";
  165.     cout<<"\nNacisnij dowolny przycisk, aby zakonczyc dzialanie programu.";
  166.     getch();
  167.     return 0;
  168. }
  169.  
  170.  
  171. //-------------------------------------------------------------------------------------------------
  172. //file:ConsoleColor.cpp
  173. //-------------------------------------------------------------------------------------------------
  174. #include <windows.h>
  175.  
  176. #define USTAW SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
  177. #define _X_ BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY );
  178. #define CZE FOREGROUND_RED |
  179. #define NIE FOREGROUND_BLUE |
  180. #define ZIE FOREGROUND_GREEN |
  181. #define INTENS FOREGROUND_INTENSITY);
  182.  
  183. void color(short color)
  184. {
  185.     switch(color)
  186.     {
  187.         case 0: USTAW CZE NIE ZIE INTENS break;
  188.         case 1: USTAW CZE INTENS break;
  189.         case 2: USTAW ZIE INTENS break;
  190.         case 3: USTAW NIE INTENS break;
  191.         case 4: USTAW NIE ZIE INTENS break;
  192.         case 5: USTAW CZE NIE INTENS break;
  193.         case 6: USTAW CZE NIE FOREGROUND_GREEN); break;
  194.         default: USTAW color | INTENS
  195.     }
  196. }
Advertisement
Add Comment
Please, Sign In to add comment