Другие языки программирования и технологии

Я делаю мини игру на паскале, и у меня выбор из двух действий но почему то всегда выбирается первое. Подскажите почему

Вот сам код(точнее сломанный фрагмент)


program sfsdf;
uses CRT;
var ОТ,RanM,Max,LvlP,Ruki,Broni:integer;NameP:string;
begin
RanM:=random(16);
NameP:='Лох';
writeln(' ... но после секунды ',NameP,' Понял что надо решать');
writeln('1-вступить в бой');
writeln('2-спрятатся');
readln(ОТ);
if ОТ=1 then;
begin;
ClrScr;
write(NameP,' уже собирался ринутся в бой прямо на кулаках но ');
if RanM=0 then write('Орк');
if RanM=1 then write('Гоблин');
if RanM=2 then write('Волк');
if RanM=3 then write('Вампир');
if RanM=4 then write('Голем');
if RanM=5 then write('Найоёмник');
if RanM=6 then write('Разбойник');
if RanM=7 then write('Маг');
if RanM=8 then write('Фантом');
if RanM=9 then write('Медведь');
if RanM=10 then write('Гигант');
if RanM=11 then write('Цветок-переросток');
if RanM=12 then write('Шпион');
if RanM=13 then write('Эльф-освободитель');
if RanM=14 then write('Дворф-бандит');
if RanM=15 then write('Дикарь');
if RanM=16 then write('Чумной');
writeln(' успел убежать.');
end;
if ОТ=3 then;
begin
ClrScr;
writeln(NameP,' поступить умно и потому спрятался в кусты ожидая пока');
if RanM=0 then write('Орк');
if RanM=1 then write('Гоблин');
if RanM=2 then write('Волк');
if RanM=3 then write('Вампир');
if RanM=4 then write('Голем');
if RanM=5 then write('Найёмник');
if RanM=6 then write('Разбойник');
if RanM=7 then write('Маг');
if RanM=8 then write('Фантом');
if RanM=9 then write('Медведь');
if RanM=10 then write('Гигант');
if RanM=11 then write('Цветок-переросток');
if RanM=12 then write('Шпион');
if RanM=13 then write('Эльф-освободитель');
if RanM=14 then write('Дворф-бандит');
if RanM=15 then write('Дикарь');
if RanM=16 then write('Чумной');
write(' уйдёт к себе домой.');
writeln('Что на удивления произашло довольно скоро.');
end;
end.
Потому, что
 if ОТ=1 then; 
и
 if ОТ=3 then; 
Делают совсем не то, что ты думаешь.

Во первых, в нормальном Pascal нельзя сравнивать строку (переменная OT) и число.

Во вторых, тела обоих твоих if состоят из единственного пустого оператора, заданного точкой с занятой. А всё, что у тебя ниже в begin - end, выполняется ВСЕГДА, т.к. находится ПОСЛЕ if.

Между then и begin НЕЛЬЗЯ ставить точку с запятой.

А ещё абсолютно бессмысленно ставить точку с запятой после begin и перед end.
Сергей Галабурда
Сергей Галабурда
80 414
Лучший ответ
program sfsdf;
uses CRT;
var RanM,Max,LvlP,Ruki,Broni:integer;NameP:string;
ot:char;
begin
RanM:=random(16);
NameP:='Лох';
writeln(' ... но после секунды ',NameP,' Понял что надо решать');
writeln('1-вступить в бой');
writeln('2-спрятатся');
readln(ot);
if ot='1' then begin;
ClrScr;
write(NameP,' уже собирался ринутся в бой прямо на кулаках но ');
if RanM=0 then write('Орк');
if RanM=1 then write('Гоблин');
if RanM=2 then write('Волк');
if RanM=3 then write('Вампир');
if RanM=4 then write('Голем');
if RanM=5 then write('Найоёмник');
if RanM=6 then write('Разбойник');
if RanM=7 then write('Маг');
if RanM=8 then write('Фантом');
if RanM=9 then write('Медведь');
if RanM=10 then write('Гигант');
if RanM=11 then write('Цветок-переросток');
if RanM=12 then write('Шпион');
if RanM=13 then write('Эльф-освободитель');
if RanM=14 then write('Дворф-бандит');
if RanM=15 then write('Дикарь');
if RanM=16 then write('Чумной');
writeln(' успел убежать.');
end;
if ot='2' then begin
ClrScr;
writeln(NameP,' поступить умно и потому спрятался в кусты ожидая пока');
if RanM=0 then write('Орк');
if RanM=1 then write('Гоблин');
if RanM=2 then write('Волк');
if RanM=3 then write('Вампир');
if RanM=4 then write('Голем');
if RanM=5 then write('Найёмник');
if RanM=6 then write('Разбойник');
if RanM=7 then write('Маг');
if RanM=8 then write('Фантом');
if RanM=9 then write('Медведь');
if RanM=10 then write('Гигант');
if RanM=11 then write('Цветок-переросток');
if RanM=12 then write('Шпион');
if RanM=13 then write('Эльф-освободитель');
if RanM=14 then write('Дворф-бандит');
if RanM=15 then write('Дикарь');
if RanM=16 then write('Чумной');
write(' уйдёт к себе домой.');
writeln('Что на удивления произашло довольно скоро.');
end;
end.
Н*
Николай *******
95 955
Типа выбираем, ОТ, 1 или 2
"writeln('1-вступить в бой');
writeln('2-спрятатся');
readln(ОТ);"

а тут, если ОТ равно 3
"if ОТ=3 then;"
Антон Никулин
Антон Никулин
94 136

Похожие вопросы