Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2009, 00:05   #1
Serg-Grin
Дивиджей
Пользователь
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Сообщений: 84
По умолчанию Помогите реализовать стенки в 2D игре?

Здравствуйте, я создаю 2d игру. И мне нужно сделать непроходимый участок - стенку. Как реализовать это? Я слышал что нужно массив. Только я не знаю как? И можете пожалуйста написать маленькую демонстрацию, я хочу полностью разобратся !!!
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума Ответить с цитированием
Старый 01.11.2009, 11:08   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Основная идея - поле делится на клетки, и каждая клетка может быть свободной либо занятой (стенкой). В самом примитивном случае поле задается двумерным массивом целого типа (0 - свободна, 1 - занята), в более сложном случае можно и класс создать для клетки. И когда игрок куда-то хочет перейти, проверяется, может он встать на клетку или нет. Если да, то перемещается туда, если нет, то ничего не делается.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.11.2009, 12:01   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Например так:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  pole:array[0..20,0..40] of byte;//0-Клетка свободна, 1-клетка занята, 2-в клетке игрок.
  gamerx,gamery:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
begin
for i:=1 to 10 do
for j:=1 to 30 do
pole[i,j]:=0;//Чистим поле.
randomize;
for i:=1 to 30 do
pole[random(14),random(34)]:=1;//занимаем случайные клетки
gamerx:=15;
gamery:=35;
pole[gamerx,gamery]:=2;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
i,j,k,l:integer;
begin
with canvas do
begin
for i:=1 to 20 do
for j:=1 to 40 do
 for k:=1 to 9 do
 for l:=1 to 9 do
 if pole[i,j]=0 then
 canvas.Pixels[i*13+k,j*13+l]:=clgreen else
 if pole[i,j]=1 then
 canvas.Pixels[i*13+k,j*13+l]:=clblack else
 if pole[i,j]=2 then
 canvas.Pixels[i*13+k,j*13+l]:=clred;
end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
pole[gamerx,gamery]:=0;
if key=vk_down then
if (gamery<40) and (pole[gamerx,gamery+1]<>1) then
gamery:=gamery+1;
if key=vk_up then
if (gamery>1) and (pole[gamerx,gamery-1]<>1) then
gamery:=gamery-1;
if key=vk_right then
if (gamerx<20) and (pole[gamerx+1,gamery]<>1) then
gamerx:=gamerx+1;
if key=vk_left then
if (gamerx>1) and (pole[gamerx-1,gamery]<>1) then
gamerx:=gamerx-1;
pole[gamerx,gamery]:=2;
repaint;
end;

end.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 01.11.2009, 12:14   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Самый простой, с точки зрения реализации - массив.

Представь, что твое игровое поле - дискретное пространство (как шахматная доска). каждая точка пространства (клетка) - элемент массива. В простом случаен массив может содержать информацию о том проходим ли этот участок пространства или нет (банально 0 или 1), в сложном случае еще что-нибудь (ну например находящиеся там различные объекты).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 01.11.2009, 12:33   #5
Serg-Grin
Дивиджей
Пользователь
 
Аватар для Serg-Grin
 
Регистрация: 05.01.2009
Сообщений: 84
По умолчанию

Всем спасибо. Понял !!! :-)
Впишите в google:
DVJ Serg-Grin
И вы услышите мои песни
Serg-Grin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализовать отображения карт в игре покер на делфи Dirt Помощь студентам 14 24.02.2015 18:25
Помогите реализовать ReacXX Общие вопросы Delphi 3 26.05.2008 08:56
Помогите реализовать VenMaster Общие вопросы Delphi 8 24.04.2008 23:45
2d эффекты в игре. Как реализовать на Delphi? t3ns0r Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2007 18:57
Помогите сделать сохранения в игре!!! Teen4jump Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 20.06.2007 17:29