Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using namespace std;
- void console (int x, int y){
- HANDLE okno = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD size;
- size.X = x;
- size.Y = x;
- SetConsoleScreenBufferSize(okno, size);
- }
- int wstep () {
- MessageBoxA (NULL, "Warcaby by Arkadiusz Wróbel! \nUpewnij siê czy masz w³¹czony capslock", "Warcaby", MB_ICONEXCLAMATION ) ;
- char data;
- SetConsoleTitleA( "Warcaby by Arkadiusz Wróbel" ) ;
- cout << "Witaj w grze warcaby!" << endl;
- cout << endl;
- cout << endl;
- cout << " MENU GLOWNE: " << endl;
- cout << " WCISNIJ KLAWISZ 1 ABY URUCHOMIC GRE MULTIPLAYER " <<endl;
- cout << " WCISNIJ KLAWISZ 2 ABY URUCHOMIC GRE SINGLE " <<endl;
- cout << " WCISNIJ KLAWISZ 3 ABY WYLACZYC GRE " <<endl;
- data = getch();
- return data;
- }
- string nazwa (){
- string gracz;
- cin >> gracz;
- return gracz;
- }
- void czysc(){
- HANDLE hOut;
- hOut = GetStdHandle(STD_OUTPUT_HANDLE);
- cout << "CLEANED" << endl << endl;
- }
- void clear() {
- system("cls");
- }
- string explode ( const string & str, const char ch, const unsigned int v)
- {
- string ret = "";
- for( size_t i = 0, tmp = 0; i < str.size(); ++i ) {
- if( str[ i ] == ch ) {
- if( tmp > v ) break;
- else ++tmp;
- }
- else if ( tmp == v ) ret += str[ i ];
- }
- return ret;
- }
- void biale_tlo(){
- HANDLE hOut; // Uchwyt kolorow
- hOut = GetStdHandle( STD_OUTPUT_HANDLE ); //Przypisujemy do zmiennej
- SetConsoleTextAttribute( hOut, BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE );
- }
- void brazowe_tlo(){
- HANDLE hOut; // Uchwyt kolorow
- hOut = GetStdHandle ( STD_OUTPUT_HANDLE ); //Przypisujemy do zmiennej
- SetConsoleTextAttribute( hOut, BACKGROUND_GREEN | BACKGROUND_RED );
- }
- void biala_szachownica( string text, bool newline){
- HANDLE hOut; // Uchwyt kolorow
- hOut = GetStdHandle ( STD_OUTPUT_HANDLE ); //Przypisujemy do zmiennej
- SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE );
- if(newline == true) {
- cout << text << endl;
- }else {
- cout << text;
- }
- }
- void generuj_kolor(int nr, bool biale){
- if(biale != true) {
- nr++;
- }
- if(nr % 2 == 0){
- brazowe_tlo();
- }else{
- biale_tlo;
- }
- }
- void generuj_linie (bool zamiana, int tab[], int licznik) {
- char alfabet[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'h'};
- cout << " ";
- // FOR POCZTKOWY !!!!!
- for (int up = 1; up <=8; up++) {
- // Zaczynamy dla nieparzytych = bialemu
- biala_szachownica ("", false );
- generuj_kolor (up, zamiana);
- cout << " ";
- }
- // przeskakujemy nizej
- biala_szachownica("", true);
- // Tutaj wyœwietlamy pionka if jest
- cout << alfabet[licznik] << " ";
- for (int center = 1; center <= 8; center++){
- if(tab[center-1] == 1) {
- biala_szachownica("", false);
- generuj_kolor (center, zamiana);
- cout << " w ";
- }else if(tab[center-1] == 2) {
- biala_szachownica("", false);
- generuj_kolor(center, zamiana);
- cout <<" B ";
- }
- else if(tab[center-1] == 3) {
- biala_szachownica ("", false);
- generuj_kolor(center, zamiana);
- cout <<" W_W ";
- } else if(tab[center-1] == 4) {
- biala_szachownica ("", false);
- generuj_kolor(center, zamiana);
- cout <<" B-B ";
- }else{
- biala_szachownica("", false);
- generuj_kolor(center , zamiana);
- cout << " ";
- for(int line=1; line<=8; line++){
- biala_szachownica("", false);
- generuj_kolor(line, zamiana);
- cout <<" ";
- }
- biala_szachownica("", true);
- }
- }
- }
- void tworzenie_plikow(string const_prog){
- string data[8] = {"line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt", "line_7.txt"} ;
- string co = "copy" + const_prog + "\\data\\";
- string gdzie = " " + const_prog + "\\temp_data\\temp_" ;
- system("mkdir temp_data");
- for(int x = 0; x <= 7; x++){
- string temp = co + data[x] + gdzie + data[x];
- char* buf = new char [temp.size()+1];
- strcpy(buf, temp.c_str());
- system(buf);
- }
- }
- void plansza(string const_prog){
- string data[8] = {"line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt", "line_7.txt"} ;
- string gdzie = " " + const_prog + "\\temp_data\\temp_" ;
- string temps[8];
- for(int i = 0; 1 <=7; i++){
- string temp = gdzie + data[i];
- char temp_line[25];
- FILE *zw;
- zw = fopen(temp.c_str(), "r");
- fgets(temp_line,25,zw); //czytanie pliku.
- temps[i] = temp_line;
- fclose(zw);
- }
- int tab[8];
- for(int x = 0; x <= 7; x++){
- for(int y = 0; y <= 7; y++){
- if(explode (temps[x], ' ', y ) != "0" ){
- if(explode (temps[x], ' ', y) == "W-1"){
- tab[y] = 1;
- }else if(explode (temps[x], ' ', y) == "B-1"){
- tab[y] = 2;
- }else if(explode (temps[x], ' ', y) == "W-2"){
- tab[y] = 3;
- }else if(explode (temps[x], ' ', y) == "B-2"){
- tab[y] = 4;
- }
- }else{
- tab[y] = 0;
- }
- }
- if((x+2) % 2 == 0){
- generuj_linie (true, tab, x);
- }else {
- generuj_linie(false, tab, x);
- }
- }
- }
- string czytaj_ruch(int z ) {
- if(z == 1) {
- cout << "Wybierz pionka: np. HS: ";
- }else{
- cout << "Wskaz gdzie ma isc: ";
- }
- char alfabet[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
- char liczby[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
- string temp_move;
- int error = 0;
- while (error ==0){
- cin >> temp_move;
- char* buf = new char[temp_move.size()];
- strcpy(buf,temp_move.c_str());
- for(int i=0; i <=7; i++){
- for(int x=0; x<=7; x++){
- if(alfabet[i] == buf[0] && liczby[x] == buf [1]){
- cout << "Wybrales: " << temp_move << endl;
- return temp_move;
- }
- }
- }
- cout << "Bledne dane " << endl;
- }
- }
- bool veryfikuj(string moves[], string const_prog, int kto){
- char alfabet2[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
- char liczby2[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
- string data2[8] = {"line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt", "line_7.txt"} ;
- string mozliwe_ruchy[4];
- string dane = const_prog + "\\temp_data\\temp_" ;
- int jaki_plik;
- int jaka_liczba;
- int errors=0;
- string plik [8];
- char* movin = new char[moves[0].size()+1];
- strcpy (movin, moves[0].c_str());
- char* movout = new char[moves[1].size()+1];
- strcpy(movout, moves[1].c_str());
- for(int x=0; x<=7; x++){
- if(alfabet2[x] == movin[0]){
- jaki_plik = x;
- }
- }
- for(int i=0; i<=7; i++){
- if(liczby2[i] == movin[1]){
- jaka_liczba = i;
- }
- }
- for(int n = 0; n<=7; n++) {
- string temp = dane +data2[n];
- char temp_line[25];
- FILE *zw;
- zw = fopen(temp.c_str(), "r");
- fgets(temp_line,25,zw);
- plik[n] = temp_line;
- fclose(zw);
- }
- if(kto == 1){
- if(explode(plik[jaki_plik], ' ', jaka_liczba) == "W-1"){
- string litera(1, alfabet2[jaki_plik+1]);
- string liczA(1, liczby2[jaka_liczba+1]);
- string liczB(1, liczby2[jaka_liczba-1]);
- mozliwe_ruchy[0] = litera + liczA;
- mozliwe_ruchy[1] = litera + liczB;
- mozliwe_ruchy[2] = "";
- mozliwe_ruchy[3] = "";
- }else{
- string literaA(1, alfabet2[jaki_plik+1]);
- string literaB(1, alfabet2[jaki_plik-1]);
- string liczA(1, liczby2[jaka_liczba+1]);
- string liczB(1, liczby2[jaka_liczba-1]);
- mozliwe_ruchy[0] = literaA + liczA;
- mozliwe_ruchy[1] = literaA + liczB;
- mozliwe_ruchy[2] = literaB + liczB;
- mozliwe_ruchy[3] = literaB + liczA;
- }
- }else{
- if(explode(plik[jaki_plik], ' ', jaka_liczba) == "B-1"){
- string litera(1, alfabet2[jaki_plik-1]);
- string liczA(1, liczby2[jaka_liczba+1]);
- string liczB(1, liczby2[jaka_liczba-1]);
- mozliwe_ruchy[0] = litera + liczA;
- mozliwe_ruchy[1] = litera + liczB;
- mozliwe_ruchy[2] = "";
- mozliwe_ruchy[3] = "";
- }else{
- string literaA(1, alfabet2[jaki_plik+1]);
- string literaB(1, alfabet2[jaki_plik-1]);
- string liczA(1, liczby2[jaka_liczba+1]);
- string liczB(1, liczby2[jaka_liczba-1]);
- mozliwe_ruchy[0] = literaA + liczA;
- mozliwe_ruchy[1] = literaA + liczB;
- mozliwe_ruchy[2] = literaB + liczB;
- mozliwe_ruchy[3] = literaA + liczA;
- }
- }
- if(explode(plik[jaki_plik], ' ', jaka_liczba) !="0"){
- if(kto == 1 && explode(plik[jaki_plik], ' ', jaka_liczba) !="W-1"){
- if(kto == 1 && explode(plik[jaki_plik], ' ', jaka_liczba) != "W-2"){
- return false;
- }
- }
- if(kto == 0 && explode(plik[jaki_plik], ' ', jaka_liczba) != "B-1"){
- if(kto == 0 && explode(plik[jaki_plik], ' ', jaka_liczba) != "B-2"){
- return false;
- }
- }
- }else{
- return false;
- }
- for(int x=0; x<=7; x++){
- if(alfabet2[x] == movout[0]){
- jaki_plik = x;
- }
- }
- for(int i=0; i<=7; i++){
- if(liczby2[i] == movout[i]){
- jaka_liczba = i;
- }
- }
- //SPRAWDZAMY DRUGI RUCH
- for(int a=0; a<=3; a++){
- if(moves[1] == mozliwe_ruchy[a]){
- errors++;
- }
- }
- if(errors == 0){
- return false;
- }
- string tmp = explode(plik[jaki_plik],' ', jaka_liczba);
- if(tmp !="0"){
- if(kto == 1 && tmp == "W-1" || kto == 1 && tmp == "W-2" ){
- return false;
- }
- if(kto == 0 && tmp == "B-1" || kto == 0 && tmp == "B-2"){
- return false;
- }
- }
- return true;
- }
- int rusz(int kiery, string moves[], string const_prog){
- string plik[8];
- char alfabet2[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
- char liczby2[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
- string data2[8] = { "line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt", "line_7.txt"};
- string dane = const_prog + "\\temp_data\\temp_";
- int jaki_plik, jaka_liczba;
- char* movin = new char[moves[0].size()+1];
- strcpy(movin,moves[0].c_str());
- char* movout = new char[moves[1].size()+1];
- strcpy(movout,moves[1].c_str());
- for(int n = 0; n<=7; n++){
- string temp = dane + data2[n];
- char temp_line[25];
- FILE *zw;
- zw = fopen(temp.c_str(), "r");
- fgets(temp_line,25,zw);
- plik[n] = temp_line;
- fclose(zw);
- }
- for(int x=0; x<=7; x++){
- if(alfabet2[x] == movin[0]){
- jaki_plik = x;
- }
- if(liczby2[x] == movin[1]){
- jaka_liczba = x;
- }
- }
- string zmiana, dopis;
- string co_przenies = explode(plik[jaki_plik], ' ',jaka_liczba);
- for(int p=0; p<=7; p++){
- if(p == jaka_liczba){
- zmiana = zmiana + "0 ";
- }else{
- zmiana = zmiana + explode(plik[jaki_plik], ' ', p) + " ";
- }
- }
- char* zapis = new char[zmiana.size()+1];
- strcpy(zapis,zmiana.c_str());
- string temp2 = dane + data2[jaki_plik];
- char* bef = new char[temp2.size()+1];
- strcpy(bef,temp2.c_str());
- ofstream NowyPlik;
- NowyPlik.open(bef);
- NowyPlik << zmiana;
- NowyPlik.close();
- for(int x=0; x<=7; x++){
- if(alfabet2[x] == movout[0]){
- jaki_plik = x;
- {
- if(liczby2[x] == movout[1]){
- jaka_liczba = x;
- }
- }
- // jesli dojdzie do konca planszy
- if(kiery == 1 && alfabet2[jaki_plik] == 'H' && co_przenies == "W-1"){
- co_przenies = "W-2";
- }
- if(kiery == 1 && alfabet2[jaki_plik] == 'H' && co_przenies == "B-1"){
- co_przenies = "B-2";
- }
- // end jesli dojdzie do konca planszy
- for(int c=0; c<=7; c++){
- if(c == jaka_liczba){
- dopis = dopis + co_przenies + " ";
- }else{
- dopis = dopis + explode(plik[jaki_plik], ' ', c) + " ";
- }
- }
- char* dop = new char[dopis.size()+1];
- strcpy(dop,dopis.c_str());
- string temp3 = dane + data2[jaki_plik];
- char*beff = new char[temp3.size()+1];
- strcpy(beff,temp3.c_str());
- ofstream NowyPlika;
- NowyPlika.open(beff);
- NowyPlika << dopis;
- NowyPlika.close();
- if(kiery == 1 ){
- return 0;
- }else{
- return 1;
- }
- }
- bool end_it(string const_prog, string gracz[], int kto);
- string plik[8];
- string data2[8] = { "line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt","line_7txt"};
- string dane = const_prog + "\\temp_data\\temp_";
- int ile_W = 0;
- int ile_B = 0;
- for(int n = 0; n<=7; n++){
- string temp = dane + data2[n];
- char temp_line[25];
- FILE *zw;
- zw = fopen(temp.c_str(), "r");
- fgets(temp_line,25,zw);
- plik[n] = temp_line;
- fclose(zw);
- }
- for(int i=0; i<=7;i++){
- for(int x=0; x<=7; x++){
- if(explode(plik[i], ' ', x) != "0"){
- if(explode(plik[i], ' ', x) == "W-1" || explode(plik[i], ' ', x) == "W-2"){
- ile_W++;
- }
- if (explode(plik[i], ' ', x) == "B-1" || explode(plik[1], ' ', x) == "B-2"){
- ile_B++;
- }
- }
- }
- }
- if(ile_W == 0 || ile_B == 0){
- MessageBoxA( NULL, "Gra skonczona! \nDzieki za gre", "Warcaby", MB_ICONEXCLAMATION );
- clear();
- return true;
- }
- return false;
- }
- bool gra();
- tworzenie_plikow("D:\\Warcaby");
- bool game_over = false;
- string move[2];
- string gracze[2];
- int player_move = 1;
- time_t start, koniec;
- double roznica;
- clear();
- cout << "Podaj nick bialego" << endl;
- gracze[1] = nazwa();
- cout << "Podaj nick czarnego" << endl;
- gracze[0] = nazwa();
- clear();
- time( & start );
- while(game_over == false){
- clear();
- cout << "---------------------------------------------" << endl;
- cout << " Teraz ruszaja: " << endl;
- if(player_move == 1){
- cout << " " << gracze [1] << " Biale (W)" << endl;
- }else{
- cout << " " << gracze [0] << " Czarne (B)" << endl;
- }
- cout << "----------------------------------------------" << endl;
- plansza("D:\\Warcaby");
- moves[0] = czytaj_ruch(1);
- moves[1] = czytaj_ruch(0);
- if(veryfikuj(moves, "D:\\Warcaby", player_move) == false){
- cout << "NIE MOZESZ TAK RUSZYC" << endl;
- }else{
- cout << "Twoj ruch: " << moves[0] << " ---> " << moves[1] << endl;
- int tmp_move = player_move;
- player_move = rusz(tmp_move, moves, "D:\\Warcaby");
- }
- system("pause");
- game_over = ("D:\\Warcaby", gracze, player_move);
- }
- time( & koniec );
- roznica = difftime( koniec, start );
- cout << "Poprzednia gra trwala: " << roznica << "sek" << endl;
- return false;
- }
- bool single(){
- tworzenie_plikow("D:\\Warcaby");
- bool game_over = false;
- string moves[2];
- string gracze[1];
- int player_move = 1;
- clear();
- cout << "Podaj twoj nick:" << endl;
- gracze[0] = nazwa();
- clear();
- while(game_over == false){
- game_over = ("D:\\Warcaby", gracze, player_move);
- clear();
- cout << "----------------------------------------------" << endl;
- cout << " Teraz ruszaja: " << endl;
- if(player_move == 1){
- cout << " " << gracze[0] << "Biale (W)" << endl;
- }else{
- cout << " Komputer: Czarne (B)" << endl;
- }
- cout << "----------------------------------------------" << endl;
- plansza("D:\\Warcaby");
- if(player_move == 1){
- moves[0] = czytaj_ruch(1);
- moves[1] = czytaj_ruch(0);
- if(veryfikuj(moves, "D:\\Warcaby", player_move) == false){
- cout << "NIE MOZESZ TAK RUSZYC" << endl;
- }else{
- cout << "Twoj ruch: " << moves[0] << " ---> " << endl;
- int tmp_move = player_move;
- player_move = rusz(tmp_move, moves, "D:\\Warcaby");
- }
- }else{
- int bot_rand[2];
- char alf[8] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
- char lb[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
- string data2[8] = { "line_0.txt", "line_1.txt", "line_2.txt", "line_3.txt", "line_4.txt", "line_5.txt", "line_6.txt", "line_7.txt"};
- string mozliwe_ruchy[4];
- string dane = "D:\\Warcaby\\temp_data\\temp_";
- string plik[8];
- string wysli[2];
- bool find = false;
- while(find == false){
- for(int i=0;i<=2;i++){
- if (i>=0){
- bot_rand[i] = rand()%8;
- }
- }
- string lit(1, alf[bot_rand[0]]);
- string cyf(1,lb[bot_rand[1]]);
- string moves = lit + cyf;
- for(int n = 0; n<=7; n++){
- string temp = dane + data2[n];
- char temp_line[25];
- FILE *zw;
- zw=fopen(temp.c_str(), "r");
- fgets(temp_line,25,zw);
- plik[n] = temp_line;
- fclose(zw);
- }
- if(explode(plik[bot_rand[0]], ' ', bot_rand[1]) == "B-1"){
- string litera(1, alf[bot_rand[0]-1]);
- string liczA(1, lb[bot_rand[1]+1]);
- string liczB(1, lb[bot_rand[1]-1]);
- mozliwe_ruchy[0] = litera + liczA;
- mozliwe_ruchy[1] = litera + liczB;
- mozliwe_ruchy[2] = "";
- mozliwe_ruchy[3] = "";
- }else if(explode(plik[bot_rand[0]], ' ', bot_rand[1]) == "B-2"){
- string literaA(1, alf[bot_rand[0]+1]);
- string literaB(1, alf[bot_rand[0]-1]);
- string liczA(1, lb[bot_rand[1]+1]);
- string liczB(1, lb[bot_rand[1]-1]);
- mozliwe_ruchy[0] = literaA + liczA;
- mozliwe_ruchy[1] = literaA + liczB;
- mozliwe_ruchy[2] = literaB + liczB;
- mozliwe_ruchy[3] = literaB + liczA;
- }
- for(int c=0; c<=3; c++){
- wysli[0] = moves;
- wysli[1] = mozliwe_ruchy[c];
- char* mov = new char[wysli[1].size()+1];
- strcpy(mov,wysli[1].c_str());
- for(int i=0; i <=7; i++){
- for(int x=0; x<=7; x++){
- if(alf[i] == mov[0] && lb[x] == mov[1]){
- if(veryfikuj(wysli, "D:\\Warcaby", 0) != false){
- cout << "Ruch kompa: " << moves << "---> " << mozliwe_ruchy[c] << endl;
- int tmp_move = player_move;
- player_move = rusz(tmp_move, wysli, "D:\\Warcaby");
- find = true;
- c=3;
- }
- }
- }
- }
- }
- }
- system("pause");
- }
- }
- return false;
- }
- // ROZGRYWKA
- int main(){
- srand( time ( NULL ) );
- bool exit = false;
- console(80, 25);
- while(exit == false){
- switch (wstep()){
- case '1':
- clear();
- cout << "Powodzenia!" << endl;
- cout << "Gra zaraz sie rozpocznie!" << endl;
- cout << "Ladowanie: ";
- for(int x = 0 ; x <= 25; x++){
- Sleep(70);
- cout << ">" << flush;
- }
- system("cls");
- break;
- case '2':
- clear();
- cout << "Nie wygrasz z komputerem!" << endl;
- cout << "Ladowanie: ";
- for(int x = 0; x <= 25; x++){
- Sleep(110);
- cout << ">" << flush;
- }
- exit = single();
- break;
- case '3':
- system("cls");
- cout << "Zapraszamy ponownie!" << endl;
- exit = true;
- system("pause");
- break;
- default:
- system("cls");
- cout << "Wykryto niepoprawny znak !!!!" << endl;
- cout << endl;
- system("pause");
- system("cls");
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement