Обращаюсь ко всем с просьбой-проверьте игруху(она не пашет). Смысл в том, что по экрану передвигается "ЧЕЛ", расположены 3 мины если чел на них наступает-он труп(закончить игру пока можно только так- вариат выиграша- если чел наступает на нечто вроде выхода пока не сделал). Вот код игры:
Костян,
так лучше?
program igra;
uses crt;
const
left = #75;
right = #77;
up = #72;
down = #80;
var
x, y, b: integer;
c: char;
procedure show_man;
begin
textcolor(lightblue);
gotoxy(x, y+0); write(' O');
gotoxy(x, y+1); write('XXX');
gotoxy(x, y+2); write(' X');
gotoxy(x, y+3); write('X X');
end;
procedure boom;
begin
gotoxy(20, 20); textcolor(red); writeln('*');
gotoxy(50, 10); textcolor(red); writeln('*');
gotoxy( 5, 12); textcolor(red); writeln('*');
end;
procedure min;
begin
if ((x = 20) and (y+3 = 20))
or
((x = 50) and (y+3 = 10))
or
((x = 5) and (y+3 = 12))
then begin
clrscr;
textcolor(lightred);
gotoxy(35,3); writeln('You are DEAD!!!');
textcolor(lightgray);
readkey; halt;
end;
end;
begin
clrscr; b := 0;
x :=5; y :=1;
show_man;
boom; min;
repeat
c:=readkey;
case c of
#0:
case readkey of
left : dec(x);
right: inc(x);
up : dec(y);
down : inc(y);
end;
end;
clrscr;
show_man;
boom; min;
b:=b+1;
until b=100;
readkey;
end.
volvo- Огромное тебе спасибо, все пашет, теперь смогу добавитьеще пару 10 мин, а также линию жизни персонажа и выход в случае победы. Ждите нового кода!
Только не повторяй ошибок: координата X не может превышать 80, а Y не больше 24 !!! У тебя одна мина стояла на (40, 40) - ты на нее никогда не наступишь
Глупый вопрос а почему : x не должна превышать 80 ,а y 24?
А ВОТ И НОВЫЙ КОД-ПОКА ЕЩЕ НИЧЕГО ОСОБЕННОГО:
program igra;
uses crt;
const
left = #75;
right = #77;
up = #72;
down = #80;
var
x, y, b: integer;
c: char;
procedure show_man;
begin
textcolor(lightblue);
gotoxy(x, y+0); write(' O');
gotoxy(x, y+1); write('XXX');
gotoxy(x, y+2); write(' X');
gotoxy(x, y+3); write('X X');
end;
Const
max_mines = 6;
mines: array[1 .. max_mines] of
record
X, Y: integer;
end =
(
(X:20; Y:20),
(X:50; Y:10),
(X: 5; Y:12),
(X: 5; Y: 5),
(X: 35;Y: 5),
(X: 47;Y:20)
);
procedure boom;
var i: integer;
begin
textcolor(red);
for i := 1 to max_mines do begin
gotoxy(mines[i].X, mines[i].Y);
writeln('*');
end;
end;
procedure min;
var
i: integer;
bad: boolean;
const
_big_boom: array[0 .. 2] of string[5] =
(' o ', ' ooo ', 'o o o');
begin
bad := false;
for i := 1 to max_mines do
bad := bad or
((mines[i].X = x) and (mines[i].Y = y + 3));
if bad then begin
clrscr;
for i := 0 to 2 do begin
gotoxy(x-3, y+i); write(_big_boom[i]);
gotoxy(x-3, y-i); write(_big_boom[i]);
delay(40000);
end;
clrscr;
textcolor(lightred);
gotoxy(35,3); writeln('You are DEAD!!!');
textcolor(lightgray);
readkey; halt;
end;
end;
begin
clrscr; b := 0;
x :=5; y :=20;
show_man;
boom; min;
repeat
c:=readkey;
case c of
#0:
case readkey of
left : dec(x);
right: inc(x);
up : dec(y);
down : inc(y);
end;
end;
clrscr;
show_man;
boom; min;
b:=b+1;
until b=100;
readkey;
end.
Спасибо-довольно неплохая реализация, но взрыв все еще напоминает очень отдаленно...
procedure boom;
var i: integer;
begin
textcolor(red);
for i := 1 to max_mines do begin
gotoxy(mines[i].X, mines[i].Y);
writeln('*');
delay(не знаю сколько);
gotoxy(mines[i].x, mines[i].y-1);write('*');
gotoxy(mines[i].x-1, mines[i].y);write('* *');
gotoxy(mines[i].x, mines[i].y+1);write('*');
delay(не знаю сколько);
end;
end;
вот некоторая версия..
program igra;
uses crt;
const
left = #75;
right = #77;
up = #72;
down = #80;
var
x, y, b, i, g, f,d: integer;
c: char;
mineXe:array [1..100] of integer;
mineYe: array [1..100] of integer;
procedure show_man;
begin
textcolor(yellow);
gotoxy(x, y+0); write(' O');
gotoxy(x, y+1); write('XXX');
gotoxy(x, y+2); write(' X');
gotoxy(x, y+3); write('X X');
end;
procedure fill;
begin
randomize;
for i:= 1 to 10 do begin
minexe[i]:=random(50);
mineye[i]:=random(50);
end;
end;
procedure boom;
begin
for i:=1 to 10 do begin
textcolor(red);
gotoxy(minexe[i], mineye[i]); write('@');
end;
end;
procedure min;
begin
for i:= 1 to 10 do begin
if (x=minexe[i]) and ( y=mineye[i]-3)or ((x=minexe[i]-2) and ( y=mineye[i]-3)) then begin
clrscr;
textcolor(lightred);
gotoxy(35,3); writeln('You are dead!!!');
textcolor(lightgray);
readkey; halt;
end;
end;
end;
begin
clrscr;
gotoxy(35,3); writeln('Choose level:');
gotoxy(35,4); writeln('1. Legko');
gotoxy(35,5); writeln('2. Slozno');
read(d);
case d of
1: d:=150;
2: d:=50;
end;
b := 0;
x :=5; y :=20;
fill;
show_man;
boom; min;
repeat
c:=readkey;
case c of
#0:
case readkey of
left : dec(x);
right: inc(x);
up : dec(y);
down : inc(y);
end;
end;
clrscr;
show_man;
boom; min;
b:=b+1;
until b=d;
readkey;
end.
K Y S K A и GoodWind- огромное вам спасибо. Код довольно неплох соединил обе вариации добавил выход, счас работаю над звуком, жизнями и разными бонусами- как только что нибудь да выйдет- сразу же выложу!
Костян, а ты не мог бы прислать мне то что у тебя уже готово!!, а то я её тоже параллельно модернизирую????
Пожалуйста
K Y S K A вот этот кусок кода. Добавил выход подсчет очков. Правда появилась проблема добавил бонусы при касании которых добавляются очки,но не знаю, как сделать чтобы бонус после использования исчезал. Подскажи если знаешь как!!!
А вот вариант с убиранием мин ...
program igra;
uses crt, graph;
const
left = #75;
right = #77;
up = #72;
down = #80;
var
driver, mode : Integer;
x, y, b, i, g, f,d, e, score: integer;
c: char;
mineXe:array [1..100] of integer;
mineYe: array [1..100] of integer;
procedure redestroy;
var x,y,n,m:integer;
Begin
driver:= 9;
mode:= 2;
initgraph(driver, mode, 'f:\bp\bgi');
setfillstyle(slashfill, yellow);
bar(40, 20,600, 250);
setfillstyle(solidfill, lightred);
bar (60, 40 , 150 , 90);
setfillstyle(solidfill, lightgreen);
bar (60, 110, 150, 160);
setfillstyle(solidfill, lightblue);
bar(60, 180, 150, 230);
setcolor(white);
line(150, 65, 400, 200);
readln;
closeGraph;
end;
procedure net;
begin
for i:= 1 to 10 do
if ((x=minexe[i]) and ( y=mineye[i]-1)) or ((x=minexe[i]-2) and ( y=mineye[i]-1)) then begin
redestroy;
end;
end;
procedure show_man;
begin
textcolor(yellow);
gotoxy(x, y+0); write(' O');
gotoxy(x, y+1); write('XXX');
gotoxy(x, y+2); write(' X');
gotoxy(x, y+3); write('X X');
end;
procedure fill;
begin
randomize;
for i:= 1 to 10 do begin
minexe[i]:=random(80);
mineye[i]:=random(24);
end;
end;
procedure boom;
begin
for i:=1 to 10 do begin
if (minexe[i]<>0) and (mineye[i]<>0) then begin
textcolor(red);
gotoxy(minexe[i], mineye[i]); write('@');
end;
end;
end;
procedure min;
begin
for i:= 1 to 10 do begin
if (x=minexe[i]) and ( y=mineye[i]-3)or ((x=minexe[i]-2) and ( y=mineye[i]-3)) then begin
clrscr;
textcolor(lightred);
gotoxy(35,3); writeln('You are dead!!!');
gotoxy(35,4); writeln('Your score was:', score);
textcolor(lightgray);
readkey; halt;
end;
end;
end;
begin
score:=0;
clrscr;
gotoxy(35,3); writeln('Choose level:');
gotoxy(35,4); writeln('1. Legko');
gotoxy(35,5); writeln('2. Slozno');
read(d);
case d of
1: d:=150;
2: d:=50;
end;
b := 0;
x :=5; y :=20;
fill;
show_man;
boom; min;
repeat
c:=readkey;
case c of
#13:begin
gotoxy(35,3); writeln('Your score is:', score);
readln;
end;
#32: net;
#0:
case readkey of
left : dec(x);
right: inc(x);
up : dec(y);
down : inc(y);
end;
end;
clrscr;
show_man;
boom; min;
b:=b+1;
if score= 10 then begin
b:=d;
clrscr;
gotoxy(35,3);
textcolor(White);
writeln('You win the game!!!');
readkey;
end;
until b=d;
readkey;
end.
K Y S K A это все конечно круто, но бонусы ни куда не исчезают. ИХ ВООБЩЕ НЕТ. Может у меня Паскаль глючит?
неа, я пока бонусы не добавляла!!
Костян все вопросы не к ней а ко мне,, эту прогру написал я сам! а она подло её с моей дискеты себе на комп вкачала! и не добавила бонусы, потому что я их не добавил
уахаахахааа!
у вас, смотрю пиратство процветает
GoodWind Нет пиратам!! все диски по 250 рублей за диск!!! Вперед!!
Костян и не думал над эитим!!
Люди, а в чём собственно суть игры?