Exercice 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

Unique Exercice 2

Message par Morgan9195 le Mar 26 Nov - 1:29



Programmer sur Script
Exercice 2


Mise en pratique

Je vous propose de créer un autre mini-jeu, sans sprites, mais avec quelques calculs mathématiques. Je vous met au défis de recréer un jeu semblable à celui-ci:


Je récapitule une petite liste de tout ce que le jeu devra contenir:

- Un menu principal pour votre jeu (avec des boutons "Jouer", "Options" et "Quitter")
- Une page d'options sur laquelle on peut modifier la couleur du fond
- Des cercles qui arrivent aléatoirement en dehors de la fenêtre
- Les cercles qui s'approchent de la souris en ralentissant de plus en plus
- Des niveaux qui augmentent peu à peu et affectent la difficulté (vitesse des cercles, plus de cercles)
- Retour au menu lorsqu'un cercle touche la souris
- Retour au menu si la souris sort des limites du terrain de jeu
- Le meilleur score affiché sur le menu

Bonne chance Smile




Indice 1:

Pour modifier la couleur de fond d'écran depuis la page Option:

background_color=get_color(background_color);

Indice 2:

Tutoriel sur la création et la manipulation d'objets:
http://script.1fr1.net/t106-creer-et-manipuler-des-objets#233

Les cercles sont des objets ayant pour paramètres:
- leur coordonnée x
- leur coordonnée y
- leur vitesse (facultatif si ça dépend de la distance objet-souris)
- leur taille (facultatif si ça dépend de la distance objet-souris)

Indice 3:

Chaque cercle fonctionne comme un bouton invisible circulaire.
Cette fonction affichera un score, supprimera les cercles, réinitialisera le niveau (s'il y en a un), puis retourne sur le menu.

Correction de l'exercice:

program.script :
Code:

if event_start()
{
 program_name="Exercice 2";
 
 // Initialisation des variables
 page="menu";
 couleur_fond=c_white;
 background_color=couleur_fond;
 tempo=0;
 niveau=1;
 meilleur_score=0;
 
 // Initialisation de la liste d'objets
 obj_x=ds_list_create();
 obj_y=ds_list_create();
}

draw_2D();

// Menu
if page="menu"
{
 // Afficher le meilleur score
 draw_set_color(c_black);
 draw_text(10,5,"Meilleur score: "+string(round(meilleur_score))+" points");
 // Bouton "Jouer"
 if button(50,200,300,275,"Jouer")
 {
  page="jeu";
  background_color=c_black;
  if round(random(1))=0
  {
   if round(random(1))=0
    x=0 else x=room_width;
   y=random(room_height);
  }
  else
  {
   if round(random(1))=0
    y=0 else y=room_height;
   x=random(room_width);
  }
  fonction("create_object",x,y);
 }
 // Bouton "Options"
 if button(50,300,300,375,"Options")
  page="options";
 // Bouton "Quitter"
 if button(50,400,300,475,"Quitter")
  game_end();
}

// Options
else if page="options"
{
 if button(50,200,300,275,"Changer la couleur du fond")
 {
  couleur_fond=get_color(couleur_fond);
  background_color=couleur_fond;
 }
 if button(50,300,300,375,"Retour")
  page="menu";
}

// Jeu
else if page="jeu"
{
 // Dessine la zone du jeu
 draw_set_color(couleur_fond);
 draw_rectangle(50,50,room_width-50,room_height-50,false);
 // Si la souris quitte la zone du jeu
 if !mouse_in_rectangle(50,50,room_width-50,room_height-50)
 {
  show_message("Score: "+string(round(niveau))+" points");
  page="menu";
  background_color=couleur_fond;
  tempo=0;
  if niveau>meilleur_score
   meilleur_score=niveau;
  niveau=1;
  while ds_list_size(obj_x)>0
   fonction("delete_object",0);
 }
 draw_set_color(c_black);
 // Si temps écoulé, alors nouveau cercle
 while tempo>=100
 {
  if round(random(1))=0
  {
   if round(random(1))=0
    x=0 else x=room_width;
   y=random(room_height);
  }
  else
  {
   if round(random(1))=0
    y=0 else y=room_height;
   x=random(room_width);
  }
  fonction("create_object",x,y);
  niveau+=1;
  tempo-=100;
 }
 // Dessine tous les cercles
 fonction("draw_object");
 // Ecrit les points dans le coin supérieur gauche
 draw_set_color(couleur_fond);
 draw_text(10,5,"Score: "+string(round(niveau))+" points");
 draw_rectangle(20,30,120,40,true);
 draw_rectangle(20,30,20+tempo,40,false);
 // Defilement du temps
 tempo+=niveau/2;
}

if event_end()
{
 // Suppression des listes d'objets
 ds_list_destroy(obj_x);
 ds_list_destroy(obj_y);
}
create_object.script :
Code:

ds_list_add(obj_x,argument0);
ds_list_add(obj_y,argument1);
delete_object.script :
Code:

ds_list_delete(obj_x,argument0);
ds_list_delete(obj_y,argument0);
draw_object.script :
Code:

draw_set_color(c_black);
// Pour chaque objet un par un
for (i=0; i<ds_list_size(obj_x); i+=1)
{
 // Modifier sa position
 x_temp=ds_list_find_value(obj_x,i);
 y_temp=ds_list_find_value(obj_y,i);
 x_temp-=(x_temp-mouse_x)/100*(niveau+tempo/100)/10;
 y_temp-=(y_temp-mouse_y)/100*(niveau+tempo/100)/10;
 ds_list_replace(obj_x,i,x_temp);
 ds_list_replace(obj_y,i,y_temp);
 // Dessiner l'objet
 draw_circle(x_temp,y_temp,variable_limite(50-niveau/4,5,50),false);
 // Surveiller si l'objet est touché par la souris
 if mouse_in_circle(x_temp,y_temp,variable_limite(50-niveau/4,5,50))
 {
  show_message("Score: "+string(round(niveau))+" points");
  page="menu";
  background_color=couleur_fond;
  tempo=0;
  if niveau>meilleur_score
   meilleur_score=niveau;
  niveau=1;
  while ds_list_size(obj_x)>0
   fonction("delete_object",0);
 }
}




avatar
Morgan9195
Fondateur
Fondateur

Messages : 168
Date d'inscription : 11/02/2013
Age : 22
Localisation : Entre le fauteuil et le clavier

Projet(s)
Niveau de connaissances dans Script: Professionnel
Spécialité: Programmeur

Voir le profil de l'utilisateur http://morgan9195.olympe.in/devblog/

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum