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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра на консоле 
:(
    Опции темы
stat007
Дата 6.10.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Написал не сложную игрушку в консольном приложение. Чтото вроде пазл:
Цитата

1234
5678
9ABC
DEF

Но не работают получаются 2 момента в программе - это Randomize, т.к. должно быть хаотичное распределение цифр и букв в поле при запуске, и собственно передвижение "пустого символа" по полю. 
Надеюсь на более профессиональный взгляд  smile 
Код

#include "stdafx.h"
#include<iostream>
#include<ctime>
using namespace std;
int keMove=0;

enum EMove {  keUp='w',
              keDown='z',
              keLeft='a',
              keRight='s'};

void InitializeBoard(char[4][4]);
void PrintBoard(char[4][4]);
void LocateSpace(int&, int&, char[4][4]);
void Randomize(char[4][4]);
void Move(char[4][4], const int EMove);


int _tmain(int argc, _TCHAR* argv[])
{
    char caaBoard[4][4];
    InitializeBoard(caaBoard);
    Randomize(caaBoard);
    using namespace std;
    do
    {
        PrintBoard(caaBoard);
        cout<<endl<<"w = Up, z = Down, a = Left, s = Right"<<endl;
        char cNextMove;
        cin>>cNextMove;
        EMove eNextMove=(EMove)cNextMove;
        Move(caaBoard, eNextMove);
        cout<<endl;
    }
    while(true);
    system("pause");
    return EXIT_SUCCESS;
}
void InitializeBoard(char caaBoard[4][4])
{
    const char kcaaInitial[4][4]=
    {
        {'1', '2', '3', '4'},
        {'5', '6', '7', '8'},
        {'9', 'A', 'B', 'C'},
        {'D', 'E', 'F', ' '}
    };
    for(int iRow=0; iRow<4; ++iRow)
    {
        for(int iCol=0; iCol<4; ++iCol)
        {
            caaBoard[iRow][iCol]=kcaaInitial[iRow][iCol];
        }
    }
}

void PrintBoard(char caaBoard[4][4])
{
    for(int iRow=0; iRow<4; ++iRow)
    {
        for(int iCol=0; iCol<4; ++iCol)
        {
            cout<<caaBoard[iRow][iCol];
        }
        cout<<endl;
    }
}
void LocateSpace(int& irRow, int& irCol, char caaBoard[4][4])
{
    for(int iRow=0; iRow<4; ++iRow)
    {
        for(int iCol=0; iCol<4; ++iCol)
        {
            if(caaBoard[iRow][iCol]==' ')
            {
                irRow=iRow;
                irCol=iCol;
            }
        }
    }
}
void Randomize(char caaBoard[4][4])
{
    using namespace std;
    srand((unsigned int) time(0));
    for(int iIndex=0; iIndex<1000000; ++iIndex)
    {
        const int kiNextMove=(rand() % 4);
        switch(kiNextMove)
        {
        case 0:
            {
                Move(caaBoard, keUp);
                break;
            }
        case 1:
            {
                Move(caaBoard, keDown);
                break;
            }
        case 2:
            {
                Move(caaBoard, keLeft);
                break;
            }
        case 3:
            {
                Move(caaBoard, keRight);
                break;
            }
        }
    }
}
void Move(char caaBoard[4][4], const int Emove)
{
    int iRowSpace;
    int iColSpace;
    LocateSpace(iRowSpace, iColSpace, caaBoard);
    int iRowMove(iRowSpace);
    int iColMove(iColSpace);
    
    switch(keMove)
    {
    case keUp:
        {
            iRowMove = iRowSpace + 1;
            break;
        }
    case keDown:
        {
            iRowMove = iRowSpace - 1;
            break;
        }
    case keLeft:
        {
            iColMove = iColSpace + 1;
            break;
        }
    case keRight:
        {
            iColMove = iColSpace - 1;
            break;
        }
    }
    if(iRowMove >= 0 && iRowMove < 4 && iColMove >= 0 && iColMove < 4)
    {
        caaBoard[iRowSpace][iColSpace] = caaBoard[iRowMove][iColMove];
        caaBoard[iRowMove][iColMove] = ' ';
    }
}


Это сообщение отредактировал(а) stat007 - 6.10.2009, 20:39
PM MAIL   Вверх
Anikmar
Дата 6.10.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(stat007 @  6.10.2009,  20:38 Найти цитируемый пост)
Но не работают получаются 2 момента в программе - это Randomize,


На вскидку: с Randomize все в порядке, а сперемещением мне кажется дело тут:

Цитата(stat007 @  6.10.2009,  20:38 Найти цитируемый пост)
    if(iRowMove >= 0 && iRowMove < 4 && iColMove >= 0 && iColMove < 4)
    {
        caaBoard[iRowSpace][iColSpace] = caaBoard[iRowMove][iColMove];
        caaBoard[iRowMove][iColMove] = ' ';


Сдвинуть вы сдвинули, а новые координаты в iRowSpace и iColSpace не занесли. Поэтому крутитесь на месте.
PM MAIL ICQ   Вверх
stat007
Дата 6.10.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Anikmar, Та вроду всё ж верно написано... исправте - если видите ошибку.
PM MAIL   Вверх
Anikmar
Дата 6.10.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(stat007 @  6.10.2009,  22:14 Найти цитируемый пост)
Anikmar, Та вроду всё ж верно написано... исправте - если видите ошибку. 

Я сильно не вникал. Чисто навскидку - предположил где может быть ошибка.

Сейчас глянул - вроде вы пробел сначала ищите отдельной функцией - должно вроде как работать. Смотрите под отладчиком - может с кодами движения что-то не так.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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