Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Проверка хода и битье фигуры


Автор: CppDevelopeR 18.12.2011, 20:44
Проблема в следующем: Не работает проверка на недопустимость хода и не получается сделать чтобы фигура при ходе била другую. Прошу помочь сегодня!!! Игра шашки! Вот код:


#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;
 
void SetColor(int text, int background)
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
 
int main()
{
        const int polex = 8;
        const int poley = 8;
        int pole[poley][polex] = {0},
                figura1 = 1,
                figura2 = 2,
                newx = -1,
                newy = -1,
                oldx= -1,
                oldy = -1,
                figure_player,
                current_value,
                plauer=0;
 
        bool step=true,
                 value_exists,
                 go=true,
                 plauer1,
                 plauer2;
 
        const int kolfig = 4;
 
        for(int y=0; y<poley; y++){
                for(int x=0; x<polex; x++){
                        if(y >= 5){
                                if(y%2 != 0){
                                        if(x%2 != 0) pole[x][y] = figura1;
                                } else {
                                        if(x%2 == 0) pole[x][y] = figura1;
                                }
                        }
                        if(y <= 2){
                                if(y%2 != 0){
                                        if(x%2 != 0) pole[x][y] = figura2;
                                } else {
                                        if(x%2 == 0) pole[x][y] = figura2;
                                }
                        }
                }
        }
 
    do{ 
        system("cls");
 
        // Вывод верхней нумерации по X
        for(int y=0; y<2; y++){
                cout << "    ";
                for(int x=0; x<polex; x++)
                        y==0 ? cout << x << "  " : cout << "---";
                cout << endl;
        } 
        // Вывод верхней нумерации по X (END)
 
        for(int y=0; y<poley; y++){
                // Вывод боковой нумерации по Y
                SetColor( 7, 0);
                cout << y << "| ";
                // Вывод боковой нумерации по Y (END)
                for(int x=0; x<polex; x++){
                        pole[x][y] == 0 ? SetColor( 0, 11) : pole[x][y] == 2 ? SetColor( 0, 8) : SetColor( 11, 4);
                        cout << " " << pole[x][y] << " ";
                }       
                cout << endl;
        }
        cout << endl;
 
        // Переключение игрока
        plauer1 = plauer%2 == 0 ? true : false; 
        plauer2 = plauer%2 == 1 ? true : false;
 
        SetColor( 12, 0);
        plauer2 ? cout << "Player 2" << endl << endl : cout << endl << endl;
 
        SetColor( 12, 0);
        plauer1 ? cout << "Player 1" << endl : cout << endl << endl;
 
        cout<< "OldX: ";
        cin >> oldx;
        cout<< "OldY: ";
        cin >> oldy;
        cout<< "NewX: ";
        cin >> newx;
        cout<< "NewY: ";
        cin >> newy;
 
        // Выводим значение в массива по координате следующего хода
        current_value = pole[newx][newy];
 
        // Проверка наличия вводимых данных
        value_exists = oldx != -1 && oldy != -1 && newx != -1 && newy != -1;
 
        // Выбор фигуры пользователя
        figure_player = plauer1 ? figura1 : figura2;
 
        // Проверка возможности хода
        plauer1 ?
                        step = (newx==oldx-1 && newy == oldy-1) || (newx==oldx+1 && newy == oldy-1) 
                        :
                        step = (newx==oldx-1 && newy == oldy+1) || (newx==oldx+1 && newy == oldy+1);

 
        // Вывод ошибки
        value_exists && !step || current_value == figure_player ? cout<< "Hoda net!" << endl : cout << endl << endl;
 
        // Запись ходов в поле
        if(step && current_value != figure_player){
                plauer++;
                pole[newx][newy] = figure_player;
                pole[oldx][oldy] = 0;
 
        }
 
}while(1);
 
        system("pause");
        return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)