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

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

Восстановить пароль Регистрация
 
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 13:23     Програмка выдает неправильное значение #1
Здравствуйте форумчане, относительно недавно стал изучать 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;//конец программы
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
21.08.2014, 13:28     Програмка выдает неправильное значение #2
Цитата Сообщение от Aleksandr644 Посмотреть сообщение
C++
1
2
case 2://влево 
if(labyr[z][w-1]!=1)
ну можно начать с того что тут выход за границу массива
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 13:36  [ТС]     Програмка выдает неправильное значение #3
Забыл сказать, что поскольку массив изначально задан, то этот момент продуман и массив огражден стенами.(единичками) поэтому за границу массива выйти не получится.
Хотя спасибо за указание на ошибку, ведь изначально старт у границы массива и при "вниз", тогда и выходим за границу.
tamir
0 / 0 / 3
Регистрация: 21.08.2014
Сообщений: 6
21.08.2014, 14:53     Програмка выдает неправильное значение #4
C++
1
short z=0,w=0;
Нужно изменить все индексы на int
Также вы перепутали вверх с низом. Во время первого запуска, когда я нажимаю вверх, персонаж идёт вниз - нужно поменять индексы. Также персонаж проходит сквозь стены)
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 15:32  [ТС]     Програмка выдает неправильное значение #5
к сожалению у меня никак не хочет шагать... выводит результат что персонаж не найден...
У вас он всеж шагает?
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;//конец программы 
    
}
Aleksandr644
2 / 2 / 0
Регистрация: 11.08.2014
Сообщений: 11
21.08.2014, 15:57  [ТС]     Програмка выдает неправильное значение #7
Спасибо большое, перевел все переменные short в int и объявление переменных сделал в циклах, сразу все заработало... вот только у меня сквозь стены не проходит... возможно у вас другой шрифт(символы)? т.к. у меня по руски ну никак не хочет выводить =)
some_name
Вежливость-главное оружие
 Аватар для some_name
219 / 219 / 55
Регистрация: 19.02.2013
Сообщений: 1,419
21.08.2014, 16:07     Програмка выдает неправильное значение #8
Цитата Сообщение от Aleksandr644 Посмотреть сообщение
т.к. у меня по руски ну никак не хочет выводить =)
вставьте внчалае main setlocale(LC_ALL, "Russian");

Добавлено через 51 секунду
Вы эту матрицу вручную вводили? Если да, то вы мой Герой!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2014, 16:28     Програмка выдает неправильное значение
Еще ссылки по теме:

C++ Неправильное значение итератора end()
Неправильное возвращаемое значение функции time C++
Неправильное значение объема конуса C++

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

Или воспользуйтесь поиском по форуму:
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 минут
ПС на семерке нормально русские шрифты вышли.
Yandex
Объявления
21.08.2014, 16:28     Програмка выдает неправильное значение
Ответ Создать тему
Опции темы

Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru