Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
#1

Програмка выдает неправильное значение - C++

21.08.2014, 13:23. Просмотров 293. Ответов 8
Метки нет (Все метки)

Здравствуйте форумчане, относительно недавно стал изучать C++ как хобби.
Изучив немного операторов решил закрепить знания написав небольшую игру-программку. Создавал в CODE::BLOCKS под Windows xp.
Программка компилируется, но выдает неверный результат.
Там есть статический массив в котором заранее определено значение эл-ов, но в одной функции значение не находится и программа выдает о своем завершении.
А точнее, это лабиринт, в котором есть персонаж. При нажатии стрелок он должен двигаться по нему. Но этот персонаж не определяется в лабиринте.
Помогите пожалуйста закрепить свои познания.
ЗЫ Критика приветствуется, но прошу учесть, что стал недавно учить язык и поэтому сам понимаю что структура кода ужасна.
Думаю что ошибка где то здесь labyrEdit? а конкретно в if(labyr[z][w] == 6).
сам код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#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;
}
 
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;
            }
            /*case 2:
            {
                cout<<(char)58<<(char)58;
                * break;
            }*/
            case 4://выводим знак начала
            {
                cout<< (char)94 << (char)94;
                break;
            }
            case 5://выводим знак "финиша"
            {
                cout<< (char)42 << (char)42;
                break;
            }
            case 6://выводим знак "персонажа"
            {
                short varrand; //небольшое разнообразие в выводе матрицы =)
                varrand = rand()%10;
                if(varrand>=4)
                    cout<< (char)81 <<" ";
                else
                    cout<< " "<< (char)81;
                break;
            }
            default://для всех других знаков, поскольку матрица статичная, то в моем случае это 0.
            {
                cout<< "  ";
                break;
            }
            }
        }
        cout << endl;
    }
    cout<<"\t\t\t"<< (char)81 << " - it's you."<<endl;
}
 
int main()
{
    SetConsoleCP(1251);//пытался выводить в консоль русский язык, но в ХП не получилось.
    SetConsoleOutputCP(1251);//хоть это для ввода кирилических символов, но все же...
    srand(time(0));
    bool theEnd; //значение для проверки победы
    short var = 5;//значение для инициализации "движения"
    int counterMoves=0;//подсчет ходов
    short labyr[size][size]=      {{1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                                   {1,1,1,1,2,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,2,2,2,1},
                                   {1,1,2,2,2,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,2,1,2,1},
                                   {1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1},
                                   {1,2,1,1,0,1,1,2,2,2,2,2,2,2,2,1,0,1,1,1,1,1,1,1,1,1,2,1},
                                   {1,2,1,0,0,1,0,2,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,2,1},
                                   {1,2,1,0,1,1,1,2,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,2,2,2,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,1,1,1,2,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,2,1},
                                   {1,2,2,2,1,0,0,0,1,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,2,1},
                                   {1,0,1,2,1,1,1,0,1,1,2,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,2,1},
                                   {1,1,0,2,2,2,1,0,1,1,2,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,2,2,2,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,0,0,0,1,0,0,0,1,0,1,2,2,2,2,1,0,1,2,1},
                                   {1,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,2,1,1,2,1,0,1,2,1},
                                   {1,0,1,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2,2,2,2,2,1},
                                   {1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
                                   {1,3,1,1,1,0,1,3,3,3,1,0,1,0,0,0,0,0,0,2,1,2,2,2,1,0,1,1},
                                   {1,3,0,0,0,0,1,3,1,3,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,0,1,1},
                                   {1,3,1,1,1,1,1,3,1,3,1,0,0,0,0,0,0,0,0,2,2,2,1,2,1,0,1,1},
                                   {1,3,3,3,3,3,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1},
                                   {1,1,1,1,1,1,1,1,1,3,3,3,3,1,3,3,3,1,3,3,3,1,1,2,2,2,1,1},
                                   {1,0,0,0,0,0,0,0,0,0,1,1,3,3,3,1,3,3,3,1,3,3,3,3,1,6,1,1},
                                   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1}};
/* 0 - ложный путь , 1 - стенка , 2 - верный путь, 3 - секретный путь , 4 - начало, 5 - конец
 * 6 - это персонаж*/
    labyrPrint(labyr);//вывод матрицы вначале программы
    cin.get();
    cout<<"You are standing at the en]trance to the maze"<<endl;
    cout<<"Managing arrow Scroll from the beginning -"<<(char)94 << (char)94<<" to exit -"<<(char)42 << (char)42<<endl;
    cin.get();
    cout <<"Press Esc to exit"<<endl;
    do//начало самой игры
    {
        var = labyrMove();//выбираем движение
        if(var!=0)//если не нажали кнопку выхода
        {
            theEnd = labyrEdit(labyr,var);//в соответствии с движением выполняем изменение массива
            if (theEnd == true)//если персонаж достиг финиша
            {
                labyrPrint(labyr); //выводим матрицу
                cout << "Congratulations, you have completed the Labyrinth !!!"<<endl;
                return 0;//конец программы
            }
 
            labyrPrint(labyr);//выводим матрицу после изменения
            counterMoves++;//подсчет движения
            cout <<"Move = "<<counterMoves<<endl;//вывод колличества передвижений
        }
    }
    while(var!=0);//если нажали выход(esc)
 cout<<"Successfully conduct the rest of his life in the LABYRINTH"<<endl;
 return 0;//конец программы
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2014, 13:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Програмка выдает неправильное значение (C++):

this возвращает неправильное значение - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class oops{ public: oops():key(10){} int key; oops&amp; oper1(int...

неправильное значение переменной - C++
вот код #include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int _tmain(int argc,...

Неправильное значение итератора end() - C++
Здравствуйте! Создаю лист и итератор. Заполняю структуру данными. Передаю в функцию пустой контейнер - лист и данные структуры, чтобы...

Неправильное значение в атрибуте класса - C++
всем доброго времени суток. пишу курсовую - программа-калькулятор двоичных чисел. заметил несколько проблем. в функции f_2_to_10 не...

Неправильное значение объема конуса - C++
В чем проблема? Комментарии в коде: #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;locale&gt; using namespace...

Неправильное возвращаемое значение функции time - C++
что за бардак мне time возвращает??? что типа щас 10 месяц, а год вообще 114 :D пишу так: time_t t; time(&amp;t); tm tt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 13:28 #2
Цитата Сообщение от Aleksandr644 Посмотреть сообщение
C++
1
2
case 2://влево 
if(labyr[z][w-1]!=1)
ну можно начать с того что тут выход за границу массива
1
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 13:36  [ТС] #3
Забыл сказать, что поскольку массив изначально задан, то этот момент продуман и массив огражден стенами.(единичками) поэтому за границу массива выйти не получится.
Хотя спасибо за указание на ошибку, ведь изначально старт у границы массива и при "вниз", тогда и выходим за границу.
0
tamir
0 / 0 / 3
Регистрация: 21.08.2014
Сообщений: 6
21.08.2014, 14:53 #4
C++
1
short z=0,w=0;
Нужно изменить все индексы на int
Также вы перепутали вверх с низом. Во время первого запуска, когда я нажимаю вверх, персонаж идёт вниз - нужно поменять индексы. Также персонаж проходит сквозь стены)
0
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 15:32  [ТС] #5
к сожалению у меня никак не хочет шагать... выводит результат что персонаж не найден...
У вас он всеж шагает?
0
tamir
0 / 0 / 3
Регистрация: 21.08.2014
Сообщений: 6
21.08.2014, 15:45 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Да, у меня шагает, но проходит сквозь стены)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
 
#define size 28
 
using namespace std;
 
bool labyrEdit(int labyr[][size],short var) //изменение матрицы взависимости от действия
{
    
if(var == 5) return 0;//проверяет на начало программы
 
for(int z = 0;z<size;z++)//цикл матрицы
{
    for(int w = 0;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;//возвращаем значение об окончании игры( в моем случае для того чтоб выявить ошибку)
}
 
int 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;
}
 
void labyrPrint( int labyr[][size])//вывод матрицы взависимости от значения элементов
 {
    for(int x=0;x<size;x++)
    {
        for(int y=0;y<size;y++)
        {
            switch(labyr[x][y])//вывод знаков в зависимости от элементов матрицы
            {
            case 1://выводим || - "стенку"
            {
                cout<< (char)124 << (char)124;
                break;
            }
            /*case 2:
            {
                cout<<(char)58<<(char)58;
                * break;
            }*/
            case 4://выводим знак начала
            {
                cout<< (char)94 << (char)94;
                break;
            }
            case 5://выводим знак "финиша"
            {
                cout<< (char)42 << (char)42;
                break;
            }
            case 6://выводим знак "персонажа"
            {
                
                cout << "Q";
                break;
            }
            default://для всех других знаков, поскольку матрица статичная, то в моем случае это 0.
            {
                cout<< "  ";
                break;
            }
            }
        }
        cout << endl;
    }
    cout<<"\t\t\t"<< (char)81 << " - it's you."<<endl;
}
 
int main()
{
    SetConsoleCP(1251);//пытался выводить в консоль русский язык, но в ХП не получилось.
    SetConsoleOutputCP(1251);//хоть это для ввода кирилических символов, но все же...
    srand(time(0));
    bool theEnd; //значение для проверки победы
    short var = 5;//значение для инициализации "движения"
    int counterMoves=0;//подсчет ходов
    int labyr[size][size]=      {{1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                                   {1,1,1,1,2,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,2,2,2,1},
                                   {1,1,2,2,2,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,2,1,2,1},
                                   {1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1},
                                   {1,2,1,1,0,1,1,2,2,2,2,2,2,2,2,1,0,1,1,1,1,1,1,1,1,1,2,1},
                                   {1,2,1,0,0,1,0,2,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,2,1},
                                   {1,2,1,0,1,1,1,2,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,2,2,2,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,1,1,1,2,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,2,1},
                                   {1,2,2,2,1,0,0,0,1,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,2,1},
                                   {1,0,1,2,1,1,1,0,1,1,2,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,2,1},
                                   {1,1,0,2,2,2,1,0,1,1,2,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,2,2,2,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,0,0,0,1,0,0,0,1,0,1,2,2,2,2,1,0,1,2,1},
                                   {1,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,2,1,1,2,1,0,1,2,1},
                                   {1,0,1,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2,2,2,2,2,1},
                                   {1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
                                   {1,3,1,1,1,0,1,3,3,3,1,0,1,0,0,0,0,0,0,2,1,2,2,2,1,0,1,1},
                                   {1,3,0,0,0,0,1,3,1,3,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,0,1,1},
                                   {1,3,1,1,1,1,1,3,1,3,1,0,0,0,0,0,0,0,0,2,2,2,1,2,1,0,1,1},
                                   {1,3,3,3,3,3,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1},
                                   {1,1,1,1,1,1,1,1,1,3,3,3,3,1,3,3,3,1,3,3,3,1,1,2,2,2,1,1},
                                   {1,0,0,0,0,0,0,0,0,0,1,1,3,3,3,1,3,3,3,1,3,3,3,3,1,6,1,1},
                                   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1}};
/* 0 - ложный путь , 1 - стенка , 2 - верный путь, 3 - секретный путь , 4 - начало, 5 - конец
 * 6 - это персонаж*/
 
    labyrPrint(labyr);//вывод матрицы вначале программы
    cin.get();
    cout<<"You are standing at the en]trance to the maze"<<endl;
    cout<<"Managing arrow Scroll from the beginning -"<<(char)94 << (char)94<<" to exit -"<<(char)42 << (char)42<<endl;
    cin.get();
    cout <<"Press Esc to exit"<<endl;
    do//начало самой игры
    {
        var = labyrMove();//выбираем движение
        if(var!=0)//если не нажали кнопку выхода
        {
            theEnd = labyrEdit(labyr,var);//в соответствии с движением выполняем изменение массива
            if (theEnd == true)//если персонаж достиг финиша
            {
                labyrPrint(labyr); //выводим матрицу
                cout << "Congratulations, you have completed the Labyrinth !!!"<<endl;
                return 0;//конец программы
            }
 
            labyrPrint(labyr);//выводим матрицу после изменения
            counterMoves++;//подсчет движения
            cout <<"Move = "<<counterMoves<<endl;//вывод колличества передвижений
        }
    }
    while(var!=0);//если нажали выход(esc)
 cout<<"Successfully conduct the rest of his life in the LABYRINTH"<<endl;
 return 0;//конец программы 
    
}
0
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 15:57  [ТС] #7
Спасибо большое, перевел все переменные short в int и объявление переменных сделал в циклах, сразу все заработало... вот только у меня сквозь стены не проходит... возможно у вас другой шрифт(символы)? т.к. у меня по руски ну никак не хочет выводить =)
0
some_name
Вежливость-главное оружие
225 / 225 / 55
Регистрация: 19.02.2013
Сообщений: 1,438
21.08.2014, 16:07 #8
Цитата Сообщение от Aleksandr644 Посмотреть сообщение
т.к. у меня по руски ну никак не хочет выводить =)
вставьте внчалае main setlocale(LC_ALL, "Russian");

Добавлено через 51 секунду
Вы эту матрицу вручную вводили? Если да, то вы мой Герой!
1
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 16:28  [ТС] #9
В общем вот что получилось. Всем ОГРОМНОЕ спасибо! Я понимаю что здесь много ляпов, но всеж это моя первая програмка-шутка =)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
 
#define size 28
 
using namespace std;
 
bool labyrEdit(int labyr[][size],int var) //изменение матрицы взависимости от действия
{
if(var == 5) return 0;//проверяет на начало программы
 
for(int z=0;z<size;z++)//цикл матрицы
{
    for(int w=0;w<size;w++)
    {
 
        if(labyr[z][w] == 6)//проверка на наличие "персонажа"
        {
            switch(var)//применение действия
            {
                case 1://вниз
                    if(labyr[z+1][w]!=1&&labyr[z+1][w]!=4)// проверяем что это не "стенка"
                    {
                        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;
                        if(labyr[4][0] == 6)return 1;//если мы дошли до выхода, говорим что это правда.
                        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;//если программа не нашла "персонажа"
return 1;//возвращаем значение об окончании игры( в моем случае для того чтоб выявить ошибку)
}
 
int labyrMove()//инициализация клавиш движения
{
    int keyStroke;
    do//цикл до нажатия необходимой клавиши
    {
        keyStroke=getch();
        if(keyStroke==224)
        {
            keyStroke=getch();
            switch(keyStroke)
            {
            case 72://вверх
                cout<<"up"<<endl;
                return 3;
            case 75://лево
                cout<<"left"<<endl;
                return 2;
            case 80://вниз
                cout<<"down"<<endl;
                return 1;
            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;
}
 
void labyrPrint( int labyr[][size])//вывод матрицы взависимости от значения элементов
 {
    for(int x=0;x<size;x++)
    {
        for(int y=0;y<size;y++)
        {
            switch(labyr[x][y])//вывод знаков в зависимости от элементов матрицы
            {
            case 1://выводим || - "стенку"
            {
                cout<< (char)124 << (char)124;
                break;
            }
            /*case 2:
            {
                cout<<(char)58<<(char)58;
                * break;
            }*/
            case 4://выводим знак начала
            {
                cout<< (char)94 << (char)94;
                break;
            }
            case 5://выводим знак "финиша"
            {
                cout<< (char)42 << (char)42;
                break;
            }
            case 6://выводим знак "персонажа"
            {
                int varrand; //небольшое разнообразие в выводе матрицы =)
                varrand = rand()%10;
                if(varrand>=4)
                    cout<< (char)81 <<" ";
                else
                    cout<< " "<< (char)81;
                break;
            }
            default://для всех других знаков, поскольку матрица статичная, то в моем случае это 0.
            {
                cout<< "  ";
                break;
            }
            }
        }
        cout << endl;
    }
    cout<<"\t\t\t"<< (char)81 << " - it's you."<<endl;
}
 
int main()
{
    SetConsoleCP(1251);//пытался выводить в консоль русский язык, но в ХП не получилось.
    SetConsoleOutputCP(1251);//хоть это для ввода кирилических символов, но все же...
    srand(time(0));
    bool theEnd; //значение для проверки победы
    int var = 5;//значение для инициализации "движения"
    int counterMoves=0;//подсчет ходов
    int labyr[size][size]=      {{1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
                                   {1,1,1,1,2,1,1,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,2,2,2,1},
                                   {1,1,2,2,2,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,2,1,2,1},
                                   {1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1},
                                   {1,2,1,1,0,1,1,2,2,2,2,2,2,2,2,1,0,1,1,1,1,1,1,1,1,1,2,1},
                                   {1,2,1,0,0,1,0,2,1,1,1,0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,2,1},
                                   {1,2,1,0,1,1,1,2,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,0,0,1,2,1},
                                   {1,2,1,0,1,0,1,2,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,2,2,2,2,0,0,0,1,0,1,0,1,0,0,0,1,0,1,1,2,1},
                                   {1,2,1,0,1,0,1,1,1,1,2,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,2,1},
                                   {1,2,2,2,1,0,0,0,1,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,2,1},
                                   {1,0,1,2,1,1,1,0,1,1,2,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,2,1},
                                   {1,1,0,2,2,2,1,0,1,1,2,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,2,2,2,1,0,0,1,0,0,0,0,0,1,0,1,0,1,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,1,2,1},
                                   {1,0,1,1,1,2,1,2,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,1,0,1,2,1},
                                   {1,0,1,0,0,2,1,2,1,0,0,0,1,0,0,0,1,0,1,2,2,2,2,1,0,1,2,1},
                                   {1,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,2,1,1,2,1,0,1,2,1},
                                   {1,0,1,3,3,3,1,1,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2,2,2,2,2,1},
                                   {1,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1},
                                   {1,3,1,1,1,0,1,3,3,3,1,0,1,0,0,0,0,0,0,2,1,2,2,2,1,0,1,1},
                                   {1,3,0,0,0,0,1,3,1,3,1,0,1,1,1,1,1,1,1,2,1,2,1,2,1,0,1,1},
                                   {1,3,1,1,1,1,1,3,1,3,1,0,0,0,0,0,0,0,0,2,2,2,1,2,1,0,1,1},
                                   {1,3,3,3,3,3,3,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1},
                                   {1,1,1,1,1,1,1,1,1,3,3,3,3,1,3,3,3,1,3,3,3,1,1,2,2,2,1,1},
                                   {1,0,0,0,0,0,0,0,0,0,1,1,3,3,3,1,3,3,3,1,3,3,3,3,1,6,1,1},
                                   {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1}};
/* 0 - ложный путь , 1 - стенка , 2 - верный путь, 3 - секретный путь , 4 - начало, 5 - конец
 * 6 - это персонаж*/
    labyrPrint(labyr);//вывод матрицы вначале программы
    cin.get();
    cout<<"You are standing at the en]trance to the maze"<<endl;
    cout<<"Managing arrow Scroll from the beginning -"<<(char)94 << (char)94<<" to exit -"<<(char)42 << (char)42<<endl;
    cin.get();
    cout <<"Press Esc to exit"<<endl;
    do//начало самой игры
    {
        var = labyrMove();//выбираем движение
        if(var!=0)//если не нажали кнопку выхода
        {
            system("cls");
            labyrEdit(labyr,var);//в соответствии с движением выполняем изменение массива
            if (labyr[0][4]==6)//если персонаж достиг финиша
            {
                labyrPrint(labyr); //выводим матрицу
                cout << "Congratulations, you have completed the Labyrinth !!!"<<endl;
                return 0;//конец программы
            }
 
            labyrPrint(labyr);//выводим матрицу после изменения
            counterMoves++;//подсчет движения
            cout <<"Move = "<<counterMoves<<endl;//вывод колличества передвижений
        }
    }
    while(var!=0);//если нажали выход(esc)
 cout<<"Successfully conduct the rest of his life in the LABYRINTH"<<endl;
 return 0;//конец программы
}
Добавлено через 7 минут
ПС на семерке нормально русские шрифты вышли.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 16:28
Привет! Вот еще темы с ответами:

Почему функция возвращает неправильное значение - C++
Пробовал дебажил функцию и каждый раз проверка проходит условие, хотя оно выполняется... в итоге возвращается false //проверка...

Элементы структуры: неправильное значение после 10 элемента - C++
При создании массива из собственной структуры, после 10 элемента, начинает неправильно заполняться одно из полей (Target). using...

Где нужно писать сообщение об ошибке, если ввели неправильное значение? - C++
простите за глупый вопрос, но где нужно писать сообщение об ошибке, если ввели неправильное значение, перепробовала кучу вариантов, никак ...

Программа выдает приближенное значение - C++
В общем суть в том что нужно получить из формулы значение &quot;y&quot; при условии что x&lt;-1, но при вводе числа программа выдает приближенное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.08.2014, 16:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru