Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include "bitset"
- int makeMove(char*,int*,int);
- int checkForTheWinner(int*);
- int showMap(int*);
- int main(){
- char howLong = 1;
- int where;
- char player = 'X';
- int map = 0;
- std::cout << std::bitset<32> (map) << " " << player << std::endl;
- showMap(&map);
- bool winner = 0;
- while(howLong != 0 && winner != 1){
- std::cout << "Podaj liczbe od 1 do 16 odpowiadajaca miejscu ktore chcesz wybrac liczac od lewego gornego rogu.\n";
- std::cin >> where;
- if(where > 0 && where < 17) {
- makeMove(&player, &map, where - 1);
- std::cout << std::bitset<32>(map) << "\n " << "Kolejka gracza: " << player << std::endl;
- winner = checkForTheWinner(&map);
- howLong = showMap(&map);
- }else
- std::cout << "NIE TYM RAZEM" << std::endl;
- }
- if(howLong == 0)
- std::cout << "Pojedynek zakonczyl sie remisem.";
- else{
- std::cout << "Przegrywa gracz " << player;
- }
- }
- int checkForTheWinner(int* map){
- int i = 0;
- bool win1pi;
- bool win1po;
- bool win2pi;
- bool win2po;
- for(int op = 0 ; op < 4; op ++){
- win1pi = 1;
- win1po = 1;
- win2pi = 1;
- win2po = 1;
- for ( int po = 0 ; po < 4; po ++){
- if((*map >> ((po + (op<<2) )<<1)&0b11) != 2) {
- win1po = 0;
- }else {
- }
- if((*map >> ((po + (op<<2) )<<1)&0b11) != 3) {
- win2po = 0;
- }
- if((*map >> (((po << 2) + op)<<1)&0b11) != 2){
- win1pi = 0;
- }
- if((*map >> (((po << 2) + op)<<1)&0b11) != 3){
- win2pi = 0;
- }
- /*
- std::cout << po + op * 4 << std::endl;
- std::cout << po * 4 + op << "\n\n";
- std::cout << (*map >> ((po + (op<<2) )<<1)&0b11) << std::endl;
- std::cout << (*map >> (((po << 2) + op)<<1)&0b11) << "\n" <<std::endl;
- */
- }
- if( win1po == 1 || win2po == 1 || win1pi == 1 || win2pi == 1)
- return 1;
- }
- win1po = 1;
- win1pi = 1;
- win2po = 1;
- win2pi = 1;
- for(int op = 0; op < 4 ; op ++){
- if( (*map >> ((op * 5)<<1)&0b11) != 2)
- win1po = 0;
- if( (*map >> ((op * 5)<<1)&0b11) != 3)
- win2po = 0;
- if(( (*map >> ((4 - op)*3)<1)&0b11) !=2)
- win1pi = 0;
- if(( (*map >> ((4 - op)*3)<1)&0b11) !=3)
- win2pi = 0;
- }
- if( win1po == 1 || win2po == 1 || win1pi == 1 || win2pi == 1)
- return 1;
- return 0;
- }
- int makeMove(char* player,int* map, int where) {
- char* savePlayer = new char (*player);
- int* save = new int (*map);
- int* stamp;
- if (*player == 'X') {
- stamp = new int(0b10);
- *savePlayer = 'O';
- } else {
- *stamp = 0b11;
- *savePlayer = 'X';
- }
- *stamp <<= 2 * where;
- *save |= *stamp;
- if (*map == *save || 0 != (*map & *stamp)) {
- std::cout << "Pole jest zajete." << std::endl;
- delete savePlayer;
- delete save;
- delete stamp;
- return -1;
- }else {
- *player = *savePlayer;
- *map = *save;
- delete savePlayer;
- delete save;
- delete stamp;
- return 0;
- }
- }
- int showMap(int* map){
- int result = 16;
- int i = 0;
- char drawer;
- std::cout << "_________________" << std::endl;
- for(int op = 0; op < 4; op ++) {
- std::cout << "| ";
- for(int po = 0; po < 4; po++) {
- // std::cout << ((*map>>i)&0b11) << " ";
- drawer = ((*map >> i)&0b11) == 3 ? 'O' : ((*map >> i)&0b11) == 2 ? 'X' : '@';
- if(drawer != '@')
- result--;
- std::cout << drawer << " | ";
- i+=2;
- }
- std::cout << std::endl << "-----------------" <<std::endl;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement