Skip to content

JonathanWi/introduction-react-native

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 

Repository files navigation

Pré-requis

Afin de pouvoir coder sur react-native, nous allons avoir besoin d'installer deux dépendances :

  • Le CLI (command line interface) de React Native
  • L'application Expo sur notre device (iOS ou Android)

Installer React-Native CLI

Dans un terminal, entrez là commande suivante :

npm install -g create-react-native-app

Le CLI va nous permettre de générer des projets React Native directement depuis le terminal !

Installer Expo

Expo est une application mobile qui va nous permettre de tester notre application en temps réel.

Voilà, nous sommes prêt pour commencer !

DrawParty

L'objectif de cette semaine va être de concevoir l'application DrawParty : un Pictionnary local sur portable.

Pour cet exercice, vous n'aurez pas besoin de créer de nouveaux fichiers ou de navigation : l'intégralité de l'exercice peut se faire dans le ficher App.js

Nous découperons l'exercice en deux parties : une première partie qui consistera créer l'interface de dessin, puis une seconde ou nous créérons le jeu.

L'interface de dessin

L'interface de dessin que nous allons créer comportera les fonctionnalités suivantes :

  • Une zone de dessin
  • Un color-picker permettant de changer les couleurs du crayon
  • Une liste de boutons qui permet de changer la taille de la pointe du crayon
  • Un bouton pour annuler le dernier trait
  • Un bouton pour effacer le canvas
  • Un timer pour calculer le temps restant (qui tournera mais ne sera pas actif pour l'instant)
  • Un bouton qui permet d'annoncer que le dessin a été trouvé

Partie 1 : Le dessin

1. Créer le projet

1.a Ouvrez un terminal et déplacez vous à l'aide de cd dans le dossier ou vous souhaitez installer cet exercice

1.b Une fois dans le dossier, lancez les commandes suivantes dans l'ordre :

create-react-native-app DrawParty
cd DrawParty
npm start

🎉 Vous venez de créer votre premier projet React Native !

Congrats

2. La zone de dessin

2.a Installez le component rn-draw et importez-le dans le fichier App.js

2.b À l'aide de la démo présente dans la documentation de rn-draw, ajoutez le component RNDraw à l'interieur de la View parente du fichier App.js

✋ À cette étape, appelez-moi pour que je vienne vérifier votre code. Si tout s'est bien passé, vous devriez pouvoir déjà dessiner sur votre portable !

3. Le color picker

La fonctionnalité à développer ici est la possibilité de changer la couleur du crayon.

3.1 Installez le component react-native-color-wheel et importez le dans le fichier App.js

3.2 Modifiez le render du component App afin qu'il soit de la forme:

<View style={styles.container}>
    <View style={styles.drawContainer}>
        // Mettre RNDraw ici
    </View>
    <View style={styles.actionsContainer}>
        
    </View>
</View>

avec les styles suivant:

const styles = StyleSheet.create({
    container: {
        flex: 1
    },
    drawContainer: {
        flex: 1
    },
    actionsContainer: {
        height: 170, 
        padding: 15
    }
})

3.3 Ajoutez la color wheel dans la View actionsContainer (et changez le style du color picker pour que sa largeur et hauteur soient égales à 130)

✋ À cette étape, appelez-moi pour que je vienne vérifier votre code. Si tout s'est bien passé, vous devriez pouvoir dessiner et voir la color wheel !

Notre premier state : color

Avant de commencer cette partie, veuillez lire la documentation du state.. Le but de cette partie est de créer un state color qui variera en fonction de la color wheel, puis d'associer cette couleur à rn-draw

3.4 À l'aide la documentation précédente, créez un constructor pour le component App

3.5 Dans le constructor, initialisez le state color avec une valeur de #000000

3.6 Dans la View ActionsContainer, affichez la valeur de la variable color
⚠️ Attention pensez bien à importer Text de React Native !

✋ À cette étape, appelez-moi pour que je vienne vérifier votre code. Si tout s'est bien passé, vous devriez voir #000000 s'afficher !

3.7 À l'aide de la fonction setState et de la props onColorChange de react-native-color-wheel , faites en sorte que la couleur selectionnée sur la wheel s'affiche à la place de #000000

3.8 Changez la couleur du crayon en utilisant la props color de rn-draw.

✋ À cette étape, appelez-moi pour que je vienne vérifier votre code. Si tout s'est bien passé, vous pouvez maintenant changer la couleur du crayon.

🎉 Vous êtes officielement le maître de la couleur
Congrats

4. La taille de la mine

Pour cette partie, copiez le tableau ci dessous avant la déclaration du component (export default class [...])

const strokes = [2, 4, 6, 8, 10];

4.1 Dans le constructor, initialisez un state strokeWidth à la valeur 4

4.2 Modifiez le Text qui affiche la couleur afin qu'il affiche à présent la valeur de strokeWidth.

4.3 À l'aide de la fonction map de javascript et Text de react-native, affichez toutes les valeurs du tableau strokes dans la View ActionsContainer

4.4 Placez chaque Text nouvellement affichés dans un component TouchableOpacity de React Native (équivalent React Native d'un bouton).

4.4 Modifiez la fonction onPress de TouchableOpacity afin qu'un tap change la valeur de strokeWidth pour la valeur du bouton selectionné.
la valeur affichée de strokeWidth doit prendre la valeur du TouchableOpacity sur lequel vous avez tap.

4.5 Modifiez la valeur de la props strokeWidth de rn-draw afin qu'elle soit égale à la valeur de la strokeWidth du state.

✋ À cette étape, appelez-moi pour que je vienne vérifier votre code. Si tout s'est bien passé, vous pouvez maintenant changer la taille de la mine du crayon !

4.6 Un peu de style: À la place d'afficher la valeur de la strokeWidth sur chaque bouton, affichez un cercle de background #000 qui aura pour width et height strokeWidth * 2.

4.7 Modifiez le style des touchableOpacity afin que la stroke selectionnée apparaisse de couleur #358EF6

🎉 Bravo, vous pouvez maintenant changer la taille du trait !
Congrats

5. Annuler et effacer

Dans cette partie, nous allons créer deux boutons annuler(annule le dernier trait) et effacer(Efface l'integralité du canvas).

5.1 Dans la View actionsContainer, crèez deux TouchableOpacity "Undo" et "Delete" dont le style est le suivant :

button : {
    paddingVertical: 15,
    borderWidth: 1
}

5.2 Associez les fonctions undo et clear de rn-draw à leurs boutons respectifs.

🎉 Vous pouvez maintenant annuler votre dernier trait ou effacer le canvas !
Congrats

✋ Si vous êtes arrivés jusqu'ici, c'est que vous avez fini la partie 1, félicitations ! Appelez moi pour que je vienne vérifier votre exercice.

Partie 2 : Le jeu

Dans cette partie, nous allons implémenter la logique du jeu. Le fonctionnement est le suivant : Un joueur est le dessinateur, les autres sont ceux qui doivent deviner le mot qui est dessiné.
Un mot est choisi aléatoirement dans une liste et présenté au dessinateur. Quand celui-ci est prêt, il appuie sur le bouton "go" qui lance la partie, ainsi qu'un timer de 60s.
Pendant ces 60s, si la solution est trouvée, un bouton "mot trouvé" permet au dessinateur d'annoncer que l'on peut passer au dessinateur et mot suivant.
Si les 60s sont écoulés, le dessinateur a perdu, et on passe au joueur suivant.

6. La liste de mots

Téléchargez le fichier words.js présent dans ce repo, (il contient une longue liste de mots pour le jeu) et placez ce fichier à la racine de votre dossier (au même niveau que App.js).

6.1 Importez la liste de mot dans le fichier App.js dans une variable words

6.2 Dans le constructor, initialisez le state words qui a pour valeur la variable words importée.

6.3 Dans le constructor, initialisez le state currentWordIndex à la valeur 0. Cette variable correspond à l'index du mot en cours dans le tableau this.state.words

6.4 Affichez le mot en cours dans la View actionsContainer

6.5 Passer au mot suivant : créez un bouton mot trouvé (grâce à TouchableOpacity). Un tap sur ce bouton déclenche le passage au mot suivant

✋ Si vous êtes arrivés jusqu'ici, appelez moi pour que je vérifie votre exercice : si tout fonctionne vous devriez voir le mot changer à chaque tap.

7. La logique du jeu

Dans cette partie nous allons implémenter la logique générale du jeu. Il existe trois états distincts :

  • wordFound : le mot a été trouvé, on affiche un écran de félicitations, et un bouton pour passer au mot suivant.
  • wordFail : le mot n'a pas été trouvé, on affiche un message de défaite, et un bouton pour passer au mot suivant.
  • gameStarted: tant que la partie n'a pas commencée, on affiche le mot a dessiner pour le dessinateur.

Le mot a dessiner ainsi que le message de succès (et de défaite) sont présentés dans une modal (react-native-simple-modal).

7.1 Initialisez 3 variables du state wordFound, wordFail et gameStarted avec pour valeur false.

7.2 Installez et importez react-native-simple-modal dans le fichier App.js.

7.3 Ajoutez la modal dans le render de App et ajoutez les bonnes conditions pour lesquelles la props open de la modal est à true.

7.4 Dans la modale, si la partie n'a pas démarré, affichez le mot à dessiner, ainsi qu'un bouton qui démarre la partie

7.5 Dans la modale, si la partie a démarrée et que le mot a été trouvé, affichez un message de succès et un bouton pour passer au mot suivant

7.6 Dans la modale, si la partie a démarrée et que le mot n'a pas été trouvé, affichez un message d'échec et un bouton pour passer au mot suivant.

7.7 Dans le View actionsContainer, ajoutez un bouton "mot trouvé" qui finit la partie au tap.

✋ Si vous êtes arrivés jusqu'ici, appelez moi pour que je vérifie votre exercice : si tout fonctionne vous devriez voir le mot à dessiner dans une modal, puis le jeu. Au tap sur le bouton "mot trouvé", je vois un message de succès dans la modal accompagné d'un bouton "mot suivant". Au tap sur ce bouton, le processus décrit recommence.

8. Le timer

Dans cette partie, nous allons installer un compte à rebours. Lorsque celui-ci est fini la partie est terminée et le mot n'a pas été trouvé.

8.1 Installez et importez react-native-countdown-circle dans le fichier App.js

8.2 Créez une fonction this.onWordFail dans le component App. Quand elle est appelée, cette fonction retourne console.log('fail').

8.2 Ajoutez le Countdown dans la View DrawContainer et positionnez le en absolute. Le code du countdown est le suivant :

<CountdownCircle
    seconds={60}
    radius={25}
    borderWidth={4}
    color="#F05E9F"
    bgColor="#fff"
    onTimeElapsed={this.onWordFail}
    />

⚠️ Ne pas copier l'exemple sur le site de react-native-countdown-circle, uniquement le code ci-dessus !

8.3 Ajoutez une condition afin que le countDown n'apparaisse que lorsque la partie a commencée.

8.4 Faites en sorte que la fonction onWordFail soit appelée quand le countDownest terminé. La modale d'échec doit alors s'afficher !

Partie 3 : Les joueurs

Dans cette partie, l'objectif va être de pouvoir entrer le nombre de joueurs, leurs noms, leurs tours et finalement leurs points (et un classement).

9. La navigation

L'application va être découpée en deux écrans : un écran Settings qui sera la page d'entrée du jeu, sur laquelle nous pourrons changer le nombre de joueurs et entrer leurs noms. Une fois que tous les noms sont définis, un bouton apparait et nous permet d'accèder à la page Game (que nous avons créé dans les parties 1 & 2).

9.1 Copiez l'intégralité du code présent dans le fichier App.js, et copiez le dans un nouveau fichier Game.js situé au même niveau.

9.2 Effacez le contenu du fichier App.js, et créez un nouveau Component qui affiche le texte : DrawParty

9.3 Importez StackNavigator de react-navigation (vous n'avez pas besoin d'installer un nouveau module via NPM)

9.4 À l'aide de la documentation deStackNavigator, créez une simple navigation de deux pages (Settings et Game) dans votre fichier App.js

✋ Si vous êtes arrivés jusqu'ici, appelez moi pour que je vérifie votre exercice.

9.5 Créez un bouton "Accéder au jeu" sur la page Settings. Au tap, il permet de naviguer jusqu'à la page Game

10. Le nombre de joueurs

10.1 Dans le Component Settings, initialisez le state players à la valeur ['',''].Cet array correspond à la liste des username des joueurs (ici 2 joueurs).

10.2 Dans un Text affichez le nombre de joueurs présents dans la partie actuelle. (pas besoin de créer de nouvelle variable pour cette question).

10.3 Créez deux boutons + et - autour du nombre de joueurs. Ils nous serviront à ajouter ou supprimer des joueurs.

10.4 À l'aide de la fonction javascript push et d'une fonction this.addPlayer, faites qu'un tap sur le bouton + ajoute un joueur.

10.5 À l'aide de la fonction javascript splice et d'une fonction this.removePlayer, faites qu'un tap sur le bouton - retire un joueur.

10.6 À l'aide de la props disabled de TouchableOpacity, faites en sorte que le bouton - ne soit pas actif si le nombre de joueurs est inférieur ou égal à 2

✋ Si vous êtes arrivés jusqu'ici, appelez moi pour que je vérifie votre exercice. Si tout s'est bien passé, vous devriez pouvoir faire varier le nombre de joueurs !

11. Les usernames

11.1 À l'aide de la fonction map de javascript, affichez un TextInput de React Native pour chaque joueurs

11.2 En vous aidant de la documentation de TextInput et d'une fonction this.onChangeName, faites en sorte que chaque TextInput corresponde au username des joueurs dans la partie

11.3 À l'aide de la fonction includes de javascript, faites en sorte que le bouton "Accéder au jeu" ne soit afficher qu'à la condition qu'aucun des usernames ne soit vide.

12. Passez les données des joueurs

12.1 À l'aide de la documentation deStackNavigator, faites en sorte que la navigation jusqu'à la page Game contienne les informations sur les players.

12.2 Dans le constructor du component Game, faites un console.log de this.props afin de localiser la variable players

12.3 Dans le component Game, initialisez le state players qui a pour valeur les players récupérés depuis this.props

13. Le tour des joueurs

Pour cette question, du fait de sa similarité avec la partie 7, vous ne serez pas guidé :

13.1 Initialisez deux variables currentPlayerIndex à 0 et displayWord à false. voici la séquence de modal que doivent voir les joueurs :

pattern

⚠️ Lorsque tous les joueurs ont joués, le jeu doit revenir au premier joueur !

14. Les scores (bonus)

À l'aide de tout ce que nous avons vu précédemment, mettez en place un système de points pour les joueurs :

  • Au tap sur le bouton "mot trouvé", la modal contient la liste des joueurs. Je peux selectionner un joueur (celui qui a trouvé le mot) et valider afin que lui et le dessinateur reçoivent 1 point.

  • Après avoir validé, je vois un classement des joueurs ordonné du meilleur (le plus de points) au moins bon (le moins de points).

Congrats

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published