Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.015 c
2-1131802641
Fr3nch
2005-11-12 16:37
2005.11.27
Обращение к динамически созданной метке


14-1130784129
X9
2005-10-31 21:42
2005.11.27
Ищу алгоритм разбора


4-1127742005
NikNet
2005-09-26 17:40
2005.11.27
Где взять компонент типа TaskBar


3-1129038011
stepan_mk
2005-10-11 17:40
2005.11.27
ODAC &amp; ORAARRAY


3-1129372829
Иванов__
2005-10-15 14:40
2005.11.27
Как можно выгрузить данные в dbf?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский