Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Помогите с алгоритмом   Найти похожие ветки 

 
Jfc   (2005-07-12 04:38) [0]

Привет, Масте®а! Т.к. я в этом деле ещё бот, то решил написать (не смеяться) текстовую полуграфическую рпг. И у меня возникли некоторые трудности:
1.Допустим в игре 20 мечей, пишу


...
type TSwords = array [1..20] of record
Name: string;
Damage: integer;
Picture: TPicture;
end;
...

далее описываю каждый


...
var S:TSwords;
...
S[1].Name:="Long Sword";
S[1].Damage:=30;

и т.д. вопрос в том, как сделать так, чтобы во время игры при переходе по локациям и в магазине эти шмотки разбрасывались рандомно...

2.Как при переходе по локации сделать чтоб враги нападали рандомно и неожиданно, просто я тут пытался сделать, но у меня получается всё линейно.

Извините за тупые вопросы, проблемы описал как смог, надеюсь поймете.
Заранее спасибо.


 
Kobik   (2005-07-12 06:29) [1]

Ну во-первых делать "текстовую полуграфическую рпг" значительно лучше чем "супер пупер 3Д-шку типа ... " :) По верному пути идешь :)

1) Массив мечей... Это типа перечисление всех типов мечей идет? Ну допустим. Тут все зависит от того, как ты себе представляешь магазин. В большинстве старых РПГ такого типа в каждом магазине продается заранее определенный набор оружия.
Если тебе надо обязательно случайный набор, то делаешь что-то типа полки:


...
type TPolka = array [1..10] of integer;
...
var Polka:TPolka;


Когда заходишь в магазин


for i:=1 to 10 do Polka[i]:=1+random(20);


ну и т.д. А вообще проблема то в чем? В использовании random?
Главное не забудь в начале программы (например в form1.OnCreate) сделать Randomize;


 
Jfc   (2005-07-12 06:47) [2]

Kobik
Спасибо, с этим понял.
А как быть с локацией?
Допустим, если  локацию представить как

type Location = array[1..11] of integer;

, то по идее точки на карте будут последовательны


1234567891011


,а как сделать,чтобы карта выглядела таким образом:


1234
5678
91011

???

И как осуществить способ перемещения?


 
Kobik ©   (2005-07-12 10:15) [3]

Ты про многомерные массивы чтоли незнаешь? Почитай любую книжку по паскалю и такие вопросы отпадут.

Или может я вопрос не так понял :)


 
Xenon   (2005-07-12 11:41) [4]

1234
5678
91011
Бредовая идея создания карты. Почитай про 2-мерные массивы. Карта вообще должна состоять примерно так
111101110000011111
100010101011101011
110101001101010101
111100010010101001
101010010100000100
100001000000000000
100000000000000000
1-трава, 0-вода.
Но это только примерно.


 
-virus- ©   (2005-07-12 21:52) [5]

или:

type Tcarta=record
    name: string;  {название}
    s: string; {трава, вода, гора}
    t: string; {враг, друг, нейтрал}
    ................................
    end;
.............................
var
carta: array [1..100,1..100] of Tcarta;   {двумерный массив}
..................................


 
Jfc   (2005-07-13 01:15) [6]

Спасибо!!!!
Последний вопрос (ногами не бить): как по такой карте перемещаться?


 
-virus- ©   (2005-07-13 10:18) [7]

смотря как ты хочешь это реализовать,
можно так-
добавить:

type Tcarta=record
    .............
    .............
    playr: boolean; {есть ли игрок на этой локации}
    end;
...................
var
x,y: integer; {координаты игрока}
...................
присвоить x,y координаты игрока.
например:
x:=1;
y:=1;
carta[x,y].playr:=true; {игрок находитса на локации [1,1]}
затем при нажатии, например клавиши "вниз":
carta[x,y].playr:=false; {игрок не находитса на [1,1]}
x:=x+1;
carta[x,y].playr:=true; {игрок находитса на локации [2,1]}

и еще, вот как выглядит двумерный массив (карта):
[1,1][1,2][1,3][1,4][1,5]
[2,1][2,2][2,3][2,4][2,5]
[3,1][3,2][3,3][3,4][3,5]
[4,1][4,2][4,3][4,4][4,5]
[5,1][5,2][5,3][5,4][5,5]


 
Kobik ©   (2005-07-13 15:15) [8]

Неее. :) все по другому.
Можно так:


type TPlayer=record
   .............
   .............
   x,y: integer; //координаты хероса
   end;
var player:TPlayer;


в таймере или где там

if getasynckeystate(VK_UP)<0 then dec(player.y);
if getasynckeystate(VK_down)<0 then inc(player.y);
if getasynckeystate(VK_left)<0 then dec(player.x);
if getasynckeystate(VK_right)<0 then inc(player.x);


:)


 
Jfc   (2005-07-14 01:14) [9]

Спасибо большое, теперь со всем разобрался!
Мастера - лучшие!



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
2-1131218918
Trap
2005-11-05 22:28
2005.11.27
Стения сигнала с com-порта


14-1131116155
suharew
2005-11-04 17:55
2005.11.27
Куда делась вкладка Report в Delphi7


6-1124018204
NikNet
2005-08-14 15:16
2005.11.27
Как сделать CHAT к внешнему WEB-Чату?


3-1129111830
iamkate
2005-10-12 14:10
2005.11.27
Проблема с Update blob-поля


14-1131441015
DelphiN!
2005-11-08 12:10
2005.11.27
Создание собственных скинов для BusinessSkinForm