IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> вводный проект, движение главного героя
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский

Репутация: -  0  +


Я делаю игрушку на вводник. Помогите сделать движение главного героя. Он должен двигаться по дороге(с помощью клавиш ←,↑,→, ↓ ) при этом чтобы перейти на верхнюю ступень он должен запрыгнуть на неё. Вот начало игры:
Код
program proekt;
uses graph,crt;
const
  nx=0;
  ny=96;
  dx=32;
  dy=32;
  left=#75;
  right=#77;
  esc=#27;
  enter=#13;
  up=#72;
  down=#80;
  up_left=#71;
  up_right=#73;
  down_left=#79;
  down_right=#81;
  n_strok=12;
  n_stolb=20;
type mas_tabl=array[1..n_strok,1..n_stolb] of integer;
const a1:mas_tabl=((1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
                             (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
                             (1,2,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,3,1),
                             (1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1),
                             (1,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,1),
                             (1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1),
              (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,1),
              (1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1),
              (1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,2,1),
              (1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,1),
              (1,6,0,0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,1),
              (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
var gd,gm,z:integer;
   a:mas_tabl;
   i_ved,j_ved:integer;
   ch:char;
  p_menu,p_hero,p_kub,p_vrag,p_priz,p_priz2,p_priz3,p_priz4:pointer;
  s_menu,s_hero,s_vrag,s_kub,s_priz,s_priz2,s_priz3,s_priz4:word;
type mas_strok=array[1..10] of string;
var str_rules:mas_strok;
   n_str_rules:integer;

procedure load_image( n:string;var p:pointer;var size:word);
var    f:file;
begin
  assign(f,n);
  reset(f,1);
  size:=filesize(f);
  getmem(p,size);
  blockread(f,p^ ,size);
  close(f);
end;

procedure fon(c:byte);
begin
 setfillstyle(1,c);
 bar(0,0,getmaxx,getmaxy);
end;
{-------Меню--------}
procedure menu(var ns:integer);
const n_strok=4;
type mas_strok=array [1..n_strok] of string;
const ss:mas_strok=('GAME','UROVNI','HELP','EXIT');
    h=30;
    y1=150;
var c,x,y,xc,yc,i:integer;
   ch:char;
   begin
      fon(14);
      x:=150;
      y:=y1;
      for i:=1 to n_strok do
      begin
     setcolor(4);
     outtextxy(x,y,ss[i]);
     y:=y+h;
      end;
      xc:=100;
      yc:=y1;
      putimage(xc,yc,p_menu^ ,xorput);
      ns:=1;
      repeat
 ch:=readkey;
 putimage(xc,yc,p_menu^,xorput);
 case ch of
    up:if ns>1 then
    ns:=ns-1
 else
    ns:=n_strok;
    down:if ns<n_strok then
     ns:=ns+1
  else
     ns:=1;
   end;
   yc:=y1+(ns-1)*h;
   putimage(xc,yc,p_menu^,xorput);
      until (ch=esc) or (ch=enter);
      if ch=esc then
      ns:=0;
end;
{-------условия для "Правил"---------}
procedure out_file_in_massiv(name:string;var n:integer);
var k:integer;
   f:text;
begin
    assign(f,name);
    reset(f);
    n:=0;
    while not eof (f) do
    begin
   n:=n+1;
   if n>10 then
      begin
 setfillstyle(1,0);
 bar(0,0,getmaxx,getmaxy);
   clrscr;
   writeln('В файле больше 10 строк.');
   exit;
      end;
   readln(f,str_rules[n]);
    end;
    close(f);
end;
{--------Правила игры-----}
procedure pravila;
var  x,y,n:integer;
begin
   fon(14);
   setcolor(1);
   settextstyle(7,0,1);
   x:=0;
   y:=(getmaxy-31*n_str_rules) div 2;
   for n:=1 to n_str_rules do
      begin
  outtextxy(x,y,str_rules[n]);
  y:=y+15;
    end;
    readkey;
    {repeat until keypressed};
end;
{-----Вывод начальной картинки на экран-----}
procedure picture;
var
  i,j:integer;
  x,y:integer;
begin
  fon(0);
  a:=a1;
  for i:=1 to n_strok do
    for j:=1 to n_stolb do
 begin
     x:=(j-1)*dx+nx;
     y:=(i-1)*dy+ny;
     case a[i,j] of
   1:putimage(x,y,p_kub^,xorput);
   2:putimage(x,y,p_priz^,xorput);
   3:putimage(x,y,p_priz2^,xorput);
   4:putimage(x,y,p_priz3^,xorput);
   5:putimage(x,y,p_priz4^,xorput);
   6:putimage(x,y,p_hero^,xorput);
   7:putimage(x,y,p_vrag^,xorput);

     end;
    end;
end;

procedure moving_hero(var i,j:integer;p:pointer);
var
  i_old,j_old:integer;
  x,y:integer;
begin
 ch:=readkey;
    if ch=#0 then
       begin
   ch:=readkey;
   i_old:=i;
   j_old:=j;
   case ch of
     left:x:=x-dx div 2;
     right:x:=x+dx div 2;
     up:y:=y-dy*3;
     down:y:=y+dy*3;

   end;
   putimage(x,y,p^,xorput);
       end;
end;
{----Главная программа - GAME----------}
procedure game;
var
  i,j:integer;
  x,y:integer;
begin
  picture;
  repeat
    if keypressed then
  moving_hero(i_ved,j_ved,p_hero);
   until ch=esc;

end;
begin
   Gd:=Detect;
   initgraph(gd, gm, '');
   load_image('hero',p_hero,s_hero);{---гланый герой----}
   load_image('vrag1',p_vrag,s_vrag);{---враг----}
   load_image('zvezda',p_menu,s_menu);{-----изображение курсора для меню----------}
   load_image('priz',p_priz,s_priz);{----1приз----}
   load_image('kub',p_kub,s_kub);{-----изображение стен и дорог------}
   load_image('priz1',p_priz2,s_priz2);{------2приз----}
   load_image('priz2',p_priz3,s_priz3);{------3приз-----}
   load_image('priz3',p_priz4,s_priz4);{-----4приз----}
   randomize;
   out_file_in_massiv('rules.txt',n_str_rules);
   repeat
    menu(z);
    case z of
   1:game;
   3:pravila;

    end;
   until (z=0) or (z=4);

readln
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Диман

Репутация: -  0  +


А файлы для процедуры load_image тоже самим рисовать или они у тебя есть? <_<


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Женский

Репутация: -  0  +


Цитата
А файлы для процедуры load_image тоже самим рисовать или они у тебя есть? 

Они у меня есть!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






шалунья
Может выложишь (в ZIPе или RARе)?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


Цитата
Может выложишь (в ZIPе или RARе)?

вместе с исходниками всеми, ОК?


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Женский

Репутация: -  0  +


У меня не получается отправить zip файл. Мне выдают сообщение.
Цитата
Произошла ошибка при загрузке файла. Возможно файл имеет неправильный формат, либо размер файла превышает норму. Проверьте загружаемый файл и попробуйте снова.

А без образов никак нельзя? huh.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






шалунья
Твой файл здесь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


чёй-то не работает ничего.... надо-бы разобраться....


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


вот чего натворил:

Код
program proekt;
uses graph,crt;
const
  nx=0;
  ny=96;
  dx=32;
  dy=32;
  left=#75;
  right=#77;
  esc=#27;
  enter=#13;
  up=#72;
  down=#80;
  up_left=#71;
  up_right=#73;
  down_left=#79;
  down_right=#81;
  n_strok=12;
  n_stolb=20;
type mas_tabl=array[1..n_strok,1..n_stolb] of integer;
const a1:mas_tabl=((1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1),
                 (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),
                 (1,2,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,3,1),
                 (1,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1),
                 (1,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,1),
   (1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1),
   (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,1),
   (1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,1,1,0,0,1),
   (1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,2,1),
   (1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,1),
   (1,6,0,0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,1),
   (1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
var gd,gm,z:integer;
   a:mas_tabl;
   i_ved,j_ved:integer;
   ch:char;
   x,y:integer;
  p_menu,p_hero,p_kub,p_vrag,p_priz,p_priz2,p_priz3,p_priz4:pointer;
  s_menu,s_hero,s_vrag,s_kub,s_priz,s_priz2,s_priz3,s_priz4:word;
type mas_strok=array[1..10] of string;
var str_rules:mas_strok;
   n_str_rules:integer;

procedure load_image( n:string;var p:pointer;var size:word);
var    f:file;
begin
  assign(f,n);
  reset(f,1);
  size:=filesize(f);
  getmem(p,size);
  blockread(f,p^ ,size);
  close(f);
end;

procedure fon(c:byte);
begin
 setfillstyle(1,c);
 bar(0,0,getmaxx,getmaxy);
end;
{-------Меню--------}
procedure menu(var ns:integer);
const n_strok=4;
type mas_strok=array [1..n_strok] of string;
const ss:mas_strok=('GAME','UROVNI','HELP','EXIT');
    h=30;
    y1=150;
var c,x,y,xc,yc,i:integer;
   ch:char;
   begin
      fon(14);
      x:=150;
      y:=y1;
      for i:=1 to n_strok do
      begin
     setcolor(4);
     outtextxy(x,y,ss[i]);
     y:=y+h;
      end;
      xc:=100;
      yc:=y1;
      putimage(xc,yc,p_menu^ ,xorput);
      ns:=1;
      repeat
 ch:=readkey;
 putimage(xc,yc,p_menu^,xorput);
 case ch of
    up:if ns>1 then
    ns:=ns-1
 else
    ns:=n_strok;
    down:if ns<n_strok then
     ns:=ns+1
  else
     ns:=1;
   end;
   yc:=y1+(ns-1)*h;
   putimage(xc,yc,p_menu^,xorput);
      until (ch=esc) or (ch=enter);
      if ch=esc then
      ns:=0;
end;
{-------условия для "Правил"---------}
procedure out_file_in_massiv(name:string;var n:integer);
var k:integer;
   f:text;
begin
    assign(f,name);
    reset(f);
    n:=0;
    while not eof (f) do
    begin
   n:=n+1;
   if n>10 then
      begin
 setfillstyle(1,0);
 bar(0,0,getmaxx,getmaxy);
   clrscr;
   writeln('В файле больше 10 строк.');
   exit;
      end;
   readln(f,str_rules[n]);
    end;
    close(f);
end;
{--------Правила игры-----}
procedure pravila;
var  x,y,n:integer;
begin
   fon(14);
   setcolor(1);
   settextstyle(7,0,1);
   x:=0;
   y:=(getmaxy-31*n_str_rules) div 2;
   for n:=1 to n_str_rules do
      begin
  outtextxy(x,y,str_rules[n]);
  y:=y+15;
    end;
    readkey;
    {repeat until keypressed};
end;
{-----Вывод начальной картинки на экран-----}
procedure picture;
var
  i,j:integer;
begin
  fon(0);
  a:=a1;
  for i:=1 to n_strok do
    for j:=1 to n_stolb do
 begin
     x:=(j-1)*dx+nx;
     y:=(i-1)*dy+ny;
     case a[i,j] of
   1:putimage(x,y,p_kub^,xorput);
   2:putimage(x,y,p_priz^,xorput);
   3:putimage(x,y,p_priz2^,xorput);
   4:putimage(x,y,p_priz3^,xorput);
   5:putimage(x,y,p_priz4^,xorput);
   {6:putimage(x,y,p_hero^,xorput);}
   7:putimage(x,y,p_vrag^,xorput);
     end;
    end;
end;

procedure moving_hero;
var
  i_old,j_old:integer;
  ch:char;
begin
ch:=readkey;
case ch of
left: begin putimage(x,y,p_hero^,xorput); x:=x-dx div 2; putimage(x,y,p_hero^,xorput);end;
right:begin putimage(x,y,p_hero^,xorput);  x:=x+dx div 2; putimage(x,y,p_hero^,xorput);end;
up:   begin putimage(x,y,p_hero^,xorput);  y:=y-dy div 2; putimage(x,y,p_hero^,xorput);end;
down:begin putimage(x,y,p_hero^,xorput);  y:=y+dy div 2; putimage(x,y,p_hero^,xorput);end;
#27:halt(0);
end;

end;
{----Главная программа - GAME----------}
procedure game;
var
  i,j:integer;
begin
  picture;
      X:=32;Y:=416;
  putimage(x,y,p_hero^,xorput);
  repeat
    if keypressed then  moving_hero;
  until false;

end;
begin
    Gd:=Detect;
   initgraph(gd, gm, '');
   load_image('hero',p_hero,s_hero);{---гланый герой----}
   load_image('vrag1',p_vrag,s_vrag);{---враг----}
   load_image('zvezda',p_menu,s_menu);{-----изображение курсора для меню----------}
   load_image('yabloko',p_priz,s_priz);{----1приз----}
   load_image('kub',p_kub,s_kub);{-----изображение стен и дорог------}
   load_image('priz',p_priz2,s_priz2);{------2приз----}
   load_image('priz1',p_priz3,s_priz3);{------3приз-----}
   load_image('priz2',p_priz4,s_priz4);{-----4приз----}
   randomize;
{    out_file_in_massiv('rules.txt',n_str_rules);}
   repeat
    menu(z);
    case z of
   1:game;
   3:pravila;
       end;
   until (z=0) or (z=4);
end.


вроде как работает, только пока в режиме "призрака" smile.gif, те можно проходить сквозь все, что угодно....


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 12:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name