Posted By

Oriontis on 09/21/18


Tagged

lua MTA


Versions (?)

Who likes this?

1 person have marked this snippet as a favorite

zarck


Simple IA Technique


 / Published in: Lua
 

On this resource, i show one of the ways to create an Simple IA that does whatever you want it to do.

It is in Portuguese, but as this is not my last. I'll keep improving the techniques to suit more and more Lua's newcomers.

  1. --[[
  2.  
  3. Suponhamos que queira construir uma simples AI para seu jogo de luta...
  4. Mas como começar à desenvolver a ideia?
  5.  
  6. Irei demonstrar a minha visão de tal assunto abaixo usando Lua.
  7.  
  8. ]]--
  9. function ExemploAI()
  10. -- Facilitaria muito se a possibilidade de utilizar Integers como Strings fosse possível sem a necessidade de uma conversão em si.
  11. -- Logo, a seguinte operação se tornaria inválida:
  12.  
  13. 1 = "atacar"
  14.  
  15. -- Mas onde uma simples mudança faria diferença?
  16. -- Demonstrarei no exemplo abaixo:
  17.  
  18. 0 = "Defender"
  19. 1 = "Atacar"
  20. stt = math.random(0,1)
  21.  
  22. if stt == 1 then
  23. print(0)
  24. end
  25.  
  26. -- Isso, supondo que nossa IA fosse especial e estivesse atacando à si mesma.
  27. -- Por fim. Seria sim muito útil, tornaria este "Tutorial" ainda mais simples.
  28. -- Mas como nem tudo é um mar de rosas. Bora programar!
  29. end
  30.  
  31. -- Começaremos à fazer a IA de verdade agora, mas antes precisamos criar um conceito do que seria uma IA...
  32. -- No nosso exemplo, ela receberá um comando(Input) e deverá responder com outro comando(Output).
  33. -- Ou seja. Se ela for atacada, ela deverá defender... Simples, não?
  34. -- Mas sejamos um pouco mais ambiciosos e miremos em qualidade. Por mais simples que seja nosso projeto.
  35. -- Vou usar Lua pela didática, mas como não vou focar no código em sim. Entenda que tudo descrito aqui, poderá ser reproduzido em qualquer outra linguagem.
  36.  
  37. function AI1()
  38. -- Para não termos de criar duas instâncias do nosso código. Deixemos a parte interativa nesta mesma função.
  39.  
  40. --Interativo<
  41. a = "Ataque"
  42. b = "Defesa"
  43. c = "Counter"
  44. se = math.random(1,3)
  45. --Interativo>
  46. -- Com as nossas Variáveis já setadas, podemos começar.
  47.  
  48. if se == 1 then -- A Var "se" age como o nosso Input, enquanto utilizo Print como nosso Output.
  49. print(b)
  50. if se == 2 then
  51. print(a)
  52. -- Mas ficou simples demais.
  53. -- Uma IA tão linear assim não é boa para um jogo de luta...
  54. -- Façamos algumas modificações, para dar um pouco de "vida" ào nosso pequeno bot.
  55.  
  56. -- Então ignoremos o código acima e façamos um novo e melhorado...
  57. --Interativo2<
  58. a = "Ataque"
  59. b = "Defesa"
  60. c = "Counter"
  61. se = math.random(1,3)
  62. no = "Ficar parado"
  63. --Interativo2>
  64.  
  65. de = math.random(1,2)
  66. if se == 1 then
  67. if de == 1 then
  68. print(c)
  69. else
  70. print(b)
  71. end
  72. end
  73.  
  74. if se == 2 then
  75. if de == 1 then
  76. print(a)
  77. else
  78. print(no)
  79. end
  80. end
  81.  
  82. -- E dessa forma, podemos indicar a nossa IA para que decida se vai defender, ou atacar. Podendo até mesmo contra-atacar.
  83. -- Mas claro que isso é muito simplório e deve ser levado apenas como uma visão/conceito, do que regra.
  84. -- Abaixo, deixarei esta versão utilizável do código... E use como quiser, pois não sou pseudo-programador fresquinho que bota Copyright em texto. Não ligo pra crédito.
  85.  
  86.  
  87.  
  88. end
  89. end
  90. end
  91.  
  92.  
  93. function IA()
  94. a = "Ataque"
  95. b = "Defesa"
  96. c = "Counter"
  97. se = math.random(1,3)
  98. no = "Ficar parado"
  99.  
  100.  
  101. de = math.random(1,2)
  102. if se == 1 then
  103. if de == 1 then
  104. print(c)
  105. else
  106. print(b)
  107. end
  108. end
  109.  
  110. if se == 2 then
  111. if de == 1 then
  112. print(a)
  113. else
  114. print(no)
  115. end
  116. end
  117. end

Report this snippet  

You need to login to post a comment.