blackangel
Посмотрите вот эту программку:
http://forum.pascal.net.ru/index.php?showtopic=23739
Помогите отыскать ошибку в игре (((
Модератор: Модераторы
- informat
- новенький
- Сообщения: 62
- Зарегистрирован: 27.10.2010 09:44:20
- Откуда: http://informat.name
- Контактная информация:
blackangel писал(а):Написал не большую игру "змейку" при запуске "змейка" не совершает движения.. а при выходе из программы выдается ошибка exitcode=201 , Прошу помочь отыскать ошибку ((Код: Выделить всё
uses crt,Graph;
...
end.
Для считыванием клавиш в графическом окне нужно использовать WinCRT.
CRT - для текстового. На моих курсах только вчера такую ошибку исправлял у ученика.
У меня не то что бы проблема, просто небольшой "творческий кризис" логики. Создаю небольшую игрульку, в которой будут драться 2 персонажа. Суть такова, что игрок прокачивает таланты и всё такое. Но у меня возникла такая проблема:
нужно что бы из 2 игроков определился победитель, который понизил количество жизней другого до 0 (нуля). Я сделал так, что из предопределённых значений Сила и Ловкость суммируется Мощность удара, которая и отнимает N-ое количество жизней. Как можно проверить у кого из соперников количество жизней опустилось до 0? Я пробовал через While, но у меня удаётся проверить значение жизней только у 1 из соперников.
нужно что бы из 2 игроков определился победитель, который понизил количество жизней другого до 0 (нуля). Я сделал так, что из предопределённых значений Сила и Ловкость суммируется Мощность удара, которая и отнимает N-ое количество жизней. Как можно проверить у кого из соперников количество жизней опустилось до 0? Я пробовал через While, но у меня удаётся проверить значение жизней только у 1 из соперников.
Код: Выделить всё
begin
sila := 12;
power := 15;
hp := 120;
for i := 1 to 5 do
begin
int := 1 + random (sila);
end;
begin
int2 := 1 + random (power);
end;
sum := int + int2;
label2.Caption := IntTOStr (int);
label4.Caption := IntTOStr (int2);
label6.Caption := IntToStr (sum);
// Характеристики противника
sila2 := 14;
power2 := 13;
hp2 := 110;
for i := 1 to 5 do
begin
int3 := 1 + random (sila2);
end;
begin
int4 := 1 + random (power2);
end;
sum2 := int3 + int4;
label10.Caption := IntTOStr (int3);
label11.Caption := IntTOStr (int4);
label12.Caption := IntToStr (sum2);
Label14.Caption := inttostr (hp);
label16.Caption := inttostr (hp2);
//расчитываем победителя В начале программы нужно инициализировать генератор случайных чисел:
Тогда не нужно будет колдовать со случайным числом, вместо пяти присвений значения переменной int
хватит и одного
Надо делать в цикле перерасчёт мощности перед каждым ударом, далее обмен ударами и подсчёт оставшейся энергии. Как только энергия у кого-то закончилась - выход из боя/цикла. Как-то так:
Отладку, вывод сообщения о победе и замену goto на другие операторы сделай сам
Код: Выделить всё
begin
Randomize;Тогда не нужно будет колдовать со случайным числом, вместо пяти присвений значения переменной int
Код: Выделить всё
for i := 1 to 5 do
begin
int := 1 + random (sila);
end;хватит и одного
Код: Выделить всё
int := 1 + random (sila);Надо делать в цикле перерасчёт мощности перед каждым ударом, далее обмен ударами и подсчёт оставшейся энергии. Как только энергия у кого-то закончилась - выход из боя/цикла. Как-то так:
Код: Выделить всё
begin
Randomize;
sila := 12;
power := 15;
hp := 120;
// Характеристики противника
sila2 := 14;
power2 := 13;
hp2 := 110;
a:=1;
while a=1 do begin
int := 1 + random (sila);
int2 := 1 + random (power);
sum := int + int2;
label2.Caption := IntTOStr (int);
label4.Caption := IntTOStr (int2);
label6.Caption := IntToStr (sum);
int3 := 1 + random (sila2);
int4 := 1 + random (power2);
sum2 := int3 + int4;
label10.Caption := IntTOStr (int3);
label11.Caption := IntTOStr (int4);
label12.Caption := IntToStr (sum2);
Label14.Caption := inttostr (hp);
label16.Caption := inttostr (hp2);
//расчитываем победителя
sleep(2000);
oceredj:=random(2);
//первый удар
if oceredj=0 then hp2:=hp2-sum else hp:=hp-sum2;
if hp2<1 then goto 1;
if hp<1 then goto 2;
//второй удар
if oceredj=0 then oceredj:=1 else oceredj:=0;
if oceredj=0 then hp2:=hp2-sum else hp:=hp-sum2;
if hp2<1 then goto 1;
if hp<1 then goto 2;
end;
1:
writeln('Победил первый игрок.');
goto 3;
2:
writeln('Победил второй игрок.');
3:Отладку, вывод сообщения о победе и замену goto на другие операторы сделай сам
Сквозняк писал(а):В начале программы нужно инициализировать генератор случайных чисел:
Я пошёл другим путём. Я добавил StringGrid с 2мя ячейками (жизни героя и противника). Суммировал удар и вычитал полученное число из нужной ячейки. В конце поставил if для проверки. Соответственно, у кого <1 случилось раньше, тот и проиграл.
Есть SG размером 20х20, при помощи рандома в любом месте появляется знак "*", затем, по нажатию на другую унопку внутри SG появляется знак "#" и этот знак пытается сам дойти до звёздочки. Реализовал следующим образом:
Проблема:
Пытался разными способами сделать так, что бы каждую секунду решётка сама делала шаг в нужную сторону. Пробовал при помощи While, Repeat until и другими способами. Всё заканчивалось тем, что решётка появлялась вначале и сразу же в конце. Есть идеи решения?
Код: Выделить всё
begin
Edit3.Caption := IntToStr(x2);
Edit4.Caption := IntToStr(y2);
stringgrid1.cells[x2,y2] := '#';
if x2 < int then
x2 := x2+1 else x2 := x2-1;
if y2 < int2 then
y2 := y2+1 else y2 := y2-1;
end; Проблема:
Пытался разными способами сделать так, что бы каждую секунду решётка сама делала шаг в нужную сторону. Пробовал при помощи While, Repeat until и другими способами. Всё заканчивалось тем, что решётка появлялась вначале и сразу же в конце. Есть идеи решения?
