Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
max0120842
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 17
1

Скомпилированная программа закрывается после нажатия клавиши

25.12.2018, 20:16. Просмотров 272. Ответов 3
Метки нет (Все метки)

В общем такая проблема, написал прогу на c++ , скомпилировал, у меня всё работает отлично(консольное приложение), также зашёл в папку Debug, протестил там exeшник, всё работает, скинул другому человеку, у него запускается консоль, (суть программы в том, что это змейка, управление на W A S D, он нажимает на любую клавишу и у него просто консоль закрывается, то есть у него открылась консоль, прорисовалась карта, отобразилась змейка и фрукт и всё время карта отрисовывается заново, что собственно значит, что изначально всё работает верно, но при попытки управления, консолька просто закрывается.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2018, 20:16
Ответы с готовыми решениями:

После нажатия на кнопку Run запускается программа, после чего компьютер отключается
Друзья, может кто сталкивался с такой проблемой? Вчера еще программа работала без проблема,...

Программа скомпилированная в Debug не запускается на других компьютерах
Здравствуйте, у меня вот такой вопрос. Я пользуюсь VC++ 2005. Так вот: при компиляции в дебуге мои...

Программа, скомпилированная в Visual Studio 2013, не работает в Windows XP
В ОС Windows 7 Home Base 32 bit установлены Visual Studio 2008 Express и Visual Studio 2013...

Программа завершается, после нажатия любой кнопки
В общем, программа завершается после нажатия любой кнопки... Весь код: #include <windows.h>...

Закрывается, а не выполняется программа после нажатия enter
Доброй ночки всем. Помогите новичку: после нажатия enter после ввода переменных программа не...

3
TRam_
зомбяк
1275 / 963 / 282
Регистрация: 14.05.2017
Сообщений: 3,148
25.12.2018, 20:19 2
Обращение к невыделенной памяти, скорее всего. Попробуй пройтись у себя отладчиком памяти.
0
max0120842
0 / 0 / 0
Регистрация: 09.02.2017
Сообщений: 17
25.12.2018, 20:26  [ТС] 3
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
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <clocale>
#include <Windows.h>
 
 
using namespace std;
 
int gap;
int r;
bool gameover;
const int width = 20;
const int height = 20;
int x, y, fruitx, fruity, score, tailx[100], taily[100], ntail;
 
bool gift;
enum eDirection { STOP = 0, LEFT, UP, RIGHT, DOWN };
eDirection dir;
 
void Setup() {
    gameover = false;
    gift = false;
    dir = STOP;
    x = width / 2 - 1;
    y = height / 2 - 1;
    fruitx = rand() % width;
    fruity = rand() % height;
    score = 0;
}
 
void Draw() {
    system("cls");
    for (int i = 0; i < width + 1; i++) {
        cout << "#";
    }
    cout << endl;
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            if (j == 0 || j == width - 1)
                cout << "#";
            if (i == y && j == x) {
                cout << "0";
            }
            else if (i == fruity && j == fruitx) {
                cout << "F";
            }
            else
            {
                bool print = false;
                for (int k = 0; k < ntail; k++) {
 
                    if (tailx[k] == j && taily[k] == i) {
                        print = true;
                        cout << "o";
                    }
                }
                if (!print) {
                    cout << " ";
                }
 
            }
        }
        cout << endl;
    }
    for (int i = 0; i < width + 1; i++) {
        cout << "#";
    }
    cout << "Score: " << score << endl;
    cout << endl;
}
 
void Input() {
    if (_kbhit()) {
        switch (_getch())
        {
        case 'w':
            dir = UP;
            break;
        case 'a':
            dir = LEFT;
            break;
        case 'd':
            dir = RIGHT;
            break;
        case 's':
            dir = DOWN;
            break;
        case 'x':
            if (score == 11)
            {
                gameover = true;
                
            }
            break;
        }
    }
}
 
void Logic() {
    int prevx = tailx[0];
    int prevy = taily[0];
    tailx[0] = x;
    taily[0] = y;
    int prev2x, prev2y;
    for (int i = 1; i < ntail; i++) {
        prev2x = tailx[i];
        prev2y = taily[i];
        tailx[i] = prevx;
        taily[i] = prevy;
        prevx = prev2x;
        prevy = prev2y;
 
    }
    switch (dir)
    {
    case LEFT:
        x--;
        break;
    case UP:
        y--;
        break;
    case RIGHT:
        x++;
        break;
    case DOWN:
        y++;
        break;
    }
 
    if (x > width - 2 || x < 0 || y > height || y < 0) {
        gameover = true;
        exit(1);
 
    }
    for (int i = 0; i < ntail; i++) {
        if (tailx[i] == x && taily[i] == y) {
            gameover = true;
            exit(1);
 
        }
    }
    if (x == fruitx && y == fruity) {
        score++;
        fruitx = rand() % width;
        fruity = rand() % height;
        ntail++;
    }
}
 
int main()
{
    system("color F");
    setlocale(LC_ALL, "Russian");
    Setup();
    while (!gameover) {
        Draw();
        Input();
        Logic();
    }
    
 
    
    cin.get();
    return(0);
}
На всякий случай

Добавлено через 1 минуту
Как?
0
FRIEND_
133 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 14:10 4
Так у вас метод Draw() не должен вызываться каждый раз в цикле
C++
1
2
3
4
5
while (!gameover) {
        Draw();
        Input();
        Logic();
    }
Перерисовка у вас должна вызываться только после перемещения вашей змейки.
То есть, наверное, более правильно сделать так:
C++
1
2
3
4
Draw();
while (!gameover) { 
        Input();
    }
А в методе Input():
C++
1
2
3
4
5
6
7
if (_kbhit()) {
   switch() {
   ...
   }
   Logic();
   Draw();
}
0
29.12.2018, 14:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2018, 14:10

Остановить ввод после нажатия клавиши enter
int i = 0; while (mass1 != '\0') { scanf_s(&quot;%a&quot;, &amp;m); i++; mass1 = m; p++; } Что я...

Остановить ввод после нажатия клавиши enter
for(int i=0;pass;i++) cin&gt;&gt;pass;-перестает вводить символы после третьего. весь код: #include...

Закрытие окна после нажатия любой клавиши.
Всем привет. #include &lt;iostream.h&gt; using namespace std; int main() { int var1; int var2;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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