Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Проверка хода и битье фигуры 
:(
    Опции темы
CppDevelopeR
Дата 18.12.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 7.1.2008
Где: Moscow-City

Репутация: -1
Всего: 9



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


#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;
}



--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.