Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2014, 12:11   #1
Aleksandr644
 
Регистрация: 14.08.2014
Сообщений: 3
По умолчанию Нахождение значения в матрице.

Здравствуйте форумчане, относительно недавно стал изучать C++ как хобби.
Изучив немного операторов решил закрепить знания написав небольшую игру-программку. Создавал в CODE::BLOCKS под Windows xp.
Программка компилируется, но выдает неверный результат.
Там есть статический массив в котором заранее определено значение эл-ов, но в одной функции значение не находится и программа выдает о своем завершении.
А точнее, это лабиринт, в котором есть персонаж. При нажатии стрелок он должен двигаться по нему. Но этот персонаж не определяется в лабиринте.
Помогите пожалуйста закрепить свои познания.
ЗЫ Критика приветствуется, но прошу учесть, что стал недавно учить язык и поэтому сам понимаю что структура кода ужасна.
Aleksandr644 вне форума Ответить с цитированием
Старый 21.08.2014, 12:13   #2
Aleksandr644
 
Регистрация: 14.08.2014
Сообщений: 3
По умолчанию

Думаю что ошибка где то здесь.
сам код:
Код:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>

#define size 28

using namespace std;

bool labyrEdit(short labyr[][size],short var) //изменение матрицы взависимости от действия
{
if(var == 5) return 0;//проверяет на начало программы и выходит =)
short z=0,w=0;
for(z;z<size;z++)//цикл матрицы
{
	for(w;w<size;w++)
	{

		if(labyr[z][w] == 6)//проверка на наличие "персонажа"
		{
			switch(var)//применение действия
			{
                case 1://вверх
                    if(labyr[z+1][w]!=1)// проверяем что это не "стенка"
                    {
                        labyr[z][w]=0;//закрываем за собой "след"
                        labyr[z+1][w]=6;//переходим в след значение матрицы
                        //if(labyr[0][4] == 6)return 1;//если мы дошли до выхода, говорим что это правда.
                        return 0;//возвращаем что игра еще не окончена
                    }
                    else
                    {
                        cout<<"You hit the wall."<<endl;//если уперлись в стенку
                        return 0;//возвращаем что игра еще не окончена
                    }
                case 2://влево
                    if(labyr[z][w-1]!=1)
                    {
                        labyr[z][w]=0;
                        labyr[z][w-1]=6;
                        return 0;
                    }
                    else
                    {
                        cout<<"You hit the wall."<<endl;
                        return 0;
                    }
                case 3://вниз
                    if(labyr[z-1][w]!=1)
                    {
                        labyr[z][w]=0;
                        labyr[z-1][w]=6;
                        return 0;
                    }
                    else
                    {
                        cout<<"You hit the wall."<<endl;
                        return 0;
                    }
                case 4://вправо
                    if(labyr[z][w+1]!=1)
                    {
                        labyr[z][w]=0;
                        labyr[z][w+1]=6;
                        return 0;
                    }
                    else
                    {
                        cout<<"You hit the wall."<<endl;
                        return 0;
                    }
                default://если предоставили не корректное значение движения.
                    cout<<"No press desired key"<<endl;
                    return 0;
			}
		}

	}
}
cout<<"The program did not find the character."<<endl;//если программа не нашла "персонажа"
cout<<labyr[26][25]<<endl;//убеждаемся, что "персонаж" все же есть.
return 1;//возвращаем значение об окончании игры( в моем случае для того чтоб выявить ошибку)
}

short labyrMove()//инициализация клавиш движения
{
    int keyStroke;
    do//цикл до нажатия необходимой клавиши
    {
        keyStroke=getch();
        if(keyStroke==224)
        {
            keyStroke=getch();
            switch(keyStroke)
            {
            case 72://вверх
                cout<<"up"<<endl;
                return 1;
            case 75://лево
                cout<<"left"<<endl;
                return 2;
            case 80://вниз
                cout<<"down"<<endl;
                return 3;
            case 77://право
                cout<<"right"<<endl;
                return 4;
            default:
                cout<<"some other key"<<endl;
            }
        }
        else cout<<"Some other key"<<endl;
    }
    while(keyStroke!=27);//27 = esc выход
    return 0;
}

Последний раз редактировалось Stilet; 21.08.2014 в 20:11.
Aleksandr644 вне форума Ответить с цитированием
Старый 21.08.2014, 12:14   #3
Aleksandr644
 
Регистрация: 14.08.2014
Сообщений: 3
По умолчанию

продолжение кода:[code]

void labyrPrint( short labyr[][size])//вывод матрицы взависимости от значения элементов
{
for(short x=0;x<size;x++)
{
for(short y=0;y<size;y++)
{
switch(labyr[x][y])//вывод знаков в зависимости от элементов матрицы
{
case 1://выводим || - "стенку"
{
cout<< (char)124 << (char)124;
break%3

Последний раз редактировалось Stilet; 21.08.2014 в 20:18.
Aleksandr644 вне форума Ответить с цитированием
Старый 26.08.2014, 12:46   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Просто в отладчике пошагам идите и смотрите, как меняются переменные
8Observer8 вне форума Ответить с цитированием
Старый 26.08.2014, 13:21   #5
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Я бы заострил внимание в подобных местах:
Код:
labyr[z+1][w]
У вас идёт цикл от 0 до конца границ квадрата. Если z на текущей итерации - это край квадрата, то обращение к индексу z+1 вызовет ошибку сигментации.
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение min,max в матрице Mathcad Honeylollipop Помощь студентам 1 31.05.2013 01:44
Нахождение средне арифметического в матрице Shelony Общие вопросы C/C++ 6 06.02.2013 00:09
Нахождение кратчайшего пути по матрице, или передвижение привидений в игре Пакмен Андрей! Общие вопросы C/C++ 0 02.11.2012 21:41
Нахождение минимального пути в булевой матрице [MI_nor] Помощь студентам 1 21.03.2011 16:55
Нахождение чисел в матрице bpystep Помощь студентам 12 23.03.2009 00:31