Главная страница
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.025 c
3-1129087702
Ярослав
2005-10-12 07:28
2005.11.27
Функция lower в InterBase


2-1131687460
Al_Ba
2005-11-11 08:37
2005.11.27
Как программно в TreeView каждому узлу присвоить свою иконку ?


14-1131014329
Отладчик
2005-11-03 13:38
2005.11.27
Программное обнаружения модема после загрузки


14-1130947682
Андрей В
2005-11-02 19:08
2005.11.27
Подскажите


1-1130951074
Tualan
2005-11-02 20:04
2005.11.27
Ошибка при компиляции исходников Delphi