Capítulo 1
Meet the Dream Maker
O primeiro passo para o
domínio das terras do sono é a realização, sem acordar, que um sonho.
Nos mundos dia, o domínio começa por esquecimento, sem sonhar que um
está acordado.
- DM
DM é uma linguagem de programação
para a criação de mundos multi-usuário. Pelo `mundo 'eu quero dizer um
ambiente multi-meios de comunicação virtual, onde as pessoas assumem
personagens com as quais interagem entre si e controlados por
computador objetos. Isso poderia tomar a forma de um jogo competitivo,
um RPG de aventura, não um fórum de discussão, ou algo que temos sequer
imaginado.
Freqüentemente, a terminologia de um role-playing
game é o mais apropriado: os seres humanos são PCs (jogo) e personagens
controlados por computador são NPCs (non-playing characters). A
encarnação virtual de um jogador é muitas vezes chamado de um avatar.
As regras do jogo são escritos em MS e fielmente executada pelo
computador. Essas ações definem o que os jogadores podem instruir seu
avatar para executar, qual o efeito que estes terão de The Game, e
quaisquer outros eventos que podem acontecer com o tempo.
Para
entender a mecânica do sistema plenamente, é útil conhecer alguns
termos simples. Os programas de computador que funcionam através de uma
rede muitas vezes são divididos em duas partes: um cliente e um
servidor. Neste caso, o cliente é o programa que os jogadores usam para
digitar comandos e ver o que acontece como resultado. Em outras
palavras, o cliente lida com entrada e saída. O servidor é o programa
que executa The Game, realizando as regras definidas na linguagem DM. O
game designer escreve estas regras em um terceiro programa chamado
compilador. Ele lê o programa de MS (conhecido como o código-fonte por
programadores), verifica se há erros gramaticais, e gera uma mais
compacta, computador amigável, arquivo conhecido como código de bytes
ou binário. É esse processo que o servidor lê para ver como executar o
The Game.
Assim, existem três programas principais: o cliente,
servidor e do compilador. Chamamos essas Dream Seeker, Dream Daemon, e
Dream Maker, respectivamente. (O daemon palavra é apenas mais um (mais
fantásticos) palavra para o servidor.) Como um todo, nos referimos a
este conjunto de software como BYOND, que significa Build Your Own Net
Dream - uma descrição apropriada da sua finalidade e também de como
agora ele vagueou para além do nosso plano original. Mas isso é outra
história!
Cada uma introdução à linguagem de programação deve
começar com o mesmo exemplo. Chame-lhe o destino, fatalidade, ou puro
acaso, é um pouco estranho que o nome do exemplo universal introdutório
Olá mundo. Assustador, não? É exatamente isso que acontece neste
exemplo - digamos Olá para o mundo.
No DM você escrever assim:
mob
+Login()
++world << "Hello, world!"
Se
você tem alguma experiência de programação anterior, a última linha
provavelmente parece vagamente sensata. Ele produz o texto dentro das
aspas duplas para o mundo inteiro. Mas o que na terra é uma máfia e por
que é cada linha recuada como escada-passos? Tudo a seu tempo. Por ora,
basta compreender que o avatar do jogador em The Game é uma máfia.
Quando um jogador faz logon, o servidor é orientado a saída a mensagem
"Olá mundo" para todos.
Compilar e executar este programa (ver
figura 1.1). Se tudo correr conforme o planejado, você deve ver as
palavras "Olá, mundo" magicamente aparecem na tela do Dream Seeker
saída. Voila! Você criou seu mundo BYOND primeiro.
Agora você
sabe os passos básicos para a concepção de mundos. Você escreve um
código de MS, compilá-lo e executá-lo. Mas este mundo não tem nada para
o jogador a fazer. Esse é o próximo.
Figura 1.1: Olá mundo!
Este
primeiro mundo não serve apenas como uma introdução à linguagem de MS,
mas ao editor Dream Maker / compilador também. Felizmente, o sistema
foi projetado para ser bastante simples de usar, e com apenas alguns
passos que você deve estar no seu caminho para BYOND magia programação!
Dream
Maker refere-se à coleção de arquivos que compõem o projeto como o
ambiente do mundo. Quando você faz um novo projeto, você cria um
arquivo único ambiente, que tem o nome "[worldname]. DME". Este
ficheiro pode conter código-fonte, mas em geral só será composta de
referências geradas automaticamente para outros arquivos no projeto.
Este é o melhor visto por exemplo, então vamos parar de falar e começar
a codificar!
1. Criar o "Olá" projeto selecionando New
Ambiente ... a partir do menu Arquivo. Isso leva para um diretório no
qual seu projeto será armazenado. Enter "Olá" como o diretório
desejado. Isso cria um novo diretório chamado "Olá", que agora contém o
arquivo hello.dme ambiente. Observe que hello.dme também aparece na
árvore de arquivos exibidos no lado esquerdo da tela. Todos os arquivos
no diretório do ambiente estão listados lá.
2. Vamos colocar o
código para este projeto em um arquivo separado. Selecione Novo arquivo
... a partir do menu Arquivo. Escolher o código do arquivo para o tipo
e digite "Olá" para o nome. Isso cria um arquivo chamado "hello.dm" no
diretório do ambiente, e um anúncio correspondente na árvore de
arquivos. A caixa de seleção ao lado indica que o código em hello.dm
será incluída neste projeto.
3. O arquivo hello.dm agora está
pronto para edição. Digite o seguinte código. (Certifique-se a primeira
linha não é recuado, o segundo é recuado uma vez, eo terceiro é
recortado por duas vezes. É mais fácil usar guias para o efeito.)
mob
+Login()
++world << "Hello, world!"
4.
Compilar o código, selecionando Compilar a partir do menu Build. Se
houver problemas, eles aparecerão na caixa de saída na parte inferior
da tela. Mas a menos que você recuado incorretamente, todos devem
prosseguir sem problemas.
5. Execute o mundo compilada pela
selecção Executar a partir do menu Build. Isso inicia Dream Seeker,
que, posteriormente, bem-vindo ao mundo!
Considere o exemplo
Mundo Olá novamente. O código de MS diz que quando um jogador faz
logon, uma mensagem deve ser exibida. Podemos fazer uma coisa
semelhante para outros tipos de ações. Por exemplo, se o jogador
digitar um comando, uma mensagem pode ser exibida.
No MS, os comandos são chamados de verbos. Um verbo é definido no seguinte exemplo:
mob
+verb
++smile() world << "[usr] grins."
Observe
a escada engraçado recuo passo novamente! Isso será explicado um pouco.
Por agora, leia esse exemplo de cima para baixo. Mais uma vez estamos
definindo uma propriedade de um mob (avatar do jogador). Neste caso,
estamos adicionando um verbo, uma ação que o jogador pode instruir o
mob para executar. O nome do verbo é sorrir. A linha final exibe uma
mensagem quando a multidão sorrisos. Observe o usr [] na mensagem, como
você deve ter adivinhado, que não é exibido literalmente, mas é
substituído pelo nome do usuário, o jogador que inicia o comando.
Executar
este exemplo. Depois de ter entrado, tente digitar sorriso e pressionar
enter. Você deverá ver a mensagem sorrindo com o seu nome de login
passa dentro dela. Incrível! Fantástico! Mas Deus jogando é um negócio
sério. Não deixe que ninguém pegá-lo sorrindo.
Para variar, você pode adicionar alguns verbos mais. Aqui estão alguns exemplos:
mob
+verb smile()
++world << "[usr] grins."
+giggle()
++world << "[usr] giggles."
+cry()
++world << "[usr] cries \his heart out."
Agora
o passo-padrão da escada foi quebrada porque todos os três verbos
sorrir, rir, chorar e estão no mesmo nível de indentação. No DM, o
recuo no início de uma linha que serve o grupo de coisas juntos. Aqui,
sorriso, riso e choro são agrupados em verbos pertencentes à quadrilha.
Cada um desses verbos tem o conteúdo da própria recuadas abaixo dela.
Observe
o uso de \ sua no verbo chorar. Essa macro é substituída pelo pronome
possessivo adequado. Poderia ser seu, seu, sua, ou a sua, dependendo do
gênero. DM fornece algumas outras macros úteis como este para fazer a
vida fácil.
Até agora nada foi dito (porque você nunca
perguntou) sobre os parênteses vazios depois dos nomes verbo nos
exemplos acima. Eles estavam no primeiro exemplo, após a sessão também.
Estes são a marca de uma definição do procedimento. Os verbos e Login
são exemplos de procedimentos, que são uma seqüência de instruções a
serem realizadas. Nos exemplos a medida de cada procedimento consistiu
em apenas uma linha - uma instrução para mostrar algum texto. Eles
podem, naturalmente, tornar-se muito mais complicado do que isso.
Existem
duas categorias gerais de processos: os que aparecem como os comandos
do jogador e aqueles que não. Estes são chamados de verbos e procs
respectivamente. Por essa definição, Entrar no exemplo Olá Mundo foi um
proc.
Os parênteses após um nome de procedimento são mais do que
decorativo. Eles podem ser usados para definir os parâmetros
procedimento. Isso permite a prestação de informações adicionais para o
procedimento. A informação é armazenada em uma variável, isto é, um
pedaço de memória com um nome. Para confundir as questões, um
programador, muitas vezes chamada de tais variáveis, que servem como
parâmetros para procedimentos, argumentos. Por quê? Bem, apenas por uma
questão de argumentação.
Aqui está um exemplo de um verbo que tem um parâmetro - neste caso, uma pequena mensagem a ser transmitida para o mundo.
mob
+verb
++say(msg as text)
+++world << "[usr] says, [msg]"
Nestas
linhas curtas são o esqueleto de um bate-papo mundo. Os usuários podem
efetuar login e começar a tagarelar com o verbo dizer. Try it out. Sua
sessão pode parecer algo como o seguinte:
say "hello world!"
Dan says, hello world!
O
principal ponto de interesse no código DM está dentro dos parênteses,
onde o parâmetro é definido msg. Poderia ter sido chamado de nada, o
nome da variável é arbitrário. A afirmação como o texto indica que uma
mensagem curta fornecida pelo usuário será armazenado na variável. Esta
mensagem é então inserido em um resultado final na posição marcada pela
expressão [msg].
Até agora tenho casualmente introduzida mobs,
verbos, procs, e argumentos. Agora é hora de uma formal (tediosamente
emocionante) descrição da sintaxe DM. Pode demorar vários multi-frases
clausal para obter através desta, portanto, não prender sua respiração.
DM
código é estruturado como uma árvore. O topo da árvore é chamado de
raiz. Os vários tipos de objetos virtuais (mobs sendo uma) filial fora
da raiz e pode por sua vez, dão origem a tensões adicionais que se
ramificam para baixo a partir deles.
Caso você não tenha notado,
a terminologia árvore de código está invertido. Claro, é assim o
sistema de arquivos em seu disco rígido, e todas as árvores de outros
informativos de existência. É bem possível que a grande maioria dos
cientistas da computação nunca terem visto uma árvore real. O peso
absoluto da sua ignorância mantém o jargão de virar à direita para
cima, e estamos presos a árvores que têm uma raiz no topo e nódulos na
parte inferior da folha. Ou pode ser apenas de obscurecimento padrão. É
por isso que eu faço.
É hora de um exemplo. Um tipo
particularmente interessante de objeto virtual é um relvado. É um bloco
de construção usado para fazer mapas gráficos que os jogadores podem
andar por aí por diante. Suponha que nós queríamos fazer um labirinto.
Isso exigiria dois tipos de relvados: pisos e paredes. Veja como você
poderia definir-lhes:
turf
+floor
+wall
Tudo
o que fizemos foi sucursal dois novos tipos de objetos fora do relvado
de base. Um deles é chamado de piso e da parede do outro. A
terminologia de uma árvore de família é muitas vezes usado para
descrever a relação dos diversos objetos definidos aqui. Turf é o pai
de piso e parede. As duas crianças são irmãos uns dos outros. A criança
herda todas as propriedades de seu pai e acrescenta algumas próprias
para distingui-lo de seus irmãos. Tanto chão e parede são relvados,
porque eles são derivadas do tipo de objeto relva.
Para fazer um
labirinto, precisamos especificar algumas propriedades de pisos e
paredes: o que eles se parecem e se você pode andar com eles. Enquanto
estamos no assunto, o aparecimento de um jogador deve ser definida
também. Esta é a forma como é feito:
turf
+floor
++icon = 'floor.dmi'
+wall
++icon = 'wall.dmi'
++density = 1
mob
+icon = 'player.dmi'
Vários
trabalhos têm sido feitos. Estes assumem a forma de uma variável no
lado esquerdo e um valor no lado direito. No caso dos ícones, o valor é
o nome de um ícone do arquivo entre aspas simples. No caso da
densidade, o valor deve ser 1 ou 0 para indicar se ela é densa ou não.
A relva densa não vai permitir que outros objectos densos (como
monstros) para passar por eles.
Figura 1.2: Mapper The Amazing
Para
a maioria dos programas, adicionando suporte gráfico é uma tarefa
enorme. As instalações do Dream Maker, entretanto, tornar essa tarefa
bastante simples. Para o nosso exemplo, vamos apenas chamar um casal de
ícones e colocá-los em um mapa.
1. Criar um projeto chamado "labirinto através do Ambiente de Nova ... opção.
2. Crie o arquivo maze.dm principal e digite o seguinte código:
turf
+floor
++icon = 'floor.dmi'
+wall
++icon = 'wall.dmi'
++density = 1
mob
+icon = 'player.dmi'
Você terá que fazer um novo ícone para o relvado e depois começar a editar o mapa para marcar a posição de partida com ele.
O
código que faz a colocação inicial da máfia está no proc Login. Ele
define a localização do mob (loc) para a posição do turfe começar. Isto
é feito usando o localizar () instrução - um dos muitos procedimentos
internos no DM (ver figura 1.3). Ele calcula a posição de um tipo de
objeto (neste caso, a relva start).
Observe como o tipo de
objeto / relvado / start é especificado. Esta notação é chamada de um
tipo de caminho por causa da maneira que você especificar o caminho (a
partir da raiz) para baixo para o tipo específico de objeto que você
deseja.
Agora, suponha que você esqueceu de colocar um relvado
iniciar no mapa. O que aconteceria? O localizar () a instrução seria um
fracasso e que o jogador não iria colocados no mapa e, portanto, não
seria sequer capaz de ver o labirinto após log in Um desastre total!
Não seria bom para cair para trás sobre o comportamento padrão de pelo
menos colocar o mob em algum lugar no mapa? Em outras palavras, temos
de alguma forma, executar a proc Login padrão, bem como aquele que
definiu, apenas no caso de não haver relva começar. Aqui está como
fazê-lo:
mob
+Login()
++loc = locate(/turf/start)
++..()
A
última linha faz o trabalho. Ele invoca um procedimento com um nome
estranho: apenas dois pontos. Esse é o nome de MS usa para o
procedimento padrão, mais geralmente conhecido como o pai ou o
procedimento super. No caso da sessão, o padrão verifica proc para ver
se a multidão já está em algum lugar. Se não, ele encontra um lugar
vago no mapa, que é exatamente o que queríamos.
Agora você pode
começar a ver o sabor geral de programação DM. Há uma série de eventos
(sendo uma sessão), que são tratadas por procedimentos. Quando
necessário, você pode substituir o procedimento padrão com uma de sua
preferência para fazer as coisas funcionam exatamente como você deseja.
Este
é outro componente importante da programação orientada a objeto. Cada
tipo de objeto pode responder a eventos de forma diferente. A maneira
em que eles respondem é herdado de seus pais, por padrão, mas pode ser
redefinido e ampliado conforme a necessidade.
Esta introdução
foi apenas arranhou a superfície de MS. Você deve começar a ver algumas
possibilidades interessantes. Ao mesmo tempo, você deve ter um monte de
perguntas sem resposta. Manter essas duas em mente, que será o seu guia
através da exploração mais detalhada da linguagem que se segue.
Figura 1.3: A ajuda está a caminho!
No ambiente de programação é completa sem uma referência abrangente e
acessível. Dream Maker fornece esta sob a forma de um índice
pesquisável de temas e propriedades internas. Você pode acessar esta
selecionando Ajuda On ... no menu, ou pressionando a tecla F1. Se o
cursor está posicionado em uma palavra (como "localizar"), a ajuda será
encontrada para esse tópico.
Meet the Dream Maker
O primeiro passo para o
domínio das terras do sono é a realização, sem acordar, que um sonho.
Nos mundos dia, o domínio começa por esquecimento, sem sonhar que um
está acordado.
- DM
DM é uma linguagem de programação
para a criação de mundos multi-usuário. Pelo `mundo 'eu quero dizer um
ambiente multi-meios de comunicação virtual, onde as pessoas assumem
personagens com as quais interagem entre si e controlados por
computador objetos. Isso poderia tomar a forma de um jogo competitivo,
um RPG de aventura, não um fórum de discussão, ou algo que temos sequer
imaginado.
Freqüentemente, a terminologia de um role-playing
game é o mais apropriado: os seres humanos são PCs (jogo) e personagens
controlados por computador são NPCs (non-playing characters). A
encarnação virtual de um jogador é muitas vezes chamado de um avatar.
As regras do jogo são escritos em MS e fielmente executada pelo
computador. Essas ações definem o que os jogadores podem instruir seu
avatar para executar, qual o efeito que estes terão de The Game, e
quaisquer outros eventos que podem acontecer com o tempo.
Para
entender a mecânica do sistema plenamente, é útil conhecer alguns
termos simples. Os programas de computador que funcionam através de uma
rede muitas vezes são divididos em duas partes: um cliente e um
servidor. Neste caso, o cliente é o programa que os jogadores usam para
digitar comandos e ver o que acontece como resultado. Em outras
palavras, o cliente lida com entrada e saída. O servidor é o programa
que executa The Game, realizando as regras definidas na linguagem DM. O
game designer escreve estas regras em um terceiro programa chamado
compilador. Ele lê o programa de MS (conhecido como o código-fonte por
programadores), verifica se há erros gramaticais, e gera uma mais
compacta, computador amigável, arquivo conhecido como código de bytes
ou binário. É esse processo que o servidor lê para ver como executar o
The Game.
Assim, existem três programas principais: o cliente,
servidor e do compilador. Chamamos essas Dream Seeker, Dream Daemon, e
Dream Maker, respectivamente. (O daemon palavra é apenas mais um (mais
fantásticos) palavra para o servidor.) Como um todo, nos referimos a
este conjunto de software como BYOND, que significa Build Your Own Net
Dream - uma descrição apropriada da sua finalidade e também de como
agora ele vagueou para além do nosso plano original. Mas isso é outra
história!
Cada uma introdução à linguagem de programação deve
começar com o mesmo exemplo. Chame-lhe o destino, fatalidade, ou puro
acaso, é um pouco estranho que o nome do exemplo universal introdutório
Olá mundo. Assustador, não? É exatamente isso que acontece neste
exemplo - digamos Olá para o mundo.
No DM você escrever assim:
mob
+Login()
++world << "Hello, world!"
Se
você tem alguma experiência de programação anterior, a última linha
provavelmente parece vagamente sensata. Ele produz o texto dentro das
aspas duplas para o mundo inteiro. Mas o que na terra é uma máfia e por
que é cada linha recuada como escada-passos? Tudo a seu tempo. Por ora,
basta compreender que o avatar do jogador em The Game é uma máfia.
Quando um jogador faz logon, o servidor é orientado a saída a mensagem
"Olá mundo" para todos.
Compilar e executar este programa (ver
figura 1.1). Se tudo correr conforme o planejado, você deve ver as
palavras "Olá, mundo" magicamente aparecem na tela do Dream Seeker
saída. Voila! Você criou seu mundo BYOND primeiro.
Agora você
sabe os passos básicos para a concepção de mundos. Você escreve um
código de MS, compilá-lo e executá-lo. Mas este mundo não tem nada para
o jogador a fazer. Esse é o próximo.
Figura 1.1: Olá mundo!
Este
primeiro mundo não serve apenas como uma introdução à linguagem de MS,
mas ao editor Dream Maker / compilador também. Felizmente, o sistema
foi projetado para ser bastante simples de usar, e com apenas alguns
passos que você deve estar no seu caminho para BYOND magia programação!
Dream
Maker refere-se à coleção de arquivos que compõem o projeto como o
ambiente do mundo. Quando você faz um novo projeto, você cria um
arquivo único ambiente, que tem o nome "[worldname]. DME". Este
ficheiro pode conter código-fonte, mas em geral só será composta de
referências geradas automaticamente para outros arquivos no projeto.
Este é o melhor visto por exemplo, então vamos parar de falar e começar
a codificar!
1. Criar o "Olá" projeto selecionando New
Ambiente ... a partir do menu Arquivo. Isso leva para um diretório no
qual seu projeto será armazenado. Enter "Olá" como o diretório
desejado. Isso cria um novo diretório chamado "Olá", que agora contém o
arquivo hello.dme ambiente. Observe que hello.dme também aparece na
árvore de arquivos exibidos no lado esquerdo da tela. Todos os arquivos
no diretório do ambiente estão listados lá.
2. Vamos colocar o
código para este projeto em um arquivo separado. Selecione Novo arquivo
... a partir do menu Arquivo. Escolher o código do arquivo para o tipo
e digite "Olá" para o nome. Isso cria um arquivo chamado "hello.dm" no
diretório do ambiente, e um anúncio correspondente na árvore de
arquivos. A caixa de seleção ao lado indica que o código em hello.dm
será incluída neste projeto.
3. O arquivo hello.dm agora está
pronto para edição. Digite o seguinte código. (Certifique-se a primeira
linha não é recuado, o segundo é recuado uma vez, eo terceiro é
recortado por duas vezes. É mais fácil usar guias para o efeito.)
mob
+Login()
++world << "Hello, world!"
4.
Compilar o código, selecionando Compilar a partir do menu Build. Se
houver problemas, eles aparecerão na caixa de saída na parte inferior
da tela. Mas a menos que você recuado incorretamente, todos devem
prosseguir sem problemas.
5. Execute o mundo compilada pela
selecção Executar a partir do menu Build. Isso inicia Dream Seeker,
que, posteriormente, bem-vindo ao mundo!
Considere o exemplo
Mundo Olá novamente. O código de MS diz que quando um jogador faz
logon, uma mensagem deve ser exibida. Podemos fazer uma coisa
semelhante para outros tipos de ações. Por exemplo, se o jogador
digitar um comando, uma mensagem pode ser exibida.
No MS, os comandos são chamados de verbos. Um verbo é definido no seguinte exemplo:
mob
+verb
++smile() world << "[usr] grins."
Observe
a escada engraçado recuo passo novamente! Isso será explicado um pouco.
Por agora, leia esse exemplo de cima para baixo. Mais uma vez estamos
definindo uma propriedade de um mob (avatar do jogador). Neste caso,
estamos adicionando um verbo, uma ação que o jogador pode instruir o
mob para executar. O nome do verbo é sorrir. A linha final exibe uma
mensagem quando a multidão sorrisos. Observe o usr [] na mensagem, como
você deve ter adivinhado, que não é exibido literalmente, mas é
substituído pelo nome do usuário, o jogador que inicia o comando.
Executar
este exemplo. Depois de ter entrado, tente digitar sorriso e pressionar
enter. Você deverá ver a mensagem sorrindo com o seu nome de login
passa dentro dela. Incrível! Fantástico! Mas Deus jogando é um negócio
sério. Não deixe que ninguém pegá-lo sorrindo.
Para variar, você pode adicionar alguns verbos mais. Aqui estão alguns exemplos:
mob
+verb smile()
++world << "[usr] grins."
+giggle()
++world << "[usr] giggles."
+cry()
++world << "[usr] cries \his heart out."
Agora
o passo-padrão da escada foi quebrada porque todos os três verbos
sorrir, rir, chorar e estão no mesmo nível de indentação. No DM, o
recuo no início de uma linha que serve o grupo de coisas juntos. Aqui,
sorriso, riso e choro são agrupados em verbos pertencentes à quadrilha.
Cada um desses verbos tem o conteúdo da própria recuadas abaixo dela.
Observe
o uso de \ sua no verbo chorar. Essa macro é substituída pelo pronome
possessivo adequado. Poderia ser seu, seu, sua, ou a sua, dependendo do
gênero. DM fornece algumas outras macros úteis como este para fazer a
vida fácil.
Até agora nada foi dito (porque você nunca
perguntou) sobre os parênteses vazios depois dos nomes verbo nos
exemplos acima. Eles estavam no primeiro exemplo, após a sessão também.
Estes são a marca de uma definição do procedimento. Os verbos e Login
são exemplos de procedimentos, que são uma seqüência de instruções a
serem realizadas. Nos exemplos a medida de cada procedimento consistiu
em apenas uma linha - uma instrução para mostrar algum texto. Eles
podem, naturalmente, tornar-se muito mais complicado do que isso.
Existem
duas categorias gerais de processos: os que aparecem como os comandos
do jogador e aqueles que não. Estes são chamados de verbos e procs
respectivamente. Por essa definição, Entrar no exemplo Olá Mundo foi um
proc.
Os parênteses após um nome de procedimento são mais do que
decorativo. Eles podem ser usados para definir os parâmetros
procedimento. Isso permite a prestação de informações adicionais para o
procedimento. A informação é armazenada em uma variável, isto é, um
pedaço de memória com um nome. Para confundir as questões, um
programador, muitas vezes chamada de tais variáveis, que servem como
parâmetros para procedimentos, argumentos. Por quê? Bem, apenas por uma
questão de argumentação.
Aqui está um exemplo de um verbo que tem um parâmetro - neste caso, uma pequena mensagem a ser transmitida para o mundo.
mob
+verb
++say(msg as text)
+++world << "[usr] says, [msg]"
Nestas
linhas curtas são o esqueleto de um bate-papo mundo. Os usuários podem
efetuar login e começar a tagarelar com o verbo dizer. Try it out. Sua
sessão pode parecer algo como o seguinte:
say "hello world!"
Dan says, hello world!
O
principal ponto de interesse no código DM está dentro dos parênteses,
onde o parâmetro é definido msg. Poderia ter sido chamado de nada, o
nome da variável é arbitrário. A afirmação como o texto indica que uma
mensagem curta fornecida pelo usuário será armazenado na variável. Esta
mensagem é então inserido em um resultado final na posição marcada pela
expressão [msg].
Até agora tenho casualmente introduzida mobs,
verbos, procs, e argumentos. Agora é hora de uma formal (tediosamente
emocionante) descrição da sintaxe DM. Pode demorar vários multi-frases
clausal para obter através desta, portanto, não prender sua respiração.
DM
código é estruturado como uma árvore. O topo da árvore é chamado de
raiz. Os vários tipos de objetos virtuais (mobs sendo uma) filial fora
da raiz e pode por sua vez, dão origem a tensões adicionais que se
ramificam para baixo a partir deles.
Caso você não tenha notado,
a terminologia árvore de código está invertido. Claro, é assim o
sistema de arquivos em seu disco rígido, e todas as árvores de outros
informativos de existência. É bem possível que a grande maioria dos
cientistas da computação nunca terem visto uma árvore real. O peso
absoluto da sua ignorância mantém o jargão de virar à direita para
cima, e estamos presos a árvores que têm uma raiz no topo e nódulos na
parte inferior da folha. Ou pode ser apenas de obscurecimento padrão. É
por isso que eu faço.
É hora de um exemplo. Um tipo
particularmente interessante de objeto virtual é um relvado. É um bloco
de construção usado para fazer mapas gráficos que os jogadores podem
andar por aí por diante. Suponha que nós queríamos fazer um labirinto.
Isso exigiria dois tipos de relvados: pisos e paredes. Veja como você
poderia definir-lhes:
turf
+floor
+wall
Tudo
o que fizemos foi sucursal dois novos tipos de objetos fora do relvado
de base. Um deles é chamado de piso e da parede do outro. A
terminologia de uma árvore de família é muitas vezes usado para
descrever a relação dos diversos objetos definidos aqui. Turf é o pai
de piso e parede. As duas crianças são irmãos uns dos outros. A criança
herda todas as propriedades de seu pai e acrescenta algumas próprias
para distingui-lo de seus irmãos. Tanto chão e parede são relvados,
porque eles são derivadas do tipo de objeto relva.
Para fazer um
labirinto, precisamos especificar algumas propriedades de pisos e
paredes: o que eles se parecem e se você pode andar com eles. Enquanto
estamos no assunto, o aparecimento de um jogador deve ser definida
também. Esta é a forma como é feito:
turf
+floor
++icon = 'floor.dmi'
+wall
++icon = 'wall.dmi'
++density = 1
mob
+icon = 'player.dmi'
Vários
trabalhos têm sido feitos. Estes assumem a forma de uma variável no
lado esquerdo e um valor no lado direito. No caso dos ícones, o valor é
o nome de um ícone do arquivo entre aspas simples. No caso da
densidade, o valor deve ser 1 ou 0 para indicar se ela é densa ou não.
A relva densa não vai permitir que outros objectos densos (como
monstros) para passar por eles.
Figura 1.2: Mapper The Amazing
Para
a maioria dos programas, adicionando suporte gráfico é uma tarefa
enorme. As instalações do Dream Maker, entretanto, tornar essa tarefa
bastante simples. Para o nosso exemplo, vamos apenas chamar um casal de
ícones e colocá-los em um mapa.
1. Criar um projeto chamado "labirinto através do Ambiente de Nova ... opção.
2. Crie o arquivo maze.dm principal e digite o seguinte código:
turf
+floor
++icon = 'floor.dmi'
+wall
++icon = 'wall.dmi'
++density = 1
mob
+icon = 'player.dmi'
Você terá que fazer um novo ícone para o relvado e depois começar a editar o mapa para marcar a posição de partida com ele.
O
código que faz a colocação inicial da máfia está no proc Login. Ele
define a localização do mob (loc) para a posição do turfe começar. Isto
é feito usando o localizar () instrução - um dos muitos procedimentos
internos no DM (ver figura 1.3). Ele calcula a posição de um tipo de
objeto (neste caso, a relva start).
Observe como o tipo de
objeto / relvado / start é especificado. Esta notação é chamada de um
tipo de caminho por causa da maneira que você especificar o caminho (a
partir da raiz) para baixo para o tipo específico de objeto que você
deseja.
Agora, suponha que você esqueceu de colocar um relvado
iniciar no mapa. O que aconteceria? O localizar () a instrução seria um
fracasso e que o jogador não iria colocados no mapa e, portanto, não
seria sequer capaz de ver o labirinto após log in Um desastre total!
Não seria bom para cair para trás sobre o comportamento padrão de pelo
menos colocar o mob em algum lugar no mapa? Em outras palavras, temos
de alguma forma, executar a proc Login padrão, bem como aquele que
definiu, apenas no caso de não haver relva começar. Aqui está como
fazê-lo:
mob
+Login()
++loc = locate(/turf/start)
++..()
A
última linha faz o trabalho. Ele invoca um procedimento com um nome
estranho: apenas dois pontos. Esse é o nome de MS usa para o
procedimento padrão, mais geralmente conhecido como o pai ou o
procedimento super. No caso da sessão, o padrão verifica proc para ver
se a multidão já está em algum lugar. Se não, ele encontra um lugar
vago no mapa, que é exatamente o que queríamos.
Agora você pode
começar a ver o sabor geral de programação DM. Há uma série de eventos
(sendo uma sessão), que são tratadas por procedimentos. Quando
necessário, você pode substituir o procedimento padrão com uma de sua
preferência para fazer as coisas funcionam exatamente como você deseja.
Este
é outro componente importante da programação orientada a objeto. Cada
tipo de objeto pode responder a eventos de forma diferente. A maneira
em que eles respondem é herdado de seus pais, por padrão, mas pode ser
redefinido e ampliado conforme a necessidade.
Esta introdução
foi apenas arranhou a superfície de MS. Você deve começar a ver algumas
possibilidades interessantes. Ao mesmo tempo, você deve ter um monte de
perguntas sem resposta. Manter essas duas em mente, que será o seu guia
através da exploração mais detalhada da linguagem que se segue.
Figura 1.3: A ajuda está a caminho!
No ambiente de programação é completa sem uma referência abrangente e
acessível. Dream Maker fornece esta sob a forma de um índice
pesquisável de temas e propriedades internas. Você pode acessar esta
selecionando Ajuda On ... no menu, ou pressionando a tecla F1. Se o
cursor está posicionado em uma palavra (como "localizar"), a ajuda será
encontrada para esse tópico.