Nous sommes actuellement le 23 Mai 2013, 23:31

Règles du forum


Avant de poser votre question, commencez par faire une recherche sur le forum.
Nous mettons également à votre disposition un dictionnaire et une FAQ.
Pour éviter toute censure ou fermeture de votre topic, veuillez lire les règles en vigueur et le rappel lié au piratage.



Publier un nouveau sujet Répondre au sujet
 [LUA] Créer une IA basique, mais complète ! 
Auteur Message
PSP expert
PSP expert
Avatar de l’utilisateur

Messages: 449
Message [LUA] Créer une IA basique, mais complète !
J'avais besoin de réaliser une IA, pour mon jeu. Je ne savais pas du tout comment procéder. J'ai cherchée des tutos... Pas trouvée.
Mis à part un tuto sur la fonction math.random()

J'ai donc fait un petit programme pour me familiariser avec, j'ai finalement compris comment ça marche. Enfaite, c'est pas bien compliquée, sa prend juste un peu de temps....
Trêve de Bavardages, voilà donc un sample de mon petit programme.
Enfaite, on contrôle un Carre Blanc qui ce promène comme il veut, dans n'importe quel ions.

Mais un méchant Carrée Bleu,viens vous embêter et vous empêche de terminer votre jolie promenade. Le carre Blanc devra donc fuir ou partir, mais rien à faire.
Non seulement, il vous suit par tout et vous pousse mais en plus, il vous empêche de passer !
(J'ai tout de même fait en sorte qu'il y ai un angle mort pour passer).

Voilà le code largement commentée, je n'ai rien à ajouter ^^

--------------------------------


Code :
-- On cree une Couleur et On charge les Ressource necessaire

local bleu = Color.new(0,0,255)

carre = Image.createEmpty(32,32) -- on crée un carre
carre:clear(bleu) -- on lui donne une couleur

parre = Image.createEmpty(29,29) -- on crée un autre carre 
parre:clear(Color.new(255,255,255)) -- on lui donne une couleur

Parre = {x=10,y=100} -- On donne des Coordonees (X,Y) au Carre 
Carre = {x=280,y=100} -- On donne des Coordonees (X,Y) au Carre

parre_statut = "Nil" -- Etat du petitCarre
carre_statut = {1,2,3,4,5} -- Tableau pour Etat du Carre

function IA(carre) --On Cree une fonction IA, pour le carre
if carre_statut == 1 or carre_statut == 2 or carre_statut == 3 or carre_statut == 4 then -- Etat du Carre renvoie 1 ou 2,3 ou 4
   carre:clear(bleu) -- on lui donne une couleur 
   carre_statut = "Nile" -- Etat du Carre = nil
end
   
if carre_statut == 5 then -- Etat du Carre renvoie 5 
   carre:clear(Color.new(255,0,0)) -- on lui donne une couleur 
   carre_statut = "Rush" -- Etat du Carre = Rush
end

if Carre.x > Parre.x + parre:width() and Parre.x >= 35 then -- Si le Carre est superieur au miniCarre + sa longueur et que la position du Minicarre est superieur a 35
  carre_statut = math.random(1,5) -- 1 chance sur 5 que Carre soit en Mode Rush
end

if Carre.x > Parre.x + parre:width() and Parre.x >= 65 then -- Si le Carre est superieur au miniCarre + sa longueur et que la position du Minicarre est superieur a 35
  carre_statut = 5
end

if Carre.x < Parre.x + parre:width() and Parre.x >= 35 then -- Si le Carre est superieur au miniCarre + sa longueur et que la position du Minicarre est superieur a 35
  carre_statut = 1
end

if Carre.x < Parre.x + parre:width() and Parre.x >= 65 then -- Si le Carre est superieur au miniCarre + sa longueur et que la position du Minicarre est superieur a 35
  carre_statut = 1
end

if Carre.x > Parre.x + parre:width() and Parre.x >= 150 then
   carre_statut = 2
end

  if Carre.x > Parre.x + parre:width() and Parre.x >= 200 then
   carre_statut = 5
end

  if Carre.x < Parre.x + parre:width() and Parre.x >= 150 then
   carre_statut = 5
end

  if Carre.x < Parre.x + parre:width() and Parre.x >= 200 then
   carre_statut = 2
end


if Carre.x == Parre.x + parre:width() and carre_statut == "Rush" then
   Parre.x = Parre.x -55
end     
   
-- Si la position du Carre (en x) est superieur a Position du mini Carre + (sa longueur) +10
if Carre.x > Parre.x + parre:width() +10 then
   Carre.x = Carre.x -1
end
-- Si la position du Carre (en x) est inferieur a Position du mini Carre + (sa longueur) +10
  if Carre.x < Parre.x + parre:width() +10 then
   Carre.x = Carre.x +1
end

-- Si la position du Carre (en y) est superieur a Position du mini Carre + (sa hauteur) +5
  if Carre.y + carre:height() > Parre.y +5 then
   Carre.y = Carre.y -2
end
-- Si la position du Carre (en y) est inferieur a Position du mini Carre + (sa longueur) +5
  if Carre.y + carre:height() < Parre.y + carre:height() +5 then
   Carre.y = Carre.y +2
end
end -- Libre a vous de modifier les valeurs et/ou changer les statut
-- Dans la fonction (plus haut), Le carre fera en sorte de vous empecher de passer.
   -- L'IA Programmer repond a ce besoin
      -- Oui Pas plus compliquer que ca <img src="./images/smilies/smile.gif" alt=":)" title="Souris" />

function Collision()
if parre_statut == "Attack" then -- Si l'etat du Carre est Attack
   parre:clear(Color.new(2,255,2)) -- on lui donne une couleur
end

if parre_statut == "Nil" then -- Si l'etat du Carre est Nil (Rien) 
   parre:clear(Color.new(255,255,255)) -- on lui donne une couleur
end

-- Si la position du MiniCarre + sa longueur est egale a Carre.x et que l'etat du miniCarre est Attack
if Parre.x + parre:width() == Carre.x and parre_statut == "Attack" then
   Carre.x = Carre.x +5

-- Sinon si la position du MiniCarre + sa longueur est egale a Carre.x et que l'etat du miniCarre est Nil
elseif Parre.x + parre:width() == Carre.x and Carre.y < Parre.y and parre_statut == "Nil" then
Parre.x = oldx -- Reste bloquee a sa derniere position
elseif Parre.x == Carre.x + carre:width() and parre_statut == "Nil" then
Carre.x = Oldx -- Reste bloquee a sa derniere position
Parre.x = oldx -- Reste bloquee a sa derniere position
end -- Oui, les Collision sont pas precise au pixel pres, mais le but n'est pas d'avoir des Collision parfaite
end


function Bouger()
if pad:cross() and not oldpad:cross() then -- Si on appuie sur X     
parre_statut = "Attack" -- L'Etat du petit Carre passe a Attack
   else -- Sinon, si X n'est pas presser
  parre_statut = "Nil" -- Etat du petitCarre est Nil (Rien)
end

if pad:right() then -- Si on appuie sur Droite
   Parre.x = Parre.x +2
end

  if pad:left() then -- Si on appuie sur Gauche
   Parre.x = Parre.x -2
end

  if pad:up() then -- Si on appuie sur Haut
   Parre.y = Parre.y -2
end

  if pad:down() then -- Si on appuie sur Bas
   Parre.y = Parre.y +2
end
end

while true do -- Tant que le Code est Vrai
  screen:clear() -- On efface l'ecran
  pad = Controls.read() -- On initialise les touches
   screen:blit(Carre.x,Carre.y,carre) -- On affiche Carre plus sa position qui Change
   screen:blit(Parre.x,Parre.y,parre) -- On affiche Carre plus sa position qui Change 
   screen:print(55,55,parre_statut,bleu) -- On print la variable parre_statut, pour savoir quel est le statut actuel de parre
   screen:print(55,15,Parre.x,bleu) -- On print la variable Parre.x pour savoir la position actuelle de Parre

IA(carre) -- On appelle la fonction IA pour (carre)
Bouger(parre) -- On appelle la fonction Bouger pour miinCarre
Collision() -- Fonction Collision pour les 2 carre


if Controls.read():select() then
break
end 

screen.waitVblankStart() 
screen.flip()
oldx = Parre.x -- Pour les Collision
Oldx = Carre.x -- Idem
oldpad = pad -- On declare oldpad
end -- Ferme la Boucle

-- Dans ce Code on utilise math.random(). Cette fonction mathematique
-- Retourne un nombre aleatoire: math.random(Nbre_minimum,Nbre_maximum)
-- A vous d'adapter ceci pour votre propre code.
-- Sachant que ce code est complet pour une IA de Base
-- A vos Claviers !




Note: Pour une Coloration Syntaxique aller ici:
http://www.xtreamlua.com/forums/viewtop ... =95&t=6690

_________________
Projet: Gakuseï[DISPONIBLE]
gakusei-apprenez-le-japonais-en-simplicite-t229483.html

Kingdom Hearts: Nemcko[En cours]


Dernière édition par zstan le 09 Juin 2011, 13:58, édité 1 fois.

04 Juin 2011, 17:41
Profil Site internet
publicité
PSP expert
PSP expert
Avatar de l’utilisateur

Messages: 327
Localisation: derriere toi
Message Re: [LUA] Créer une IA basique, mais complète !
Mais ton code entre les balise [code][/code] :wink:

Mais c'est vrai que math:random() peut être utile pour faire une IA ^^

_________________
Image


07 Juin 2011, 01:42
Profil
PSP silver
PSP silver
Avatar de l’utilisateur

Messages: 2810
Message Re: [LUA] Créer une IA basique, mais complète !
j'appel pas trop ça un tuto mais un code d'exemple ^^

_________________
Deux personnes me sourient toujours : mon banquier, mon joaillier


07 Juin 2011, 13:28
Profil Site internet
PSP newbie

Messages: 1
Message Re: [LUA] Créer une IA basique, mais complète !
Bonjour je voudrais savoir est-ce que je peut utiliser ton code pour un exercice au lycée pour les TPE ?
Sinon peut-tu me briefer sur la programm' d'une IA
Merci d'avance


06 Oct 2011, 16:58
Profil
PSP addict
PSP addict
Avatar de l’utilisateur

Messages: 103
Localisation: Derrière l'ordi!!!
Message Re: [LUA] Créer une IA basique, mais complète !
Je n'arrive pas a le modifier pour pouvoir l'intégrer dans mon Pac-Man Version SCREAM

_________________
Artiste du mois de Décembre 2011
Arropsy1-Création


15 Oct 2011, 16:52
Profil Site internet
Dev
Avatar de l’utilisateur

Messages: 262
Message Re: [LUA] Créer une IA basique, mais complète !
Bon désolé je suis en retard mais bon.
pour modifier il faut mettre carre = Image.load("Tonimage.png")
*fait le fier =)* et il faut que tu retire la couleur des blocks.

_________________
Fondateur de la team Zenyth
Notre site: http://team-zenyth.zz.mu/


04 Mai 2012, 12:35
Profil
publicité
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  

Actualité PSP

Exploitez votre PSP

Aide et information

Nos partenaires