Exercice 2
Page 1 sur 1 • Partagez
Exercice 2
Programmer sur Script
Exercice 2
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
- 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);
}
- Code:
ds_list_add(obj_x,argument0);
ds_list_add(obj_y,argument1);
- Code:
ds_list_delete(obj_x,argument0);
ds_list_delete(obj_y,argument0);
- 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);
}
}
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|