Variable de type octet et comparaison par bit

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
aVe
Messages : 49
Inscription : 26 Nov 2009 11:49
Localisation : Lyon
Contact :

Variable de type octet et comparaison par bit

Message par aVe » 19 Jan 2016 13:04

Bonjour !
Toujours sur le projet de version numérique de jeu de plateau.
J'ai plusieurs cases qui ont des statuts différents : elles peuvent être accessibles / inaccessibles ; occupées avec un ou plusieurs pions chacun de couleur différente.
J'aimerai stocker le statut de chaque case sous forme d'octet, pour ensuite prendre des décisions par rapport à la valeur d'un bit en particulier, tout en la modifiant en fonction de l'évolution du jeu..
Pour l'instant la seule piste est de stocker un entier (genre : 1, 2, 4 ou 1, 10, 100) et ensuite comparer cette valeur à une valeur référence, mais je pense qu'utiliser un octet et des méthodes de comparaison de bit plus efficace. Vous savez si c'est possible ? Ou bien je continue avec mes entiers ?
Merci !

Avatar de l’utilisateur
Glorek
Messages : 134
Inscription : 22 Oct 2010 14:16
Localisation : Paris

Re: Variable de type octet et comparaison par bit

Message par Glorek » 19 Jan 2016 13:52

Yop,

Si tu n'as jamais fait de bitwise, je te conseil de garder tes entiers :) ( à moins que tu veuilles absolument tester :P)
Les machines sont assez puissantes pour ne pas à avoir à aller si loin dans l'optimisation.

Sinon en gros tu peux comme en C ou C++ utiliser les opérateurs:

Code : Tout sélectionner

&  = AND
| = OR 
^ = XOR
<<X = déplacement de X vers la gauche
>>X = idem mais vers la droite
...
en gros par exemple:

Code : Tout sélectionner

1&3 = 1
1<<1 = 2
1|3 = 3
en faite, c'est toujours mieux pour la machine elle comprendras mieux et plus rapide, mais les compilateurs sont Top et normalement il optimise déjà certains points de ton code pour la machines ;)

Moi perso quand j'ai des états, des groupes... j’utilise des Enum plutôt sinon.
genre:

Code : Tout sélectionner

public enum objectType
	{
		food = 0,
		drink,
		moral,
		material,
		health
	}
Voila en gros, j'espère avoir répondu à ta question sinon n'hésite pas ;)

cordialement
ImageImageImage

Avatar de l’utilisateur
aVe
Messages : 49
Inscription : 26 Nov 2009 11:49
Localisation : Lyon
Contact :

Re: Variable de type octet et comparaison par bit

Message par aVe » 19 Jan 2016 17:22

Merci pour la réponse !
Je ne connais pas bien les bitwise, et je resterai pour l'instant sur les entiers (je m'en sors pas trop mal).
Je n'ai pas encore essayé les enum, il faudra que je penche dessus :)

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: Variable de type octet et comparaison par bit

Message par Titan » 21 Jan 2016 15:35

Pour faire ce que tu veux de maniére propre tu a un atribute [Flags] à mettre sur un enum: http://www.dotnetperls.com/enum-flags

Code : Tout sélectionner

using System;

[Flags]
enum State
{
   Empty = 0,
   A = 1,
   B = 2,
   C = 4,
   D = 8
}

void function()
{
   State s;
   s = State.C | State.D // initialise avec C plus D
   s |= State.A; // ajoute A
   s |= State.B; // ajoute B
   s &= ~State.A; // retire A
   if (s.HasFlag(State.B)) { }// test si B est présent
}
____________________________________________
Hop Boy

Avatar de l’utilisateur
aVe
Messages : 49
Inscription : 26 Nov 2009 11:49
Localisation : Lyon
Contact :

Re: Variable de type octet et comparaison par bit

Message par aVe » 21 Jan 2016 20:20

C'est carrément astucieux ! Merci :)

Répondre

Revenir vers « Scripting »