#876 Le 19/10/2011, à 20:26
- valAa
Re : /* Topic des codeurs [6] */
C'est du polymorphisme.
Si ton vecteur stocke des pointeurs sur des Attaquant, et que ta fonction attaquer() de Attaquant est virtuelle (éventuellement pure), et que des pointeurs sur Attaquant ont été initialisés sur le tas comme des AttaquantA, AttaquantB... ça fonctionnera.
Code non testé, je dis pas que j'ai pas introduits quelques bugs d'inattention.
#include <iostream>
#include <vector>
class Attaquant
{
public:
virtual void attaquer() = 0;
};
class AttaquantA : public Attaquant
{
public:
virtual void attaquer() { std::cout << "A!!" << std::endl; }
};
class AttaquantB : public Attaquant
{
public:
virtual void attaquer() { std::cout << "B!!" << std::endl; }
};
int main(void)
{
std::vector<Attaquant*> liste_attaquants;
Attaquant* a = new AttaquantA;
liste_attaquants.push_back(a);
Attaquant* b = new AttaquantB;
liste_attaquants.push_back(b);
liste_attaquants[0]->attaquer();
liste_attaquants[1]->attaquer();
delete a;
delete b;
return 0;
}
edit: c'est dans tout bon FM
Dernière modification par valAa (Le 19/10/2011, à 20:42)
Hors ligne
#877 Le 19/10/2011, à 20:50
- kamui57
Re : /* Topic des codeurs [6] */
Ras : quand est ce que tu te mets à bosser le php plutôt que de demander à la pôvre kamui ?
ça me dérange pas perso
ras' j't'ai envoyé une archive par mail tu l'as reçue ? les corrections sont inclues dedans
jvienstout de me rendre compte que je croyais que le net coupait alors que en me déconnectant/reconnectant avec network manager ça remarche. ça fait déjà pas mal de fois... et c'est pas aussi facile que sous ubuntu de lancer le noyau précédent. Évidemment jme rappelle plus quand ça a commencé. Verrai ça demain.
ah jt'avais pas vu valAa
helly : c'est grâce au polymorphisme expliqué ici en gros http://sebsauvage.net/comprendre/objet/ … itage.html
et ici des exemples
http://cpp.developpez.com/cours/polyCpp/#LIV-F
http://cpp.developpez.com/cours/cpp-objet/#LIV-D
(pas lu, jsais pas si c'est un bon cours ou pas)
Dernière modification par kamui57 (Le 19/10/2011, à 20:51)
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas (proverbe indien)
Toshiba Satellite L655 4 Go RAM, Archlinux Gnome-shell,LXDE / W7
Toshiba Satellite M30 512 Mo RAM, Archlinux Gnome 3 restreint / Crunchbang LXDE
https://help.ubuntu.com/community/Pastebinit pour poster du texte sur internet en console
Hors ligne
#878 Le 19/10/2011, à 20:58
- helly
Re : /* Topic des codeurs [6] */
C'est du polymorphisme.
Si ton vecteur stocke des pointeurs sur des Attaquant, et que ta fonction attaquer() de Attaquant est virtuelle (éventuellement pure), et que des pointeurs sur Attaquant ont été initialisés sur le tas comme des AttaquantA, AttaquantB... ça fonctionnera.Code non testé, je dis pas que j'ai pas introduits quelques bugs d'inattention.
#include <iostream> #include <vector> class Attaquant { public: virtual void attaquer() = 0; }; class AttaquantA : public Attaquant { public: virtual void attaquer() { std::cout << "A!!" << std::endl; } }; class AttaquantB : public Attaquant { public: virtual void attaquer() { std::cout << "B!!" << std::endl; } }; int main(void) { std::vector<Attaquant*> liste_attaquants; Attaquant* a = new AttaquantA; liste_attaquants.push_back(a); Attaquant* b = new AttaquantB; liste_attaquants.push_back(b); liste_attaquants[0]->attaquer(); liste_attaquants[1]->attaquer(); delete a; delete b; return 0; }
edit: c'est dans tout bon FM
Un vecteur de pointeurs ?
Désolé, mais berk .
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#879 Le 19/10/2011, à 21:04
- The Uploader
Re : /* Topic des codeurs [6] */
Ben t'es obligé d'utiliser des pointeurs si tu veux utiliser l'instanciation dynamique.
Dernière modification par The Uploader (Le 19/10/2011, à 21:05)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#880 Le 19/10/2011, à 21:05
- valAa
Re : /* Topic des codeurs [6] */
Un vecteur de pointeurs ?
Désolé, mais berk .
Et ben désolé de te faire beurker, mais si t'arrives à faire du polymorphisme d'inclusion dans un std::vector sans pointeurs, je crois que ça va intéresser du monde.
Le polymorphisme d'inclusion est possible avec des références, mais ça passera pas dans un std::vector qui a besoin d'objets copiables et affectables.
Pour différencier le type statique (connu à la compilation) du type dynamique (connu à l'exécution) il faut bien manipuler des adresses.
Tu peux aussi revoir ta conception, abandonner l'héritage et faire du polymorphisme paramétré à coups de templates (mais alors le type des objets à manipuler devra être connu à la compilation).
edit: et je vais insister un peu, mais sans parler de polymorphisme, si tu trouves qu'un pointeur de vecteurs c'est beurk, tu vas être bien embếté sur un vecteur de classes complexes, lorsque tu voudras économiser un peu les copies.
Dernière modification par valAa (Le 19/10/2011, à 21:13)
Hors ligne
#881 Le 19/10/2011, à 21:11
- tshirtman
Re : /* Topic des codeurs [6] */
du C++? beurk!
Hors ligne
#882 Le 19/10/2011, à 21:12
- The Uploader
Re : /* Topic des codeurs [6] */
+1, vive Ruby!
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#883 Le 19/10/2011, à 21:16
- valAa
Re : /* Topic des codeurs [6] */
du C++? beurk!
Je suis d'accord, quand tu vois le code C++ qu'il faut se taper pour émuler un semblant de duck typing... vive python
Hors ligne
#884 Le 19/10/2011, à 21:20
- sweetly
Re : /* Topic des codeurs [6] */
Un vecteur de pointeurs ?
Désolé, mais berk .
Comme quoi, apprendre les concepts avant (ou au pire en même temps que) un langage peut avoir du sens...
Ah et sinon, pour le duck typing, c'est juste que les pythonneurs pythonics sont aussi des ornithologues de renommées mondiales. Tous. Sans exception. Donc C'EST un canard.
Hors ligne
#885 Le 19/10/2011, à 21:21
- tshirtman
Hors ligne
#886 Le 19/10/2011, à 21:32
- grim7reaper
Re : /* Topic des codeurs [6] */
Un vecteur de pointeurs ?
Yep, pas le choix :
- par valeur => tu es victime du slicing ;
- par référence => pas possible car std::vector doit implémenter le concept DefaultConstructible (entres autres, mais là c’est celui-là qui t’empêche de bosser avec des références) ;
- par pointeur => OK.
Désolé, mais berk .
+1, beurk.
Les pointeurs intelligents c’est mieux :]
Hors ligne
#887 Le 19/10/2011, à 21:41
- The Uploader
Re : /* Topic des codeurs [6] */
auto_ptr ?
sinon (gauge) :
module Gauge
module Events
class DrawMe
end
class Update
def initialize(seconds_passed)
@seconds_passed = seconds_passed
end
end
end
end
def update
@event_queue.each do |event|
case event
when Rubygame::Events::QuitRequested
Rubygame.quit
exit
else
@obs_queue.push(Gauge::Events::Update.new(@clock.tick().seconds)) #custom event super important!
@obs_queue.push(event)
end
end
end
Bientôt un MenuManager!
J'ai aussi du code XNA Framework v4 (C#) et ActionScript 3, mais j'ai pas envie de les poster..
Dernière modification par The Uploader (Le 19/10/2011, à 21:54)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#888 Le 19/10/2011, à 21:43
- grim7reaper
Re : /* Topic des codeurs [6] */
auto_ptr ?
Non, eux ils sont trop délicats à bien utiliser.
Faut prendre ceux de C++0x (ou boost si on reste en C++03).
Hors ligne
#889 Le 19/10/2011, à 21:46
- The Uploader
Re : /* Topic des codeurs [6] */
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#891 Le 19/10/2011, à 22:08
- helly
Re : /* Topic des codeurs [6] */
@VaAla :
Ha zut, Bjarn est du même avis :þ.
Merci alors !!
Et excuse pour le beurk ^^
Dernière modification par helly (Le 19/10/2011, à 22:12)
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#892 Le 19/10/2011, à 22:11
- grim7reaper
Re : /* Topic des codeurs [6] */
Ha zut, Bjarn est du même avis :þ.
Sur quoi : l’obligation de passer par des pointeurs et/ou d’utiliser les pointeurs intelligents ?
Hors ligne
#893 Le 19/10/2011, à 22:14
- helly
Re : /* Topic des codeurs [6] */
Sur l’obligation de passer par les pointeurs.
Il parle pas des pointeurs intelligents, mais je vais creuser ça demain .
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#894 Le 20/10/2011, à 06:37
- Ras'
Re : /* Topic des codeurs [6] */
Ras : quand est ce que tu te mets à bosser le php plutôt que de demander à la pôvre kamui ?
Mais il m'faut une excuse pour parler avec des filles moi ! C'est une super excuse de d'mander de l'aide sur du code !
Pi ce s'ra trop la classe quand j'dirais à mes drôles : « Vot' mère, j'l'ai rencontrée en lui demandant un script php sur le TdCCT. Ouaip, carrément »
J'ai reçu ton archive kamui ❤
Dernière modification par Ras' (Le 20/10/2011, à 06:41)
Va t'faire shampouiner par le compteur_V2 en timezone[Canada/Eastern] !
Les types awesome n'ont rien à prouver. À personne.
'k bye là
Hors ligne
#895 Le 20/10/2011, à 06:47
- The Uploader
Re : /* Topic des codeurs [6] */
Hum.. vite du code...
Tiens, voilà le code de la classe "Camera" du TP de 3D avec le XNA Framework 4 (oui le XNA n'a pas de classe caméra, mais ça se fait très vite avec ce qu'il apporte par ailleurs) :
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace TP2
{
/// <summary>
/// This is a game component that implements IUpdateable.
/// </summary>
public class Camera : Microsoft.Xna.Framework.GameComponent
{
Matrix m_Transform;
float m_Yaw;
float m_Pitch;
float m_Roll;
float m_Near;
float m_Far;
float m_Fov;
Matrix m_View;
Matrix m_Projection;
MouseState m_MouseState;
MouseState m_LastMouseState;
public Camera(Game game)
: base(game)
{
// TODO: Construct any child components here
m_Transform = Matrix.CreateTranslation(Vector3.One);
m_Yaw = MathHelper.PiOver4;
m_Pitch = -MathHelper.PiOver4;
m_Roll = 0;
m_View = Matrix.CreateLookAt(m_Transform.Translation, m_Transform.Translation + m_Transform.Forward, m_Transform.Up);
m_Near = 0.1f;
m_Far = 100;
m_Fov = MathHelper.ToRadians(60.0f);
m_MouseState = Mouse.GetState();
m_LastMouseState = Mouse.GetState();
}
/// <summary>
/// Allows the game component to perform any initialization it needs to before starting
/// to run. This is where it can query for any required services and load content.
/// </summary>
public override void Initialize()
{
// TODO: Add your initialization code here
base.Initialize();
}
/// <summary>
/// Allows the game component to update itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
public override void Update(GameTime gameTime)
{
// TODO: Add your update code here
Vector2 l_LeftStick;
Vector2 l_RightStick;
m_LastMouseState = m_MouseState;
m_MouseState = Mouse.GetState();
l_LeftStick = Vector2.Zero;
l_RightStick = Vector2.Zero;
float l_Dt = (float)gameTime.ElapsedGameTime.TotalSeconds;
if (GamePad.GetState(PlayerIndex.One).IsConnected)
{
l_LeftStick = GamePad.GetState(PlayerIndex.One).ThumbSticks.Left;
l_RightStick = GamePad.GetState(PlayerIndex.One).ThumbSticks.Right;
m_Roll += GamePad.GetState(PlayerIndex.One).Triggers.Left * l_Dt;
m_Roll -= GamePad.GetState(PlayerIndex.One).Triggers.Right * l_Dt;
}
else
{
l_LeftStick = Vector2.Zero;
l_RightStick = Vector2.Zero;
if (Keyboard.GetState().IsKeyDown(Keys.Z))
{
l_LeftStick.Y = 1;
}
if (Keyboard.GetState().IsKeyDown(Keys.S))
{
l_LeftStick.Y = -1;
}
if (Keyboard.GetState().IsKeyDown(Keys.Q))
{
l_LeftStick.X = -1;
}
if (Keyboard.GetState().IsKeyDown(Keys.D))
{
l_LeftStick.X = 1;
}
if (m_MouseState.RightButton == ButtonState.Pressed)
{
l_RightStick.X = -(m_LastMouseState.X - m_MouseState.X);
l_RightStick.Y = m_LastMouseState.Y - m_MouseState.Y;
}
//m_Fov += m_MouseState.ScrollWheelValue * 0.0001f;
/*if(Keyboard.GetState().IsKeyDown(Keys.Right))
{
m_Roll -= l_Dt;
}
if (Keyboard.GetState().IsKeyDown(Keys.Left))
{
m_Roll += l_Dt;
}*/
}
m_Yaw += -l_RightStick.X * l_Dt;
m_Pitch += l_RightStick.Y * l_Dt;
while (m_Yaw >= MathHelper.TwoPi)
{
m_Yaw -= MathHelper.TwoPi;
}
while (m_Yaw <= -MathHelper.TwoPi)
{
m_Yaw += MathHelper.TwoPi;
}
while (m_Pitch >= MathHelper.TwoPi)
{
m_Pitch -= MathHelper.TwoPi;
}
while (m_Pitch <= -MathHelper.TwoPi)
{
m_Pitch += MathHelper.TwoPi;
}
Quaternion l_Rotation = Quaternion.CreateFromYawPitchRoll(m_Yaw, m_Pitch, m_Roll);
l_Rotation.Normalize();
Vector3 l_Position = m_Transform.Translation;
Vector3 l_Direction = m_Transform.Forward;
Vector3 l_Right = m_Transform.Right;
l_Position += l_Dt * 5.0f * l_Direction * l_LeftStick.Y;
l_Position += l_Dt * 5.0f * l_Right * l_LeftStick.X;
//m_Transform.Translation = Vector3.Zero;
m_Transform = Matrix.CreateFromQuaternion(l_Rotation);
m_Transform.Translation = l_Position;
m_View = Matrix.CreateLookAt(m_Transform.Translation, m_Transform.Translation + m_Transform.Forward, m_Transform.Up);
m_Projection = Matrix.CreatePerspectiveFieldOfView(m_Fov, 4.0f / 3.0f, m_Near, m_Far);
base.Update(gameTime);
}
public Matrix view
{
get
{
return m_View;
}
}
public Matrix projection
{
get
{
return m_Projection;
}
}
public Vector3 direction
{
get
{
return m_Transform.Forward;
}
}
}
}
C'est le code de mon prof de 3D, hein. Moi j'étais arrivé uniquement à ce qu'elle démarre fixée sur l'horizon, et qu'elle se déplace sans pouvoir changer son point de vue (gauche, droite, en avant, en arrière). Avec beaucoup d'aide du prof. Mais j'en étais fier. :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace TP2
{
class Camera : GameComponent
{
Matrix transform;
public Matrix view;
public Matrix projection;
public Vector2 l_LeftStick, l_RightStick;
public Vector3 pos;
public Vector3 at;
public Camera(Game game) : base(game)
{
pos = Vector3.UnitY * 10;
at = pos + Vector3.Forward;
view = Matrix.CreateLookAt(pos, at, Vector3.Up);
projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(60.0f), 16.0f/10f, 0.1f, 100.0f);
}
public override void Update(GameTime gameTime)
{
l_LeftStick = Vector2.Zero;
l_RightStick = Vector2.Zero;
Vector3 direction = at - pos;
direction.Normalize():
if (Keyboard.GetState().IsKeyDown(Keys.Z))
pos += direction;
if (Keyboard.GetState().IsKeyDown(Keys.S))
pos -= direction;
if (Keyboard.GetState().IsKeyDown(Keys.Q))
pos.X -= 1;
//Vector3 vOut = new Vector3();
//Vector3 vUp = Vector3.Up;
//Vector3.Cross(ref direction, ref vUp, out vOut);
//pos = vOut;
if (Keyboard.GetState().IsKeyDown(Keys.D))
pos.X += 1;
at = pos + direction;
view = Matrix.CreateLookAt(pos, at, Vector3.Up);
base.Update(gameTime);
}
}
}
Dernière modification par The Uploader (Le 20/10/2011, à 06:50)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#896 Le 20/10/2011, à 09:29
- valAa
Re : /* Topic des codeurs [6] */
@VaAla :
Ha zut, Bjarn est du même avis :þ.
Merci alors !!
Et excuse pour le beurk ^^
Ah mais je t'en prie pas de soucis.
Et je plussoie grim', tu gagneras à utiliser des pointeurs encapsulés intelligents.
Hors ligne
#897 Le 20/10/2011, à 09:47
- helly
Re : /* Topic des codeurs [6] */
Allé, /me met du pointeur intelligent dans ses mielpops !
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#898 Le 20/10/2011, à 09:51
- HP
Re : /* Topic des codeurs [6] */
#!/usr/bin/env sh
git_path="./$(git rev-parse --show-cdup)" && {
ruby -W0 -C "${git_path}" \
"$(which bundle)" exec rspec -c "spec/"${1}
}
cat /dev/urandom >/dev/null 2>&1 #github
En ligne
#899 Le 20/10/2011, à 09:55
- helly
Re : /* Topic des codeurs [6] */
/me tapote la tête de HP.
C’est bien, c’est bien .
edit : ortho. (pourquoi je met toujours 2 « p » à « taper » ?)
Dernière modification par helly (Le 20/10/2011, à 09:56)
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#900 Le 20/10/2011, à 09:55
- HP
Re : /* Topic des codeurs [6] */
/me tapote la tienne aussi
cat /dev/urandom >/dev/null 2>&1 #github
En ligne