• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NuGuN

[Closed Source] Batalha de Programas

50 mensagens neste tópico

Bem... Depois de ver esta thread aberta pelo shumy fiquei com um "bichinho" aqui na cabeça e estou a pensar avançar com a ideia mas com umas alterações que a meu ver contribuirão para o sucesso da ideia como a utilização de qualquer linguagem de programação e não apenas Assembly, em vez de ser local as batalhas realizariam-se online entre outras coisas....

Tenho andado a falar com o shumy uma vez que foi ele que teve a ideia e me têm ajudado a perceber melhor a ideia, e ja falei também com o Cypher que já se disponibilizou para ajudar  :)

Agora o que eu vinha aqui fazer era pedir Sugestões/Ideias para este projecto, mais especificamente como fazer batalhas entre programas baseando-se na ideia da thread. Eu ja tenho uma ideia muito superficial de como fazer mas gostava de ver mais ideias por isso espero feedback  :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É pá,.. arranca lá com isso que ajudo no que puder... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é temas, tipo, como é que hei-de explicar  :)

O que eu queria era que dessem sugestões/ideias sobre como fazer as batalhas entre programas.

P.S.

Não estou interessado em nada do tipo de jogo do galo nem xadrez nem nada desse tipo de jogos!

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum, e um cinco ou sete em linha para ser diferente ?

Ou black jack, black jack era fixe !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

P.S.

Não estou interessado em nada do tipo de jogo do galo nem xadrez nem nada desse tipo de jogos!

Ou black jack, black jack era fixe !

Bem era um bom projecto o "black jack "mas para batalhas de programas ?! não sei ....

Acho que NuGuN quer levar a "batalha" mais à palavra ?! mesmo uma batalha como em alguns exempos

http://www.portugal-a-programar.pt/index.php?showtopic=4654 ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu não quero nada desse tipo de jogos porque a ideia é que qualquer pessoa com poucos conhecimentos de programação consiga fazer um programa para "combater" e no caso do blackjack e outros não me parece que seja muito facil fazer um programa que jogue a isso com mínima eficiência.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Poderias fazer um de combate combate mesmo, combinações de golpes, mas seria mais sorte do que saber !

:P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Poderias fazer um de combate combate mesmo, combinações de golpes, mas seria mais sorte do que saber !

:P

Epa.... é uma ideia só que esses golpes tinham de ser a nível de instruções e não como devias ter em mente quando postas-te a ideia (penso eu).

Estou com sérias dificuldades em encontrar uma ideia base  :bored:. Tenho algumas ideias mas depois quando vou outra vez rever a ideia encontro sempre falhas.... A ideia que está nesta thread agrada-me bastante mas tenho algumas duvidas se será sucesso, tenho tentado encontrar mais pormenores para melhorar a ideia mas há muita coisa a ter em consideração e vou precisar de algum tempo até ter uma ideia minimamente sólida.

Se para aqui se acender alguma luz dou noticias, entretanto se algum tiver mais alguma sugestão/ideia já sabe :P

Cumps 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom,... se é para dar ideias eu não podia cá faltar! :P Vamos lá ver se esta é das que se aproveitão ou não. Tendo por base o que foi apresentado aqui vai...

ainda não sei bem qual é a ideia mas 'vamos lá escrevendo' qualquer coisa .....

Vamos imaginar um 'campo de batalha' feito numa linguagem de programação qualquer onde vamos colar o codigo de cada 'lutador' um ao lado do outro.

Entre eles metia-se a visualização de uma matriz por exemplo 2X20

Os dois programas vao correr simultaneamente, escolhendo aleatoriamente o que inicia, e excutadando cada um passo a passo. Ou seja,.. um passo de um, um passo do outro, etc...

Entenda-se por passo ou uma linha de comando 'normal' (envio de dados para ataque ou defesa) ou um ciclo (for, do until,etc..) ou uma condição e respectivo comando 'normal' (se houver mais do que um, só excuta um de cada vez).

Asim de repente é isso...

edit:

O objectivo seria por exemplo fazer com que o adversario tenha a soma da sua linha = 100 ou 200 ou 20 ou qq coisa...

Tão a ver +- o que eu estou a dizer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu ja participei numa cena destas ha mts anos para mIRC que se dava um objectivo, e ganhava o programa bugless com menos linhas de codigo. Não sei bem se é isso que queriam?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas....

d_pintassilgo não percebi bem a tua ideia mas parece-me que já entraste um pouco no que quero, ja falaste em matrizes e tal... De qualquer forma é sempre bem vindo este tipo de ideias porque por vezes mesmo que as ideias pareçam disparatadas, podem surgir ideias apartir dessas ideias que à primeira vista parecem disparatadas por isso não se acanhem!

Eu ja participei numa cena destas ha mts anos para mIRC que se dava um objectivo, e ganhava o programa bugless com menos linhas de codigo. Não sei bem se é isso que queriam?

Não é bem isso.

Eu vou tentar explicar melhor qual é o objectivo, hoje já não mas amanham vou tentar explicar melhor o que quero.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Julgo que se podem seguir dois caminhos:

1) Seguir a ideia do Shummy:

Num vector, distribuir ambos os programas (instruções) de modo a que os comandos fiquem contíguos.

Os programas executam uma instrução de cada vez.

Bastaria então criar uma lista com os comandos disponíveis. Não teriam de ser necessariamente comandos em assembly, os comandos podem ser criados por nós (mais ou menos complexos) uma vez que o trabalho é feito pelo programa que os corre. O objectivo é "escrever" por cima do espaço do vector do outro programa, de forma a que na sua fase de dizer o próximo comando a executar, envie um comando inválido e perca o jogo.

2) Criar, em vez de um vector, uma matriz. Cada programa tem uma posição inicial (ocupa um ponto, ou uma determinada área).

Na sua vez de jogar, tem duas escolhas:

Efectuar um movimento que inclua a própria matriz (por exemplo, scanar a matriz, ou seja, ler um valor), bombardear uma posição da matriz, copiar um dos seus elementos para outra posição na matriz.

Ou executar um procedimento. Este procedimento poderia ser programado em C ou noutra linguagem qualquer já existente, e poderia envolver qualquer outro tipo de processamento, desde decidir que passo dar a analisar jogadas do adversário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

...

2) Criar, em vez de um vector, uma matriz. Cada programa tem uma posição inicial (ocupa um ponto, ou uma determinada área).

Na sua vez de jogar, tem duas escolhas:

Efectuar um movimento que inclua a própria matriz (por exemplo, scanar a matriz, ou seja, ler um valor), bombardear uma posição da matriz, copiar um dos seus elementos para outra posição na matriz.

Ou executar um procedimento. Este procedimento poderia ser programado em C ou noutra linguagem qualquer já existente, e poderia envolver qualquer outro tipo de processamento, desde decidir que passo dar a analisar jogadas do adversário.

É +/- isto que estou a pensar Warrior  :P.

Em vez de utilizar vectores estou a pensar utilizar matrizes ou os dois tipos ao mesmo tempo, do tipo, ter vários "mapas". Ter uma matriz "infinita" ou ter uma matriz de 400x400 ou 100x350, vectores de 0 a 300 ou de 0 a 50, seriam "mapas" diferentes... são ideias que têm de ser bem analisadas... Depois a cena das instruções invalidas e das instruções etc, eu estou a pensar fazer uma coisa diferente, por exemplo, os programas continuam a ter a sua vez de actuar um de cada vez, e como se joga online existiria tipo um protocolo de comunicação entre o programa client (programa que os jogadores têm no seu computador) e o server (programa que simula o jogo), agora por exemplo o programa1 queria mover-se para a posição (x,y) da matriz, iria enviar uma string para o servidor +/- com este aspecto -> MOV(x,y). Se por exemplo o programa1 coloca-se uma bomba na posição (x,y) da matriz enviaria uma string +/- com este aspecto BOMBA(x,y).

É óbvio que será mais complexo que isto, penso que isto já da para terem uma ideia do que se quer!

Já tive mais umas ideias com a ajuda do que aqui têm postado, parece que não ajuda mas sempre  pode dar alguma ideia  :P  e brevemente vou colocar aqui um texto mais detalhado(embora ainda muito superficial) do funcionamento.

Até lá vão postanto as vossas ideias/sugestões!

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem... vou tentar explicar as ideias que tive ate agora para este projecto. Vou separar isto em varias partes para ser mais fácil de explicar e perceber.

Modo de Jogo e Constituição Virtual dos Programas

O modo de jogo será baseado em ciclos. Cada jogador têm um ciclo para jogar ou seja, joga um programa de cada vez.

Numa batalha temos o Programa1 e o Programa2 em que o primeiro ciclo vai pertencer ao Programa2 (escolhido aleatoriamente), o Programa2 joga e passa-se ao segundo ciclo que pertence ao Programa1, joga o Programa1 e passa-se ao ciclo número 3 que pertence ao Programa2 e assim sucessivamente...  Outro exemplo, um programa que coloca uma bomba (na posição A1)  e em seguida foge para outra posição (posição A2), são duas acções(colocar a bomba e movimentar-se) e como tal precisará de dois ciclos, isto quer dizer que em cada ciclo apenas uma instrução pode ser executada.

A Constituição Virtual dos Programas é nada mais nada menos que a "forma" que os programas têm dentro das matrizes/vectores, um programa não irá ocupar apenas uma posição. O número de posição que um programa ira ocupar deveria ser calculado através do seu tamanho mas visto que o jogo será online isto será um pouco difícil de controlar devido ás aldrabices ... não me agrada muito que os programas tenham tamanhos estáticos independentemente do seu tamanho mas pronto...  é mais um problema a resolver. Mas seja como for os programas iram ocupar mas que uma posição e ocupará essas posições em linha. Um programa não irá ter a forma de um quadrado, triângulo nem nada disso mas sim uma linha que pode ser na vertical ou horizontal (pode ser alterado durante o jogo). Os programas terão duas partes na sua Constituição Virtual, será a Parte Exterior e a Parte Interior ou Núcleo. O núcleo será a parte mais "frágil" do programa e a Parte Exterior a mais vulnerável. Um programa terá sempre que ter estas duas partes, e o núcleo pode ser formado por 1 ou mais posições, se o programa for constituído por 4 posições o núcleo terá de ser as duas posições que estiverem mais no interior mas se o programa for composto por 5 posições então o núcleo pode ser apenas a posição do centro. O núcleo devido à sua fragilidade não suporta a explosão de uma bomba e caso um programa seja "atingido" por uma bomba no seu núcleo perderá. O mesmo não se passa com a Parte Exterior que caso seja atingida por uma bomba, perderá a secção que entro em contacto com a bomba mas o programa pode continuar com uma secção a menos mas com o seu núcleo mais vulnerável.

Mapas (Matrizes/Vectores)

Primeiro que tudo, o que é isto de matrizes e vectores. As matrizes e os vectores serão os "mapas" onde se irá desenrolar a acção.

Exemplo de um possível mapa com uma matriz de 20x20:

matriz20x20yh4.th.jpg

Exemplo de um possível mapa com um vector de 0 a 20:

vector0a20wu5.th.jpg

Exemplo de um possível mapa com vários vectores:

variosvectorresth8.th.jpg

Neste ultimo exemplo podemos ver vários vectores tanto na vertical como na horizontal  e todos eles estão dentro de uma matriz de 20x20 ou seja, um mapa deste tipo é constituidor por uma matriz e depois através do programa simulador de combates a essa matriz são lhe impostos limites para que possam parecer vários vectores.

É óbvio que tudo isto que estou a explicar é apenas a nível gráfico porque por de traz vão estar variais e arrays!

Movimentações dos Programas

Esta ainda é uma das partes em que ainda tenho dúvidas quanto ao seu funcionamento...

Existiram dois modos de movimentar os programas dentro das matrizes/vectores:

  • Terá um modo de movimento que denomino de Normal e funciona da seguinte forma:  O programa esta por exemplo na posição B5 de uma matriz de 20x20 e envia uma instrução ao simulador para ser passado para a posição L5, o programa passará por todas as posição (L6, L7, L10, etc) o que vai demorar algum tempo mas trará algumas vantagens
  • O segundo modo têm a vantagem de se poder enviar uma instrução que  indica ao simulador de quantas em quantas posições o programa quer andar, por exemplo se o programa estive-se na posição B5 e quisesse passar para a posição L5 poderia escolher que queria viajar de 3 em 3 posições e assim seria mais rápido, o numero de casas a saltar será limitado talvez num máximo de 3 ou 4 casas. Este modo é vantajoso mas poderá trazer algumas desvantagens como por exemplo o programa "cair em cima" de uma bomba, isto será explicado mais a frente

Estou a pensar também num modo tipo tele-transporte mas bastante limitado pois sem limitações o pessoal iria abusar e era difícil se apanhar um programa.

Como um programa irá ocupar várias posições (em linha) o programa poderá alterar a sua posição de vertical para horizontal e vice versa (o que irá demorar um ciclo)

Nesta imagem temos as varias posições que o programa pode tomar (Horizontal e Vertical).

posicoesprogramaca0.th.jpg

Bombas

Irá existir vários tipos de bombas. Um programa pode colocar uma bomba nas posições que ocupa de momento ou duas posições em seu redor:

areabombasnr8.th.jpg

A barra preta representa o programa e a linha preta em seu redor representa a área onde o programa pode colocar bombas.

Para evitar que o mapa fique "inundado" de bombas haverá um limite para cada jogador(limite calculado através do tamanho do mapa) e consoante o tipo de bombas terá um tempo de vida. As bombas não serão "amigas do dono" e como tal caso um coloque uma bomba numa determinada posição e depois vá passar por essa posição, sofrerá as consequências! Uma bomba terá 4 ciclos(ciclos e não segundos) de inactividade após ser colocada para dar tempo de fuga ao programa que a colocou. Quando uma bomba é rebentada por algum programa, é enviada uma mensagem com as coordenadas do local onde essa bomba rebentou. Uma bomba pode ser desactivada, esta operação demorará apenas um ciclo mas terá riscos pois ao ser desarmada uma bomba pode explodir, a decisão de a bomba explode ou não será feita aleatoriamente, caso a bomba expluda durante a desactivação o programa não sofre quais queres danos pois não esta em contacto com a bomba mas será enviada uma mensagem ao programa adversário de que uma bomba explodiu numas determinadas coordenadas. 

Lista com os Vários tipos de bombas:

  • Bomba de Contacto - Estas bombas explodem quando um programa entra na posição onde elas estão.
    • Tempo de vida de Quatro minutos
    • Numero de bombas limitado por jogador consoante o tamanho do mapa

    [*]Bomba N - O "N" (de Núcleo) no seu nome provem das suas características, esta bomba espera por um programa e depois mas não rebenta quando o programa entra em contacto com ela, esta bomba espera que o núcleo entre na sua posição e só ai ela explode arrasando com o programa uma vez que o núcleo não aguenta com uma explosão de uma bomba

    • Tempo de vida de dois minutos
    • Numero de bombas limitado por jogador consoante o tamanho do mapa

    [*]Bomba Pastilha - Esta bomba não explode, quando um programa entra numa posição onde se encontra uma bomba deste tipo esse programa vai ficar com mais uma secção o que quer dizer que vai ocupar mais uma posição, quanto mais posições ocupar maior será e ais vulnerável será mas por outro lado mais secções tem a proteger o seu núcleo. No entanto esta bomba depois activada têm também um tempo de vida.

    • Tempo de vida de cinco minutos
    • Numero de bombas limitado por jogador consoante o tamanho do mapa
    • Tempo de vida de sete minutos após ser activada

    [*]Bomba Espião - Com a característica de também não explodir, esta bomba não causa qualquer tipo de dano ao programa. Esta bomba espera por um programa e quando algum programa entra em contacto, é enviada uma mensagem ao outro programa com informações como as coordenadas e a direcção em que segue o programa detectado pela bomba sem que este se aperceba

    • Tempo de vida de cinco minutos
    • Numero de bombas limitado por jogador consoante o tamanho do mapa

    [*]Bomba M - Esta será a mãe (M) das bombas, é tipo uma evolução da Bomba de Contacto com mais potencia, quando um programa entra em contacto com uma bomba deste tipo duas secções serão destruídas e caso o núcleo seja apanhado... Devido ai seu poder o uso irá ser limitado.

    • Tempo de vida de 2 minutos
    • Numero de bombas limitado por jogador consoante o tamanho do mapa (ainda menos que as  anteriores)

Todos estes tempos e valores são imaginados por mim o que quer dizer que puderam ser alterados...

Rastreios

Os Rastreios são o modo como um programa pode saber o que se encontra em determinadas posições sem ter de la entrar, um rastreio demora um ciclo. Um programa pode rastrear uma posição que esteja até duas posições ao seu redor (como a colocação de bombas), o rastreio pode ser apenas de uma casa ou de várias dependendo da posição que se quer em relação á posição do programa. Se por exemplo o programa estiver na horizontal e a posição a rastrear estiver à frente ou atrás do programa então só rastreia uma posição mas se quiser rastrear uma posição que esta em cima ou em baixo irá rastrear todas as posições ao seu comprimento. Este é o rastreio normal, depois temos o Modulo de Espionagem que pode ser lançado por um programa, o programa principal pode dar até 3 pontos (x,y) ao Modulo de Espionagem que automaticamente percorrerá esse trajecto e enviará ao seu programa principal o que vai encontrando. O Modulo de Espionagem não possui qualquer modo de protecção contra bombas e ao entrar em contacto com uma bomba este será destruído. Ao ser lançado, o Modulo de Espionagem percorrerá nesse mesmo ciclo o trajecto ate ao primeiro ponto dado pelo programa principal, em cada ciclo o Modulo de Espionagem percorre o trajecto e um ponto ao outro e envia a informação ao seu programa principal. Cada programa terá apenas um Modulo de Espionagem para cada batalha e caso este seja destruído ficará sem Modulo de Espionagem. O Modulo de Espionagem terá como limitações apenas poder ser lançado de três em três minutos.Outro possível rastreio é quando uma bomba explode porque é enviada uma mensagem a um dos programas.

Quando um programa envia uma instrução inválida durante o seu ciclo perderá a sua vez e passará ao próximo ciclo.

Para quem tiver paciência para ler isto e estiver interessado penso que fica com uma boa ideia do que vai ser este projecto  ;)

Espero as vossas sugestões/ideias/criticas caso as haja :D

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim uma pessoa já fica com a ideia do que queres fazer ! Esta cena de por bombas e saltar ;) há que por isto sobre rodas  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já há modificações e novas ideias, dentro de pouco tempo serão reveladas  :thumbsup:

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom a ideia pareceu-me altamente, já tenho uma sugestão de nome e tudo.

Bomberbots Battle

Poderia ser criado um Bomberbot championship onde os bots dos diferentes jogadores iriam combater entre si.

Como se iria processar ?


- Cada jogador iria criar o seu Bot e inscrever o mesmo

- Os bots não poderiam ser alterados no decorrer do campeonato

- O sistema de pontuãção ainda não tenho definido, mas talvez seja tipo campeonato de futebol

- As "jornadas" teriam prazos para serem realizadas, a não realização de um combate dentro do prazo sera considerada derrota

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só discordo disto:

"- Os bots não poderiam ser alterados no decorrer do campeonato"

;)

Mas não estremos a meter a carroça á frente dos bois? :S?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só tenho uma pergunta como é suposto fazermos os programas escolherem o que querem fazer?

Usando arbitrariedade?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os criterios e a forma de processar a AI ´deverão ser indicados em tempo oportuno, isto ainda esta em fase de recolha de sugestões e opiniões !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas....

Actualmente estou ainda a pensar como fazer o motor de tudo isto e definir como tudo vai funcionar ou seja, fazer as bases. Ainda não estou muito preocupado com essas coisas, no entanto é sempre bom ler essas sugestões porque podem sempre surgir ideias porreiras para quando for tempo dessa parte  :D

Em ralação a esta  regra:

Os bots não poderiam ser alterados no decorrer do campeonato

Não acho que seja necessário, ate nos campeonatos WRC o pessoal pode fazer alterações durante os GP  :P e acho que seria complicado controlar isso, porque como é online torna-se muito complicado saber se ha ou não alterações.

Só tenho uma pergunta como é suposto fazermos os programas escolherem o que querem fazer?

Usando arbitrariedade?

Isso serão os programadores que vão decidir!! Tanto podes fazer um programa que se mova arbitrariamente de umas posições para as outras e vá colocando bombas como podes dar tipo inteligência ao teu programa! Depois de mais uma conversa com o shumy surgiram novas ideias que na nossa opinião vão melhorar bastante alguns aspectos. Umas das grandes alterações vai ser nos mapas em que serão como labirintos e depois os programas terão funcionalidades tipo sensores e atravez desses sensores poderão saber onde ha paredes etc, etc.... Depois Explicarei melhor esta situação :D

Para o caso de surgirem duvidas sobre este assunto eu vou já esclarecer. Para dar suporte será colocado online um site onde estarão todas as informações técnicas e todos os dados necessários para que qualquer programador saiba com o que pode contar inclusive códigos fonte de exemplos de várias funcionalidades para quem quer começar. Porque este projecto será online e nem todos os programadores sabem trabalhar com SOCKS, serão feitos módulos em várias linguagens de programação que facilitarão a tarefa de  comunicação com o simulador.

Algumas dúvidas... é só perguntar, e escusado será dizer, se tiverem Sugestões/ideias/criticas não hesitem em postar  ;)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites