Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
DiBrO
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 4
1

Игра на проверку памяти

10.01.2019, 21:27. Просмотров 1030. Ответов 6

Добрый вечер, а может и день. Нужна ваша помощь нашел на просторах интернета код. В нем высвечивается ошибка что If n then не верно как только не пробовал исправить ни как не получалось. Надеюсь на вашу помощь )))



Delphi
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
// Нажатие клавиши в поле Edit1
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 
var igrok:integer; // Число, которое ввел испытуемый
 
begin
 
case key of
 
'0'..'9', #8: ; // Клавиши «0» - «9», Backspace
 
#13: // Клавиша Enter
 
begin
 
igrok:=strtoint(edit1.Text);
 
if (igrok=numb) then ;
 
n:=n+1; // Счетчик чисел
 
edit1.Text:=' ';
 
edit1.Visible:=false; // Скрыть поле Edit1
 
if nthen
 
begin
 
numb:=getnumb(kc); // Сгенерировать следующее число
 
label1.Caption:=inttostr(numb); // Отобразить число
 
label1.Visible:=true;
 
timer1.Enabled:=true; // Пуск таймера
 
end
 
else
 
begin
 
// Конец испытания, вывод результата
 
label1.Font.Size:=14;
 
label1.Caption:='Результат:'+#13+'Показано чисел:'+inttostr(lt)+#13+'Правильных: '+inttostr(right);
 
label1.Visible:=true;
 
button1.Visible:=true;
 
// Отображение кнопки «Завершить»
 
end;
 
end;
 
else key:=chr(0);
 
end;
 
end;
 
end.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2019, 21:27
Ответы с готовыми решениями:

«Проверка памяти». игра
Изобразить игровое поле, на котором будут появляться комбинации цифр различных цветов и размеров на...

Игра 21 очко: Доработать проверку вводимых символов
Здравствуйте. Вот есть игрушка в 21 очко. Всё хорошо работает, но стоит задача немного это...

Тестовая программа на проверку планки памяти
Требуется программа, которая проверяет корректную работу планки памяти. Т.е. это должна быть...

Как написать проверку на нехватку памяти
#include <iostream> #include <string> #include <exception> #include <locale.h> using namespace...

Как сделать проверку памяти перед скачиванием файла
Добрый день. Сделал AsyncTask отдельным файлом.Скачиваю фаил, появляется ProgressDialog идет...

6
D1973
Модератор
4918 / 3492 / 1584
Регистрация: 21.01.2014
Сообщений: 14,744
Записей в блоге: 3
Завершенные тесты: 1
10.01.2019, 21:29 2
Цитата Сообщение от DiBrO Посмотреть сообщение
if nthen
а пробел между n и then Пушкин ставить будет? Причем это еще и не правильно: n, (судя по предыдущей строке n := n + 1) - целочисленная переменная, а в конструкции if требуется логическое выражение. В общем случае это должно выглядеть так:
if n=<чему-то там> then ...
0
DiBrO
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 4
10.01.2019, 21:30  [ТС] 3
Говорю же все перепробовал и пробел ставил и с нуля писал, не помогло ничего. Может я пропустил ошибку в переменных или же?
0
D1973
Модератор
4918 / 3492 / 1584
Регистрация: 21.01.2014
Сообщений: 14,744
Записей в блоге: 3
Завершенные тесты: 1
10.01.2019, 21:44 4
Цитата Сообщение от DiBrO Посмотреть сообщение
Может я пропустил ошибку в переменных или же?
все может быть... Из предоставленной информации я вынес только 3 проблемы:
1. Непонятно, что за переменная n, где и как объявлена и объявлена ли вообще
2. Нет пробела в условии
3. Нет самого условия, т.е. логического выражения в конструкции if.
0
DiBrO
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 4
10.01.2019, 21:47  [ТС] 5
Так давайте я с самого начала скину весь код, может там будет что. Пробовал его просто копи/пастить но итог вся та же ошибка в условие с переменной
Delphi
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
Программный код
uses
 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 
Dialogs, ExtCtrls, StdCtrls;
 
 
 
type
 
TForm1 = class(TForm)
 
Edit1: TEdit;
 
Label1: TLabel;
 
Button1: TButton;
 
Timer1: TTimer;
 
procedure Button1Click(Sender: TObject);
 
procedure FormCreate(Sender: TObject);
 
procedure Timer1Timer(Sender: TObject);
 
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
 
private
 
{ Private declarations }
 
public
 
{ Public declarations }
 
end;
 
var
 
Form1: TForm1;
 
numb:integer; // Число, которое должен запомнить испытуемый
 
right:integer; // Количество правильно запомненных чисел
 
n:integer; // Счетчик чисел
 
const
 
kc=5; // Разрядность числа (количество цифр)
 
lt=10; // Количество чисел (длина текста)
 
implementation
 
 
 
{$R *.dfm}
 
// Функция генерирует k – разрядное число
 
function getnumb(k:integer):integer;
 
var n,i:integer; // n – Генерируемое число
 
begin // Процедура генерирует число по разрядам, начиная со старшего
 
n:=random(9)+1; // Старший разряд не может быть нулем
 
for i:=1 to (k-1) do
 
n:=n*10+random(10);
 
getnumb:=n;
 
end;
 
// Создание формы
 
procedure TForm1.FormCreate(Sender: TObject);
 
begin
 
edit1.Visible:=false; // Скрыть поле ввода Edit1
 
edit1.MaxLength:=kc; // Количество символов, которое можно ввести
 
label1.WordWrap:=true; // Разрешить перенос слов на следующую строку
 
label1.Caption:='Сейчас на экране будут появляться числа. Вы должны запомнить число, набрать его на клавиатуре и нажать на Enter';
 
button1.Caption:='Начать';
 
timer1.Enabled:=false; // Таймер остановлен
 
timer1.Interval:=1000; // Время отображения числа – 1 секунда
 
right:=0; // Количество правильных ответов
 
n:=0; // Счетчик чисел
 
randomize;
 
end;
 
// Щелчок на кнопке «Начать / Завершить»
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
 
if button1.caption='Завершить' then form1.Close;
 
if button1.Caption='Начать' then begin button1.caption:='Завершить';
 
button1.Visible:=false; // Скрыть кнопку
 
// Кнопка Button1 станет доступной после того, как испытание закончится
 
label1.Caption:=' ';
 
label1.Font.Size:=24; // Размер шрифта поля Label1
 
edit1.Font.Size:=24; // Размер шрифта поля Edit1
 
// Сгенерировать и вывести число
 
numb:=GetNumb(kc);
 
label1.Caption:=IntToStr(numb);
 
timer1.Enabled:=true; // Запуск таймера
 
end;
 
end;
 
// Процедура обработки сигнала от таймера «сотрет» число
 
// Обработка события таймера
 
procedure TForm1.Timer1Timer(Sender: TObject);
 
begin
 
timer1.Enabled:=false; // Остановить таймер
 
label1.Visible:=false; // Cкрыть число
 
edit1.Visible:=true; // Сделать видимым поле Edit1
 
edit1.SetFocus; // Установить курсор в поле Edit1
 
end;
 
 
 
 
 
 
 
 
 
 
 
// Нажатие клавиши в поле Edit1
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
 
var igrok:integer; // Число, которое ввел испытуемый
 
begin
 
case key of
 
'0'..'9', #8: ; // Клавиши «0» - «9», Backspace
 
#13: // Клавиша Enter
 
begin
 
igrok:=strtoint(edit1.Text);
 
if (igrok=numb) then ;
 
n:=n+1; // Счетчик чисел
 
edit1.Text:=' ';
 
edit1.Visible:=false; // Скрыть поле Edit1
 
if nthen
 
begin
 
numb:=getnumb(kc); // Сгенерировать следующее число
 
label1.Caption:=inttostr(numb); // Отобразить число
 
label1.Visible:=true;
 
timer1.Enabled:=true; // Пуск таймера
 
end
 
else
 
begin
 
// Конец испытания, вывод результата
 
label1.Font.Size:=14;
 
label1.Caption:='Результат:'+#13+'Показано чисел:'+inttostr(lt)+#13+'Правильных: '+inttostr(right);
 
label1.Visible:=true;
 
button1.Visible:=true;
 
// Отображение кнопки «Завершить»
 
end;
 
end;
 
else key:=chr(0);
 
end;
 
end;
 
end.
0
D1973
Модератор
4918 / 3492 / 1584
Регистрация: 21.01.2014
Сообщений: 14,744
Записей в блоге: 3
Завершенные тесты: 1
10.01.2019, 22:03 6
Лучший ответ Сообщение было отмечено DiBrO как решение

Решение

Пункт 1 отвалился, хотя то ли букв мало в алфавите, то ли фантазии нет переменные более содержательно называть... И глобальная переменная n, и локальная переменная в функции getnumb - тоже n... Но ошибка не в этом... Ошибка в вышеуказанных пунктах 2 и 3: нет пробела и нет логического условия. А уж каким оно, условие то бишь, должно быть - это Вам надо узнавать там, где Вы этот код нарыли.

Добавлено через 6 минут
Во еще косяк: точка с запятой после then в строке 186... И дальше begin-а нет... Или Вы так копировали, или в том месте, где Вы это взяли, такой хлам и лежал...
В строке 226 точка с запятой перед else - тоже ошибка, при чем из тех, о которых компилятор четко и ясно пишет, указывая даже на строку, где эта ошибка произошла.
1
DiBrO
0 / 0 / 0
Регистрация: 19.06.2017
Сообщений: 4
10.01.2019, 22:21  [ТС] 7
Все спасибо разобрался с проблемой оказалось все просто
Delphi
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
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var igrok:integer;
begin
 case key of
    '0'..'9', #8: ;  // Клавиши «0» - «9», Backspace
       #13:  // Клавиша Enter
begin
  igrok:=strtoint(edit1.Text);
if (igrok=numb) then right:=right+1;
n:=n+1;  // Счетчик чисел
edit1.Text:=' ';
edit1.Visible:=false;  // Скрыть поле Edit1
if n<lt then
begin
 numb:=getnumb(kc);  // Сгенерировать следующее число
label1.Caption:=inttostr(numb);  // Отобразить число
label1.Visible:=true;
timer1.Enabled:=true;  // Пуск таймера
end
else
 begin
 // Конец испытания, вывод результата
label1.Font.Size:=14;
label1.Caption:='Результат:'+#13+'Показано чисел:'+inttostr(lt)+#13+'Правильных: '+inttostr(right);
label1.Visible:=true;
button1.Visible:=true;
// Отображение кнопки «Завершить»
 
end;
end;
 end;
end;
0
10.01.2019, 22:21
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2019, 22:21

как сделать проверку выиграша и переход на новую игру(игра крестики нолики на батонах) Прогу выложыл в архиве
помогите кто может

Игра "Трубопровод". Как сделать проверку трубопровода на связность
Всем привет. Пишу игру &quot;Трубопровод (Ветка)&quot;. Игра будет консольная. Имеется два вопроса. ...

Игра: Проверка памяти человека
Создать проект Тестирование памяти, в котором реализовать проверку уровня запоминания пятизначных...


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

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

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