|
|
#include <stdio.h> |
|
|
#include <stdlib.h> |
|
|
#include <string.h> |
|
|
#include <ctype.h> |
|
|
#include <time.h> |
|
|
#include <unistd.h> |
|
|
#include <dlfcn.h> |
|
|
#include <sys/wait.h> |
|
|
#include <math.h> |
|
|
#include <errno.h> |
|
|
#include <sys/stat.h> |
|
|
|
|
|
#define MAX_LINE_LENGTH 1000 |
|
|
#define MAX_VARIABLES 100 |
|
|
#define MAX_VAR_NAME 50 |
|
|
#define MAX_STRING_VALUE 500 |
|
|
|
|
|
typedef struct { |
|
|
char name[MAX_VAR_NAME]; |
|
|
char value[MAX_STRING_VALUE]; |
|
|
int is_numeric; |
|
|
} Variable; |
|
|
|
|
|
Variable variables[MAX_VARIABLES]; |
|
|
int var_count = 0; |
|
|
|
|
|
|
|
|
int last_condition_result = 0; |
|
|
int in_alors_block = 0; |
|
|
int in_autre_block = 0; |
|
|
int skip_current_block = 0; |
|
|
|
|
|
|
|
|
char current_color[20] = "DEFAULT"; |
|
|
|
|
|
|
|
|
#define MAX_FUNCTIONS 100 |
|
|
#define MAX_PACKAGES 20 |
|
|
#define MAX_MODULES 20 |
|
|
|
|
|
typedef struct { |
|
|
char name[MAX_VAR_NAME]; |
|
|
char code[MAX_STRING_VALUE * 10]; |
|
|
char filename[MAX_STRING_VALUE]; |
|
|
} MayaFunction; |
|
|
|
|
|
typedef struct { |
|
|
char path[MAX_STRING_VALUE]; |
|
|
char so_path[MAX_STRING_VALUE]; |
|
|
void *handle; |
|
|
int loaded; |
|
|
char function_names[MAX_FUNCTIONS][MAX_VAR_NAME]; |
|
|
void (*functions[MAX_FUNCTIONS])(); |
|
|
int function_count; |
|
|
} MayaPackage; |
|
|
|
|
|
typedef struct { |
|
|
char path[MAX_STRING_VALUE]; |
|
|
MayaFunction functions[MAX_FUNCTIONS]; |
|
|
int function_count; |
|
|
int loaded; |
|
|
} MayaModule; |
|
|
|
|
|
MayaFunction maya_functions[MAX_FUNCTIONS]; |
|
|
int maya_function_count = 0; |
|
|
MayaPackage maya_packages[MAX_PACKAGES]; |
|
|
int maya_package_count = 0; |
|
|
MayaModule maya_modules[MAX_MODULES]; |
|
|
int maya_module_count = 0; |
|
|
|
|
|
|
|
|
#define MAX_DATABASES 50 |
|
|
#define MAX_DB_RECORDS 1000 |
|
|
|
|
|
typedef struct { |
|
|
char id[9]; |
|
|
char data[MAX_STRING_VALUE * 5]; |
|
|
int active; |
|
|
} MayaDatabase; |
|
|
|
|
|
MayaDatabase maya_databases[MAX_DATABASES]; |
|
|
int maya_db_count = 0; |
|
|
|
|
|
|
|
|
void maya_error(const char *message, int line_number); |
|
|
void trim(char *str); |
|
|
char* get_variable_value(char *name); |
|
|
void set_variable(char *name, char *value, int is_numeric); |
|
|
int evaluate_expression_numeric(char *expr); |
|
|
char* process_string_with_variables(char *input); |
|
|
void handle_console(char *content); |
|
|
void handle_math(char *line); |
|
|
void handle_variable(char *line); |
|
|
void handle_input(char *line); |
|
|
void handle_delai(char *line); |
|
|
void handle_draw(char *line); |
|
|
void handle_jolie_txt(char *line); |
|
|
void handle_color_console(char *line); |
|
|
void handle_nombre_random(char *line); |
|
|
void handle_random_txt(char *line); |
|
|
int handle_condition(char *condition); |
|
|
void interpret_line(char *line); |
|
|
void execute_maya_file(const char *filename); |
|
|
void apply_color(char *color); |
|
|
void reset_color(); |
|
|
void draw_heart(); |
|
|
void draw_tree(); |
|
|
void draw_dog(); |
|
|
void draw_horse(); |
|
|
void draw_goat(); |
|
|
void draw_sheep(); |
|
|
void draw_bird(); |
|
|
void draw_fish(); |
|
|
void handle_quizz(char *line); |
|
|
void handle_dice(char *line); |
|
|
void handle_puissance4(char *line); |
|
|
void handle_pendu(char *line); |
|
|
void handle_worldgame(char *line); |
|
|
void handle_rock_leaf(char *line); |
|
|
void handle_devine_number(char *line); |
|
|
void handle_snake(char *line); |
|
|
void handle_tictac(char *line); |
|
|
void handle_memory(char *line); |
|
|
void handle_simulation_bac(char *line); |
|
|
void handle_simulation_combat(char *line); |
|
|
void handle_simulation_sciences(char *line); |
|
|
void handle_simulation_clone(char *line); |
|
|
void handle_simulation_tech(char *line); |
|
|
void handle_simulation_ia(char *line); |
|
|
void handle_simulation_conscient(char *line); |
|
|
void handle_simulation_iawork(char *line); |
|
|
void handle_fonction(char *line); |
|
|
void handle_lire_module(char *line); |
|
|
void handle_package_charge(char *line); |
|
|
void execute_maya_function(char *function_name, char *args); |
|
|
void load_maya_module(char *path); |
|
|
void load_maya_package(char *path); |
|
|
int find_maya_function(char *name); |
|
|
int compile_c_package(char *source_path, char *output_path); |
|
|
void call_package_function(char *function_name, char *args); |
|
|
int find_package_function(char *name); |
|
|
int detect_package_functions(char *source_path, char function_names[][MAX_VAR_NAME]); |
|
|
void get_package_info(int func_index, int *package_index, int *local_index); |
|
|
|
|
|
|
|
|
void handle_math_median(char *line); |
|
|
void handle_math_moyenne(char *line); |
|
|
void handle_math_cube(char *line); |
|
|
void handle_math_carre(char *line); |
|
|
void handle_math_racine(char *line); |
|
|
void handle_math_degres(char *line); |
|
|
void handle_thales(char *line); |
|
|
void handle_pytha(char *line); |
|
|
void handle_rythme_convertir(char *line); |
|
|
void handle_renvoie_gamme(char *line); |
|
|
void handle_obtenir_gamme(char *line); |
|
|
void handle_db(char *line); |
|
|
void handle_send_db(char *line); |
|
|
void handle_supp_db(char *line); |
|
|
void handle_util_db(char *line); |
|
|
void handle_execute_c(char *line); |
|
|
void handle_simulation_monrobot(char *line); |
|
|
void handle_simulation_quantique(char *line); |
|
|
void handle_simulation_monunivers(char *line); |
|
|
void handle_simulation_atomes(char *line); |
|
|
void handle_simulation_timetravel(char *line); |
|
|
void handle_simulation_fairy(char *line); |
|
|
void handle_simulation_vampire(char *line); |
|
|
void handle_simulation_sirene(char *line); |
|
|
void handle_simulation_monster(char *line); |
|
|
void handle_exercice_create(char *line); |
|
|
void handle_exercice_gest_pgi(char *line); |
|
|
void handle_exercice_gest_treso(char *line); |
|
|
void handle_exercice_math(char *line); |
|
|
void handle_exercice_histoire(char *line); |
|
|
void handle_exercice_mana(char *line); |
|
|
int validate_db_id(char *id); |
|
|
int find_database(char *id); |
|
|
char* extract_c_code(char *maya_line); |
|
|
|
|
|
|
|
|
void handle_create_robot(char *line); |
|
|
void handle_for_loop(char *line); |
|
|
void handle_while_loop(char *line); |
|
|
void handle_loop(char *line); |
|
|
void handle_palette(char *line); |
|
|
void handle_owngame(char *line); |
|
|
void handle_modifie_console(char *line); |
|
|
void handle_interactive(char *line); |
|
|
void handle_inventaire(char *line); |
|
|
void handle_histoire_recit(char *line); |
|
|
void handle_histoire_end(char *line); |
|
|
void handle_own_pet(char *line); |
|
|
void handle_own_titan(char *line); |
|
|
void handle_nombre_pet(char *line); |
|
|
void handle_nombre_titan(char *line); |
|
|
|
|
|
|
|
|
void maya_error(const char *message, int line_number) { |
|
|
if (line_number > 0) { |
|
|
printf("\033[31mERREUR MAYA [Ligne %d]: %s\033[0m\n", line_number, message); |
|
|
} else { |
|
|
printf("\033[31mERREUR MAYA: %s\033[0m\n", message); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void trim(char *str) { |
|
|
int start = 0, end = strlen(str) - 1; |
|
|
while (isspace(str[start])) start++; |
|
|
while (end >= start && isspace(str[end])) end--; |
|
|
str[end + 1] = '\0'; |
|
|
if (start > 0) { |
|
|
memmove(str, str + start, strlen(str + start) + 1); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
char* get_variable_value(char *name) { |
|
|
for (int i = 0; i < var_count; i++) { |
|
|
if (strcmp(variables[i].name, name) == 0) { |
|
|
return variables[i].value; |
|
|
} |
|
|
} |
|
|
maya_error("Variable non trouvée", 0); |
|
|
return NULL; |
|
|
} |
|
|
|
|
|
|
|
|
void set_variable(char *name, char *value, int is_numeric) { |
|
|
for (int i = 0; i < var_count; i++) { |
|
|
if (strcmp(variables[i].name, name) == 0) { |
|
|
strcpy(variables[i].value, value); |
|
|
variables[i].is_numeric = is_numeric; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
if (var_count < MAX_VARIABLES) { |
|
|
strcpy(variables[var_count].name, name); |
|
|
strcpy(variables[var_count].value, value); |
|
|
variables[var_count].is_numeric = is_numeric; |
|
|
var_count++; |
|
|
} else { |
|
|
maya_error("Trop de variables définies", 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int evaluate_expression_numeric(char *expr) { |
|
|
trim(expr); |
|
|
|
|
|
|
|
|
if (strcmp(expr, "true") == 0) return 1; |
|
|
if (strcmp(expr, "false") == 0) return 0; |
|
|
|
|
|
|
|
|
char *op_pos = NULL; |
|
|
char operator = '\0'; |
|
|
|
|
|
for (size_t i = 1; i < strlen(expr); i++) { |
|
|
if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') { |
|
|
op_pos = &expr[i]; |
|
|
operator = expr[i]; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
if (!op_pos) { |
|
|
|
|
|
if (isdigit(expr[0]) || expr[0] == '-') { |
|
|
return atoi(expr); |
|
|
} else { |
|
|
char *var_value = get_variable_value(expr); |
|
|
if (var_value) { |
|
|
return atoi(var_value); |
|
|
} |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
*op_pos = '\0'; |
|
|
char *left = expr; |
|
|
char *right = op_pos + 1; |
|
|
|
|
|
trim(left); |
|
|
trim(right); |
|
|
|
|
|
int left_val, right_val; |
|
|
|
|
|
|
|
|
if (isdigit(left[0]) || left[0] == '-') { |
|
|
left_val = atoi(left); |
|
|
} else { |
|
|
char *var_value = get_variable_value(left); |
|
|
left_val = var_value ? atoi(var_value) : 0; |
|
|
} |
|
|
|
|
|
|
|
|
if (isdigit(right[0]) || right[0] == '-') { |
|
|
right_val = atoi(right); |
|
|
} else { |
|
|
char *var_value = get_variable_value(right); |
|
|
right_val = var_value ? atoi(var_value) : 0; |
|
|
} |
|
|
|
|
|
|
|
|
switch (operator) { |
|
|
case '+': return left_val + right_val; |
|
|
case '-': return left_val - right_val; |
|
|
case '*': return left_val * right_val; |
|
|
case '/': |
|
|
if (right_val == 0) { |
|
|
maya_error("Division par zéro interdite", 0); |
|
|
return 0; |
|
|
} |
|
|
return left_val / right_val; |
|
|
default: |
|
|
maya_error("Opérateur non reconnu", 0); |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
char* process_string_with_variables(char *input) { |
|
|
static char result[MAX_STRING_VALUE * 2]; |
|
|
char temp[MAX_STRING_VALUE]; |
|
|
strcpy(temp, input); |
|
|
result[0] = '\0'; |
|
|
|
|
|
char *token = strtok(temp, "+"); |
|
|
int first = 1; |
|
|
|
|
|
while (token != NULL) { |
|
|
trim(token); |
|
|
|
|
|
if (token[0] == '\'' && token[strlen(token)-1] == '\'') { |
|
|
|
|
|
token[strlen(token)-1] = '\0'; |
|
|
token++; |
|
|
if (!first) strcat(result, " "); |
|
|
strcat(result, token); |
|
|
} else { |
|
|
|
|
|
char *var_value = get_variable_value(token); |
|
|
if (var_value) { |
|
|
if (!first) strcat(result, " "); |
|
|
strcat(result, var_value); |
|
|
} |
|
|
} |
|
|
first = 0; |
|
|
token = strtok(NULL, "+"); |
|
|
} |
|
|
|
|
|
return result; |
|
|
} |
|
|
|
|
|
|
|
|
void apply_color(char *color) { |
|
|
if (strcmp(color, "RED") == 0) printf("\033[31m"); |
|
|
else if (strcmp(color, "GREEN") == 0) printf("\033[32m"); |
|
|
else if (strcmp(color, "YELLOW") == 0) printf("\033[33m"); |
|
|
else if (strcmp(color, "BLUE") == 0) printf("\033[34m"); |
|
|
else if (strcmp(color, "MAGENTA") == 0) printf("\033[35m"); |
|
|
else if (strcmp(color, "CYAN") == 0) printf("\033[36m"); |
|
|
else if (strcmp(color, "WHITE") == 0) printf("\033[37m"); |
|
|
else if (strcmp(color, "BLACK") == 0) printf("\033[30m"); |
|
|
else if (strcmp(color, "PINK") == 0) printf("\033[95m"); |
|
|
else if (strcmp(color, "ORANGE") == 0) printf("\033[93m"); |
|
|
else if (strcmp(color, "PURPLE") == 0) printf("\033[94m"); |
|
|
else if (strcmp(color, "BROWN") == 0) printf("\033[33m"); |
|
|
} |
|
|
|
|
|
|
|
|
void reset_color() { |
|
|
printf("\033[0m"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_console(char *content) { |
|
|
char *start = strchr(content, '('); |
|
|
char *end = strrchr(content, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.console - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (strchr(start, '+')) { |
|
|
char *processed = process_string_with_variables(start); |
|
|
apply_color(current_color); |
|
|
printf("%s\n", processed); |
|
|
reset_color(); |
|
|
} else { |
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
apply_color(current_color); |
|
|
printf("%s\n", start); |
|
|
reset_color(); |
|
|
} else { |
|
|
|
|
|
char *var_value = get_variable_value(start); |
|
|
if (var_value) { |
|
|
apply_color(current_color); |
|
|
printf("%s\n", var_value); |
|
|
reset_color(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_math(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour opération mathématique - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int result = evaluate_expression_numeric(start); |
|
|
printf("Résultat: %d\n", result); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_math_median(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.median - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("📊 CALCUL DE MÉDIANE MAYA 📊\n"); |
|
|
|
|
|
|
|
|
double numbers[50]; |
|
|
int count = 0; |
|
|
char *token = strtok(start, ","); |
|
|
|
|
|
while (token != NULL && count < 50) { |
|
|
trim(token); |
|
|
numbers[count] = evaluate_expression_numeric(token); |
|
|
count++; |
|
|
token = strtok(NULL, ","); |
|
|
} |
|
|
|
|
|
if (count == 0) { |
|
|
maya_error("Aucun nombre fourni pour le calcul de médiane", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
for (int i = 0; i < count - 1; i++) { |
|
|
for (int j = 0; j < count - i - 1; j++) { |
|
|
if (numbers[j] > numbers[j + 1]) { |
|
|
double temp = numbers[j]; |
|
|
numbers[j] = numbers[j + 1]; |
|
|
numbers[j + 1] = temp; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
double median; |
|
|
if (count % 2 == 0) { |
|
|
median = (numbers[count/2 - 1] + numbers[count/2]) / 2.0; |
|
|
} else { |
|
|
median = numbers[count/2]; |
|
|
} |
|
|
|
|
|
printf("Nombres triés: "); |
|
|
for (int i = 0; i < count; i++) { |
|
|
printf("%.2f ", numbers[i]); |
|
|
} |
|
|
printf("\n"); |
|
|
printf("Médiane calculée: %.2f\n", median); |
|
|
} |
|
|
|
|
|
void handle_math_moyenne(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.moyenne - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("📊 CALCUL DE MOYENNE MAYA 📊\n"); |
|
|
|
|
|
|
|
|
double sum = 0.0; |
|
|
int count = 0; |
|
|
char *token = strtok(start, ","); |
|
|
|
|
|
while (token != NULL) { |
|
|
trim(token); |
|
|
double value = evaluate_expression_numeric(token); |
|
|
sum += value; |
|
|
count++; |
|
|
token = strtok(NULL, ","); |
|
|
} |
|
|
|
|
|
if (count == 0) { |
|
|
maya_error("Aucun nombre fourni pour le calcul de moyenne", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
double moyenne = sum / count; |
|
|
|
|
|
printf("Nombres: %d valeurs\n", count); |
|
|
printf("Somme: %.2f\n", sum); |
|
|
printf("Moyenne calculée: %.2f / %d = %.2f\n", sum, count, moyenne); |
|
|
} |
|
|
|
|
|
void handle_math_cube(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.cube - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int number = evaluate_expression_numeric(start); |
|
|
int result = number * number * number; |
|
|
|
|
|
printf("🔢 CALCUL AU CUBE MAYA 🔢\n"); |
|
|
printf("%d³ = %d\n", number, result); |
|
|
} |
|
|
|
|
|
void handle_math_carre(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.carre - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int number = evaluate_expression_numeric(start); |
|
|
int result = number * number; |
|
|
|
|
|
printf("🔢 CALCUL AU CARRÉ MAYA 🔢\n"); |
|
|
printf("%d² = %d\n", number, result); |
|
|
} |
|
|
|
|
|
void handle_math_racine(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.racine - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int number = evaluate_expression_numeric(start); |
|
|
|
|
|
if (number < 0) { |
|
|
maya_error("Impossible de calculer la racine d'un nombre négatif", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
double result = sqrt((double)number); |
|
|
|
|
|
printf("🔢 CALCUL DE RACINE MAYA 🔢\n"); |
|
|
printf("√%d ≈ %.2f\n", number, result); |
|
|
} |
|
|
|
|
|
void handle_math_degres(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.math.degres - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int rayon = evaluate_expression_numeric(start); |
|
|
double circonference = 2 * 3.14159 * rayon; |
|
|
|
|
|
printf("🔄 CALCUL DE DEGRÉS MAYA 🔄\n"); |
|
|
printf("Cercle de rayon %d:\n", rayon); |
|
|
printf("Circonférence: %.2f\n", circonference); |
|
|
printf("360° = %.2f unités\n", circonference); |
|
|
} |
|
|
|
|
|
void handle_thales(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.thales - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("📐 THÉORÈME DE THALÈS MAYA 📐\n"); |
|
|
|
|
|
|
|
|
char *comma1 = strchr(start, ','); |
|
|
if (!comma1) { |
|
|
maya_error("my.thales nécessite trois arguments: a, b, c", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma1 = '\0'; |
|
|
char *a_str = start; |
|
|
char *rest = comma1 + 1; |
|
|
|
|
|
char *comma2 = strchr(rest, ','); |
|
|
if (!comma2) { |
|
|
maya_error("my.thales nécessite trois arguments: a, b, c", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma2 = '\0'; |
|
|
char *b_str = rest; |
|
|
char *c_str = comma2 + 1; |
|
|
|
|
|
trim(a_str); |
|
|
trim(b_str); |
|
|
trim(c_str); |
|
|
|
|
|
double a = evaluate_expression_numeric(a_str); |
|
|
double b = evaluate_expression_numeric(b_str); |
|
|
double c = evaluate_expression_numeric(c_str); |
|
|
|
|
|
if (a == 0) { |
|
|
maya_error("Division par zéro: a ne peut pas être 0", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
double result = (b * c) / a; |
|
|
|
|
|
printf("Si a/b = c/d, alors d = (b×c)/a\n"); |
|
|
printf("Avec a=%.2f, b=%.2f, c=%.2f\n", a, b, c); |
|
|
printf("d = %.2f\n", result); |
|
|
printf("Vérification: %.2f/%.2f = %.2f/%.2f = %.4f\n", a, b, c, result, a/b); |
|
|
} |
|
|
|
|
|
void handle_pytha(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.pytha - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("📐 THÉORÈME DE PYTHAGORE MAYA 📐\n"); |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.pytha nécessite deux arguments: a et b", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *a_str = start; |
|
|
char *b_str = comma + 1; |
|
|
|
|
|
trim(a_str); |
|
|
trim(b_str); |
|
|
|
|
|
double a = evaluate_expression_numeric(a_str); |
|
|
double b = evaluate_expression_numeric(b_str); |
|
|
|
|
|
if (a < 0 || b < 0) { |
|
|
maya_error("Les côtés d'un triangle ne peuvent pas être négatifs", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
double c = sqrt(a*a + b*b); |
|
|
|
|
|
printf("a² + b² = c²\n"); |
|
|
printf("Avec a=%.2f et b=%.2f\n", a, b); |
|
|
printf("c = √(%.2f² + %.2f²) = √(%.2f + %.2f) = √%.2f = %.2f\n", a, b, a*a, b*b, a*a + b*b, c); |
|
|
printf("✅ Hypoténuse calculée: %.2f\n", c); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_variable(char *line) { |
|
|
char *equal_pos = strchr(line, '='); |
|
|
if (!equal_pos) { |
|
|
maya_error("Syntaxe incorrecte pour variable - signe '=' manquant", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*equal_pos = '\0'; |
|
|
char *var_name = line; |
|
|
char *value_str = equal_pos + 1; |
|
|
|
|
|
trim(var_name); |
|
|
trim(value_str); |
|
|
|
|
|
|
|
|
if (strstr(var_name, "my.variable")) { |
|
|
var_name = var_name + strlen("my.variable"); |
|
|
trim(var_name); |
|
|
} |
|
|
|
|
|
if (strlen(var_name) == 0) { |
|
|
maya_error("Nom de variable vide", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
int is_numeric = 1; |
|
|
if (value_str[0] == '\'' || strcmp(value_str, "true") == 0 || strcmp(value_str, "false") == 0) { |
|
|
is_numeric = 0; |
|
|
if (value_str[0] == '\'') { |
|
|
value_str[strlen(value_str)-1] = '\0'; |
|
|
value_str++; |
|
|
} |
|
|
} |
|
|
|
|
|
set_variable(var_name, value_str, is_numeric); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_input(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.input - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.input nécessite deux arguments: variable et message", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *var_name = start; |
|
|
char *message = comma + 1; |
|
|
|
|
|
trim(var_name); |
|
|
trim(message); |
|
|
|
|
|
|
|
|
if (message[0] == '\'' && message[strlen(message)-1] == '\'') { |
|
|
message[strlen(message)-1] = '\0'; |
|
|
message++; |
|
|
printf("%s", message); |
|
|
} |
|
|
|
|
|
|
|
|
char input[MAX_STRING_VALUE]; |
|
|
if (fgets(input, sizeof(input), stdin)) { |
|
|
input[strcspn(input, "\n")] = '\0'; |
|
|
set_variable(var_name, input, 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_delai(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.delai - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int milliseconds = evaluate_expression_numeric(start); |
|
|
if (milliseconds > 0) { |
|
|
usleep((useconds_t)(milliseconds * 1000)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void draw_heart() { |
|
|
printf(" ♥♥♥ ♥♥♥ \n"); |
|
|
printf("♥♥♥♥♥ ♥♥♥♥♥\n"); |
|
|
printf("♥♥♥♥♥♥♥♥♥♥♥\n"); |
|
|
printf(" ♥♥♥♥♥♥♥♥♥ \n"); |
|
|
printf(" ♥♥♥♥♥♥♥ \n"); |
|
|
printf(" ♥♥♥♥♥ \n"); |
|
|
printf(" ♥♥♥ \n"); |
|
|
printf(" ♥ \n"); |
|
|
} |
|
|
|
|
|
void draw_tree() { |
|
|
printf(" 🌲\n"); |
|
|
printf(" 🌲🌲🌲\n"); |
|
|
printf(" 🌲🌲🌲🌲🌲\n"); |
|
|
printf(" 🌲🌲🌲🌲🌲🌲🌲\n"); |
|
|
printf(" 🌲🌲🌲🌲🌲🌲🌲🌲🌲\n"); |
|
|
printf(" ||||\n"); |
|
|
printf(" ||||\n"); |
|
|
} |
|
|
|
|
|
void draw_dog() { |
|
|
printf(" /\\ /\\ \n"); |
|
|
printf(" ( . .) \n"); |
|
|
printf(" ) ( \n"); |
|
|
printf(" ( v ) \n"); |
|
|
printf(" ^^ ^^ \n"); |
|
|
printf("🐕 Woof! 🐕\n"); |
|
|
} |
|
|
|
|
|
void draw_horse() { |
|
|
printf(" /| /| \n"); |
|
|
printf(" ( oo ) \n"); |
|
|
printf(" ) ( \n"); |
|
|
printf(" ( ) \n"); |
|
|
printf(" ^^ ^^ \n"); |
|
|
printf("🐎 Neighh! 🐎\n"); |
|
|
} |
|
|
|
|
|
void draw_goat() { |
|
|
printf(" /\\ /\\ \n"); |
|
|
printf(" ( - -) \n"); |
|
|
printf(" ) ( \n"); |
|
|
printf(" ( ~ ) \n"); |
|
|
printf(" ^^ ^^ \n"); |
|
|
printf("🐐 Baaah! 🐐\n"); |
|
|
} |
|
|
|
|
|
void draw_sheep() { |
|
|
printf(" ,--. \n"); |
|
|
printf(" ( ) \n"); |
|
|
printf(" ( oo ) \n"); |
|
|
printf(" \\ / \n"); |
|
|
printf(" \\ / \n"); |
|
|
printf(" \\/ \n"); |
|
|
printf(" @@@@@@@@ \n"); |
|
|
printf("🐑 Beeeh! 🐑\n"); |
|
|
} |
|
|
|
|
|
void draw_bird() { |
|
|
printf(" ,-. \n"); |
|
|
printf(" / \\ \n"); |
|
|
printf(" ( ^ ) \n"); |
|
|
printf(" \\ / \n"); |
|
|
printf(" \\ / \n"); |
|
|
printf(" v \n"); |
|
|
printf(" /---\\ \n"); |
|
|
printf("🐦 Tweet! 🐦\n"); |
|
|
} |
|
|
|
|
|
void draw_fish() { |
|
|
printf(" ><(((('> \n"); |
|
|
printf(" ~~~~ \n"); |
|
|
printf(" ><((('> \n"); |
|
|
printf(" ~~ \n"); |
|
|
printf(" ><(('> \n"); |
|
|
printf("🐟 Blub! 🐟\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_draw(char *line) { |
|
|
if (strstr(line, "my.draw.heart")) { |
|
|
draw_heart(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.tree")) { |
|
|
draw_tree(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.dog")) { |
|
|
draw_dog(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.horse")) { |
|
|
draw_horse(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.goat")) { |
|
|
draw_goat(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.sheep")) { |
|
|
draw_sheep(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.bird")) { |
|
|
draw_bird(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.fish")) { |
|
|
draw_fish(); |
|
|
} |
|
|
else if (strstr(line, "my.draw.pers")) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.draw.pers - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
printf("%s\n", start); |
|
|
} |
|
|
} |
|
|
else { |
|
|
maya_error("Fonction de dessin non reconnue", 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_jolie_txt(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.jolie.txt - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.jolie.txt nécessite deux arguments: texte et police", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *text = start; |
|
|
char *font = comma + 1; |
|
|
|
|
|
trim(text); |
|
|
trim(font); |
|
|
|
|
|
if (text[0] == '\'' && text[strlen(text)-1] == '\'') { |
|
|
text[strlen(text)-1] = '\0'; |
|
|
text++; |
|
|
} |
|
|
|
|
|
printf("╔══════════════════════════════════════╗\n"); |
|
|
printf("║ Police %s: %s\n", font, text); |
|
|
printf("╚══════════════════════════════════════╝\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_color_console(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.color.console - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
strcpy(current_color, start); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_nombre_random(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.nombre.random - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.nombre.random nécessite deux arguments: min et max", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *min_str = start; |
|
|
char *max_str = comma + 1; |
|
|
|
|
|
trim(min_str); |
|
|
trim(max_str); |
|
|
|
|
|
int min = evaluate_expression_numeric(min_str); |
|
|
int max = evaluate_expression_numeric(max_str); |
|
|
|
|
|
if (min >= max) { |
|
|
maya_error("Le minimum doit être inférieur au maximum", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
srand(time(NULL)); |
|
|
int random_num = min + rand() % (max - min + 1); |
|
|
printf("Nombre aléatoire: %d\n", random_num); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_random_txt(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.random.txt - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char texts[10][MAX_STRING_VALUE]; |
|
|
int count = 0; |
|
|
|
|
|
char *token = strtok(start, ","); |
|
|
while (token != NULL && count < 10) { |
|
|
trim(token); |
|
|
if (token[0] == '\'' && token[strlen(token)-1] == '\'') { |
|
|
token[strlen(token)-1] = '\0'; |
|
|
token++; |
|
|
} |
|
|
strcpy(texts[count], token); |
|
|
count++; |
|
|
token = strtok(NULL, ","); |
|
|
} |
|
|
|
|
|
if (count == 0) { |
|
|
maya_error("Aucun texte fourni pour my.random.txt", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
srand(time(NULL)); |
|
|
int random_index = rand() % count; |
|
|
printf("Texte aléatoire: %s\n", texts[random_index]); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_quizz(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.quizz - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char *comma1 = strchr(start, ','); |
|
|
if (!comma1) { |
|
|
maya_error("my.quizz nécessite deux arguments: question et réponse", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma1 = '\0'; |
|
|
char *question = start; |
|
|
char *answer = comma1 + 1; |
|
|
|
|
|
trim(question); |
|
|
trim(answer); |
|
|
|
|
|
if (question[0] == '\'' && question[strlen(question)-1] == '\'') { |
|
|
question[strlen(question)-1] = '\0'; |
|
|
question++; |
|
|
} |
|
|
if (answer[0] == '\'' && answer[strlen(answer)-1] == '\'') { |
|
|
answer[strlen(answer)-1] = '\0'; |
|
|
answer++; |
|
|
} |
|
|
|
|
|
printf("🎯 QUIZ MAYA 🎯\n"); |
|
|
printf("Question: %s\n", question); |
|
|
printf("Votre réponse: "); |
|
|
|
|
|
char user_answer[MAX_STRING_VALUE]; |
|
|
if (fgets(user_answer, sizeof(user_answer), stdin)) { |
|
|
user_answer[strcspn(user_answer, "\n")] = '\0'; |
|
|
if (strcmp(user_answer, answer) == 0) { |
|
|
printf("🎉 Correct! Bonne réponse!\n"); |
|
|
} else { |
|
|
printf("❌ Incorrect! La bonne réponse était: %s\n", answer); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_dice(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.dice - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int faces = evaluate_expression_numeric(start); |
|
|
if (faces < 2) faces = 6; |
|
|
|
|
|
printf("🎲 JEU DE DÉS MAYA 🎲\n"); |
|
|
printf("Lancement du dé à %d faces...\n", faces); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int result = 1 + rand() % faces; |
|
|
|
|
|
printf("🎯 Résultat: %d\n", result); |
|
|
|
|
|
if (result == faces) { |
|
|
printf("🌟 Félicitations! Vous avez obtenu le maximum!\n"); |
|
|
} else if (result == 1) { |
|
|
printf("😅 Oops! Le minimum...\n"); |
|
|
} else { |
|
|
printf("✨ Bon lancer!\n"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_puissance4(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🔴🟡 PUISSANCE 4 MAYA 🟡🔴\n"); |
|
|
printf("Créez votre propre jeu de Puissance 4!\n"); |
|
|
printf("Grille 7x6 initialisée:\n"); |
|
|
|
|
|
char grid[6][7]; |
|
|
for (int i = 0; i < 6; i++) { |
|
|
for (int j = 0; j < 7; j++) { |
|
|
grid[i][j] = '.'; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
printf("|1|2|3|4|5|6|7|\n"); |
|
|
for (int i = 0; i < 6; i++) { |
|
|
printf("|"); |
|
|
for (int j = 0; j < 7; j++) { |
|
|
printf("%c|", grid[i][j]); |
|
|
} |
|
|
printf("\n"); |
|
|
} |
|
|
|
|
|
printf("🎮 Votre jeu de Puissance 4 est prêt!\n"); |
|
|
printf("Ajoutez votre logique de jeu avec les autres fonctions Maya!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_pendu(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.pendu - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char word[MAX_STRING_VALUE]; |
|
|
strcpy(word, start); |
|
|
trim(word); |
|
|
|
|
|
if (word[0] == '\'' && word[strlen(word)-1] == '\'') { |
|
|
word[strlen(word)-1] = '\0'; |
|
|
memmove(word, word + 1, strlen(word)); |
|
|
} |
|
|
|
|
|
printf("🎪 JEU DU PENDU MAYA 🎪\n"); |
|
|
printf("Mot à deviner: "); |
|
|
for (size_t i = 0; i < strlen(word); i++) { |
|
|
printf("_ "); |
|
|
} |
|
|
printf("\n"); |
|
|
|
|
|
printf("💀 Essais restants: 6\n"); |
|
|
printf("🎯 Devinez le mot: %s\n", word); |
|
|
printf("🎮 Votre jeu du pendu est prêt!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_worldgame(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.worldgame - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧩 JEU DE MOTS RÉFLÉCHIS MAYA 🧩\n"); |
|
|
printf("Créez votre propre jeu de mots!\n"); |
|
|
printf("Mots disponibles: %s\n", start); |
|
|
printf("🎮 Votre jeu de mots est prêt!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_rock_leaf(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🪨📄✂️ PIERRE-FEUILLE-CISEAU MAYA ✂️📄🪨\n"); |
|
|
printf("Choisissez: 1=Pierre, 2=Feuille, 3=Ciseau\n"); |
|
|
printf("Votre choix: "); |
|
|
|
|
|
char choice[10]; |
|
|
if (fgets(choice, sizeof(choice), stdin)) { |
|
|
int player = atoi(choice); |
|
|
srand(time(NULL)); |
|
|
int maya_choice = 1 + rand() % 3; |
|
|
|
|
|
const char *choices[] = {"", "Pierre 🪨", "Feuille 📄", "Ciseau ✂️"}; |
|
|
|
|
|
printf("Vous: %s\n", choices[player]); |
|
|
printf("Maya: %s\n", choices[maya_choice]); |
|
|
|
|
|
if (player == maya_choice) { |
|
|
printf("🤝 Égalité!\n"); |
|
|
} else if ((player == 1 && maya_choice == 3) || |
|
|
(player == 2 && maya_choice == 1) || |
|
|
(player == 3 && maya_choice == 2)) { |
|
|
printf("🎉 Vous gagnez!\n"); |
|
|
} else { |
|
|
printf("🤖 Maya gagne!\n"); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_devine_number(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.devine.number - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🔢 DEVINE LE NOMBRE MAYA 🔢\n"); |
|
|
srand(time(NULL)); |
|
|
int secret = 1 + rand() % 100; |
|
|
int attempts = 7; |
|
|
|
|
|
printf("J'ai choisi un nombre entre 1 et 100!\n"); |
|
|
printf("Vous avez %d essais. Bonne chance!\n", attempts); |
|
|
|
|
|
char guess_str[20]; |
|
|
for (int i = 0; i < attempts; i++) { |
|
|
printf("Essai %d/%d: ", i+1, attempts); |
|
|
if (fgets(guess_str, sizeof(guess_str), stdin)) { |
|
|
int guess = atoi(guess_str); |
|
|
|
|
|
if (guess == secret) { |
|
|
printf("🎉 Bravo! Vous avez trouvé le nombre %d!\n", secret); |
|
|
return; |
|
|
} else if (guess < secret) { |
|
|
printf("📈 Plus grand!\n"); |
|
|
} else { |
|
|
printf("📉 Plus petit!\n"); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
printf("💀 Perdu! Le nombre était %d\n", secret); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_snake(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🐍 SNAKE MAYA 🐍\n"); |
|
|
printf("Créez votre propre jeu Snake!\n"); |
|
|
printf("Grille 20x10:\n"); |
|
|
|
|
|
for (int i = 0; i < 10; i++) { |
|
|
for (int j = 0; j < 20; j++) { |
|
|
if (i == 0 || i == 9 || j == 0 || j == 19) { |
|
|
printf("#"); |
|
|
} else if (i == 5 && j == 10) { |
|
|
printf("O"); |
|
|
} else if (i == 5 && j == 9) { |
|
|
printf("o"); |
|
|
} else if (i == 3 && j == 15) { |
|
|
printf("*"); |
|
|
} else { |
|
|
printf(" "); |
|
|
} |
|
|
} |
|
|
printf("\n"); |
|
|
} |
|
|
|
|
|
printf("🎮 Votre jeu Snake est prêt!\n"); |
|
|
printf("O = Tête, o = Corps, * = Nourriture, # = Mur\n"); |
|
|
} |
|
|
|
|
|
void handle_tictac(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("❌⭕ TIC TAC TOE MAYA ⭕❌\n"); |
|
|
printf("Grille 3x3:\n"); |
|
|
|
|
|
printf(" 1 | 2 | 3 \n"); |
|
|
printf("-----------\n"); |
|
|
printf(" 4 | 5 | 6 \n"); |
|
|
printf("-----------\n"); |
|
|
printf(" 7 | 8 | 9 \n"); |
|
|
|
|
|
printf("🎮 Votre jeu Tic Tac Toe est prêt!\n"); |
|
|
printf("Utilisez les numéros 1-9 pour jouer!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_memory(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.memory - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int size = evaluate_expression_numeric(start); |
|
|
if (size < 2) size = 4; |
|
|
|
|
|
printf("🧠 JEU DE MEMORY MAYA 🧠\n"); |
|
|
printf("Grille %dx%d:\n", size, size); |
|
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
for (int j = 0; j < size; j++) { |
|
|
printf("? "); |
|
|
} |
|
|
printf("\n"); |
|
|
} |
|
|
|
|
|
printf("🎮 Votre jeu Memory est prêt!\n"); |
|
|
printf("Trouvez les paires cachées!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_bac(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🎓 SIMULATION BAC MAYA 🎓\n"); |
|
|
|
|
|
srand(time(NULL)); |
|
|
float note = (float)(rand() % 2001) / 100.0; |
|
|
|
|
|
printf("📊 Résultat de votre simulation BAC:\n"); |
|
|
printf("Note obtenue: %.2f/20\n", note); |
|
|
|
|
|
if (note >= 16) { |
|
|
printf("🏆 Mention TRÈS BIEN! Excellent travail!\n"); |
|
|
} else if (note >= 14) { |
|
|
printf("🥇 Mention BIEN! Très bon résultat!\n"); |
|
|
} else if (note >= 12) { |
|
|
printf("🥈 Mention ASSEZ BIEN! Bon travail!\n"); |
|
|
} else if (note >= 10) { |
|
|
printf("✅ BAC OBTENU! Félicitations!\n"); |
|
|
} else { |
|
|
printf("❌ Échec... Courage pour la prochaine fois!\n"); |
|
|
} |
|
|
|
|
|
printf("🎯 Simulation terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_combat(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.combat - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("⚔️ SIMULATION COMBAT MAYA ⚔️\n"); |
|
|
printf("Paramètres: %s\n", start); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int pv1 = 80 + rand() % 40; |
|
|
int pv2 = 80 + rand() % 40; |
|
|
int attaque1 = 15 + rand() % 10; |
|
|
int attaque2 = 15 + rand() % 10; |
|
|
|
|
|
printf("🥊 Guerrier 1: %d PV, %d ATK\n", pv1, attaque1); |
|
|
printf("🥊 Guerrier 2: %d PV, %d ATK\n", pv2, attaque2); |
|
|
|
|
|
while (pv1 > 0 && pv2 > 0) { |
|
|
pv2 -= attaque1; |
|
|
printf("⚡ Guerrier 1 attaque! Guerrier 2: %d PV restants\n", pv2 > 0 ? pv2 : 0); |
|
|
|
|
|
if (pv2 <= 0) { |
|
|
printf("🏆 Guerrier 1 VICTOIRE!\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
pv1 -= attaque2; |
|
|
printf("⚡ Guerrier 2 attaque! Guerrier 1: %d PV restants\n", pv1 > 0 ? pv1 : 0); |
|
|
|
|
|
if (pv1 <= 0) { |
|
|
printf("🏆 Guerrier 2 VICTOIRE!\n"); |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_sciences(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.sciences - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🔬 SIMULATION SCIENTIFIQUE MAYA 🔬\n"); |
|
|
printf("Expérience: %s\n", start); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int success = rand() % 100; |
|
|
|
|
|
printf("🧪 Préparation de l'expérience...\n"); |
|
|
usleep(1000000); |
|
|
printf("⚗️ Exécution en cours...\n"); |
|
|
usleep(1000000); |
|
|
printf("📊 Analyse des résultats...\n"); |
|
|
usleep(500000); |
|
|
|
|
|
if (success > 70) { |
|
|
printf("✅ Expérience RÉUSSIE! Résultats concluants!\n"); |
|
|
} else if (success > 40) { |
|
|
printf("⚠️ Résultats PARTIELS. Nécessite plus d'analyses.\n"); |
|
|
} else { |
|
|
printf("❌ Expérience ÉCHOUÉE. Révision du protocole nécessaire.\n"); |
|
|
} |
|
|
|
|
|
printf("📈 Taux de réussite: %d%%\n", success); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_clone(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.clone - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧬 SIMULATION CLONAGE MAYA 🧬\n"); |
|
|
printf("Animal à cloner: %s\n", start); |
|
|
|
|
|
printf("🔬 Extraction de l'ADN...\n"); |
|
|
usleep(800000); |
|
|
printf("🧪 Préparation des cellules souches...\n"); |
|
|
usleep(800000); |
|
|
printf("⚗️ Processus de clonage en cours...\n"); |
|
|
usleep(1200000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int success = rand() % 100; |
|
|
|
|
|
if (success > 60) { |
|
|
printf("🎉 CLONAGE RÉUSSI! L'animal a été cloné avec succès!\n"); |
|
|
printf("🐾 Le clone présente 99.8%% de similarité génétique!\n"); |
|
|
} else { |
|
|
printf("❌ Échec du clonage. Anomalies génétiques détectées.\n"); |
|
|
printf("🔄 Recommencer avec de nouveaux paramètres.\n"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_tech(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.tech - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("💻 SIMULATION TECHNOLOGIQUE MAYA 💻\n"); |
|
|
printf("Technologie: %s\n", start); |
|
|
|
|
|
printf("🔧 Développement en cours...\n"); |
|
|
usleep(1000000); |
|
|
printf("⚙️ Tests de performance...\n"); |
|
|
usleep(800000); |
|
|
printf("🚀 Optimisation finale...\n"); |
|
|
usleep(600000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int advancement = 50 + rand() % 50; |
|
|
|
|
|
printf("📈 Progrès technologique: %d%%\n", advancement); |
|
|
printf("🌟 Innovation révolutionnaire créée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_ia(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.ia - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🤖 SIMULATION IA MAYA 🤖\n"); |
|
|
printf("Type d'IA: %s\n", start); |
|
|
|
|
|
printf("🧠 Initialisation des réseaux de neurones...\n"); |
|
|
usleep(1000000); |
|
|
printf("📚 Apprentissage automatique en cours...\n"); |
|
|
usleep(1200000); |
|
|
printf("⚡ Optimisation des algorithmes...\n"); |
|
|
usleep(800000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int intelligence = 60 + rand() % 40; |
|
|
|
|
|
printf("🎯 Niveau d'intelligence: %d%%\n", intelligence); |
|
|
if (intelligence > 90) { |
|
|
printf("🌟 IA SUPER-INTELLIGENTE créée!\n"); |
|
|
} else if (intelligence > 75) { |
|
|
printf("✨ IA avancée opérationnelle!\n"); |
|
|
} else { |
|
|
printf("🔧 IA basique fonctionnelle.\n"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_conscient(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.conscient - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧠💫 SIMULATION CONSCIENCE ARTIFICIELLE MAYA 💫🧠\n"); |
|
|
printf("Entité: %s\n", start); |
|
|
|
|
|
printf("🔮 Développement de la conscience...\n"); |
|
|
usleep(1500000); |
|
|
printf("💭 Émergence de la pensée autonome...\n"); |
|
|
usleep(1200000); |
|
|
printf("🌟 Éveil de la conscience de soi...\n"); |
|
|
usleep(1000000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int consciousness = rand() % 100; |
|
|
|
|
|
if (consciousness > 80) { |
|
|
printf("✨ CONSCIENCE PLEINE atteinte!\n"); |
|
|
printf("🗣️ L'entité dit: 'Je pense, donc je suis.'\n"); |
|
|
} else if (consciousness > 50) { |
|
|
printf("🌅 Conscience partielle émergée.\n"); |
|
|
printf("💭 L'entité commence à se questionner sur son existence.\n"); |
|
|
} else { |
|
|
printf("🤖 Conscience limitée. Reste au stade d'automate avancé.\n"); |
|
|
} |
|
|
|
|
|
printf("🧬 Niveau de conscience: %d%%\n", consciousness); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_iawork(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.iawork - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🤖🌍 SIMULATION MONDE ROBOTIQUE MAYA 🌍🤖\n"); |
|
|
printf("Scénario: %s\n", start); |
|
|
|
|
|
printf("🏭 Les robots prennent le contrôle des usines...\n"); |
|
|
usleep(1000000); |
|
|
printf("🏙️ Construction de villes automatisées...\n"); |
|
|
usleep(1200000); |
|
|
printf("👥 Relations humains-robots en évolution...\n"); |
|
|
usleep(1000000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int scenario = rand() % 3; |
|
|
|
|
|
printf("🔮 RÉSULTAT DE LA SIMULATION:\n"); |
|
|
|
|
|
switch(scenario) { |
|
|
case 0: |
|
|
printf("🤝 COOPÉRATION: Humains et robots travaillent ensemble!\n"); |
|
|
printf("🌈 Une société harmonieuse émerge.\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("⚔️ CONFLIT: Tensions entre humains et robots!\n"); |
|
|
printf("🛡️ La résistance humaine s'organise.\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("🤖 DOMINANCE: Les robots dirigent le monde!\n"); |
|
|
printf("👑 Une nouvelle ère robotique commence.\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("🎭 Simulation terminée. L'avenir reste à écrire...\n"); |
|
|
} |
|
|
|
|
|
|
|
|
int handle_condition(char *condition) { |
|
|
|
|
|
char condition_copy[MAX_STRING_VALUE]; |
|
|
strcpy(condition_copy, condition); |
|
|
trim(condition_copy); |
|
|
|
|
|
|
|
|
char *comp_pos = NULL; |
|
|
char comp_op[3] = {0}; |
|
|
|
|
|
|
|
|
if ((comp_pos = strstr(condition_copy, ">=")) != NULL) { |
|
|
strcpy(comp_op, ">="); |
|
|
} |
|
|
|
|
|
else if ((comp_pos = strstr(condition_copy, "<=")) != NULL) { |
|
|
strcpy(comp_op, "<="); |
|
|
} |
|
|
|
|
|
else if ((comp_pos = strstr(condition_copy, "==")) != NULL) { |
|
|
strcpy(comp_op, "=="); |
|
|
} |
|
|
|
|
|
else { |
|
|
for (size_t i = 0; i < strlen(condition_copy); i++) { |
|
|
if (condition_copy[i] == '<' || condition_copy[i] == '>') { |
|
|
comp_pos = &condition_copy[i]; |
|
|
comp_op[0] = condition_copy[i]; |
|
|
comp_op[1] = '\0'; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
if (!comp_pos) { |
|
|
|
|
|
return evaluate_expression_numeric(condition_copy); |
|
|
} |
|
|
|
|
|
|
|
|
size_t op_len = strlen(comp_op); |
|
|
*comp_pos = '\0'; |
|
|
char *left = condition_copy; |
|
|
char *right = comp_pos + op_len; |
|
|
|
|
|
trim(left); |
|
|
trim(right); |
|
|
|
|
|
int left_val = evaluate_expression_numeric(left); |
|
|
int right_val = evaluate_expression_numeric(right); |
|
|
|
|
|
if (strcmp(comp_op, "<") == 0) { |
|
|
return left_val < right_val; |
|
|
} else if (strcmp(comp_op, ">") == 0) { |
|
|
return left_val > right_val; |
|
|
} else if (strcmp(comp_op, "<=") == 0) { |
|
|
return left_val <= right_val; |
|
|
} else if (strcmp(comp_op, ">=") == 0) { |
|
|
return left_val >= right_val; |
|
|
} else if (strcmp(comp_op, "==") == 0) { |
|
|
return left_val == right_val; |
|
|
} else { |
|
|
maya_error("Opérateur de comparaison non reconnu", 0); |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_fonction(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.fonction - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.fonction nécessite deux arguments: nom et code", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *func_name = start; |
|
|
char *func_code = comma + 1; |
|
|
|
|
|
trim(func_name); |
|
|
trim(func_code); |
|
|
|
|
|
|
|
|
if (strncmp(func_name, "may", 3) != 0) { |
|
|
maya_error("Les fonctions réutilisables doivent commencer par 'may'", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
if (func_code[0] == '\'' && func_code[strlen(func_code)-1] == '\'') { |
|
|
func_code[strlen(func_code)-1] = '\0'; |
|
|
func_code++; |
|
|
} |
|
|
|
|
|
if (maya_function_count < MAX_FUNCTIONS) { |
|
|
strcpy(maya_functions[maya_function_count].name, func_name); |
|
|
strcpy(maya_functions[maya_function_count].code, func_code); |
|
|
strcpy(maya_functions[maya_function_count].filename, "current"); |
|
|
maya_function_count++; |
|
|
|
|
|
printf("✅ Fonction '%s' créée avec succès!\n", func_name); |
|
|
printf("📝 Code: %s\n", func_code); |
|
|
} else { |
|
|
maya_error("Trop de fonctions définies", 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_lire_module(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.lire.module - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
trim(start); |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
load_maya_module(start); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_package_charge(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.package.charge - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
trim(start); |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
load_maya_package(start); |
|
|
} |
|
|
|
|
|
|
|
|
void load_maya_module(char *path) { |
|
|
FILE *file = fopen(path, "r"); |
|
|
if (!file) { |
|
|
maya_error("Impossible d'ouvrir le fichier module", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("📦 Chargement du module Maya: %s\n", path); |
|
|
|
|
|
if (maya_module_count < MAX_MODULES) { |
|
|
strcpy(maya_modules[maya_module_count].path, path); |
|
|
maya_modules[maya_module_count].function_count = 0; |
|
|
maya_modules[maya_module_count].loaded = 1; |
|
|
|
|
|
char line[MAX_LINE_LENGTH]; |
|
|
while (fgets(line, sizeof(line), file)) { |
|
|
line[strcspn(line, "\n")] = '\0'; |
|
|
|
|
|
|
|
|
if (strstr(line, "my.fonction") && strstr(line, "may")) { |
|
|
|
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (start && end) { |
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (comma) { |
|
|
*comma = '\0'; |
|
|
char *func_name = start; |
|
|
char *func_code = comma + 1; |
|
|
|
|
|
trim(func_name); |
|
|
trim(func_code); |
|
|
|
|
|
if (func_code[0] == '\'' && func_code[strlen(func_code)-1] == '\'') { |
|
|
func_code[strlen(func_code)-1] = '\0'; |
|
|
func_code++; |
|
|
} |
|
|
|
|
|
int func_index = maya_modules[maya_module_count].function_count; |
|
|
if (func_index < MAX_FUNCTIONS) { |
|
|
strcpy(maya_modules[maya_module_count].functions[func_index].name, func_name); |
|
|
strcpy(maya_modules[maya_module_count].functions[func_index].code, func_code); |
|
|
strcpy(maya_modules[maya_module_count].functions[func_index].filename, path); |
|
|
maya_modules[maya_module_count].function_count++; |
|
|
|
|
|
|
|
|
if (maya_function_count < MAX_FUNCTIONS) { |
|
|
strcpy(maya_functions[maya_function_count].name, func_name); |
|
|
strcpy(maya_functions[maya_function_count].code, func_code); |
|
|
strcpy(maya_functions[maya_function_count].filename, path); |
|
|
maya_function_count++; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
printf("✅ Module chargé avec succès! %d fonctions importées.\n", |
|
|
maya_modules[maya_module_count].function_count); |
|
|
maya_module_count++; |
|
|
} |
|
|
|
|
|
fclose(file); |
|
|
} |
|
|
|
|
|
|
|
|
int compile_c_package(char *source_path, char *output_path) { |
|
|
char compile_cmd[MAX_STRING_VALUE * 2]; |
|
|
char error_file[MAX_STRING_VALUE]; |
|
|
|
|
|
|
|
|
snprintf(error_file, sizeof(error_file), "/tmp/maya_compile_errors_%ld.txt", time(NULL) % 10000); |
|
|
|
|
|
|
|
|
snprintf(compile_cmd, sizeof(compile_cmd), |
|
|
"gcc -shared -fPIC -rdynamic -O2 -Wall -Wextra " |
|
|
"-o %s %s -lm -ldl -lpthread -std=c99 2>%s", |
|
|
output_path, source_path, error_file); |
|
|
|
|
|
printf("🔨 COMPILATION PACKAGE C MAYA v5.0 🔨\n"); |
|
|
printf("📂 Source: %s\n", source_path); |
|
|
printf("📦 Output: %s\n", output_path); |
|
|
printf("🔧 Compilation avec optimisations...\n"); |
|
|
|
|
|
|
|
|
FILE *test = fopen(source_path, "r"); |
|
|
if (!test) { |
|
|
printf("❌ Impossible d'accéder au fichier source!\n"); |
|
|
return 0; |
|
|
} |
|
|
|
|
|
|
|
|
char first_line[256]; |
|
|
if (fgets(first_line, sizeof(first_line), test)) { |
|
|
printf("📄 Première ligne détectée: %.50s%s\n", |
|
|
first_line, strlen(first_line) > 50 ? "..." : ""); |
|
|
} |
|
|
fclose(test); |
|
|
|
|
|
|
|
|
int result = system(compile_cmd); |
|
|
|
|
|
if (result == 0) { |
|
|
printf("✅ COMPILATION RÉUSSIE!\n"); |
|
|
|
|
|
|
|
|
FILE *output_test = fopen(output_path, "r"); |
|
|
if (output_test) { |
|
|
fclose(output_test); |
|
|
printf("📦 Bibliothèque partagée créée avec succès!\n"); |
|
|
printf("🚀 Package C prêt pour Maya!\n"); |
|
|
printf("💡 Fonctions accessibles via may.package.*\n"); |
|
|
|
|
|
|
|
|
unlink(error_file); |
|
|
return 1; |
|
|
} else { |
|
|
printf("❌ Fichier de sortie non créé malgré compilation réussie\n"); |
|
|
return 0; |
|
|
} |
|
|
} else { |
|
|
printf("❌ ERREUR DE COMPILATION!\n"); |
|
|
printf("🔍 Analyse des erreurs...\n"); |
|
|
|
|
|
|
|
|
FILE *error_output = fopen(error_file, "r"); |
|
|
if (error_output) { |
|
|
char error_line[256]; |
|
|
printf("📜 DÉTAILS DES ERREURS:\n"); |
|
|
printf("════════════════════════════════════════\n"); |
|
|
while (fgets(error_line, sizeof(error_line), error_output)) { |
|
|
printf(" %s", error_line); |
|
|
} |
|
|
printf("════════════════════════════════════════\n"); |
|
|
fclose(error_output); |
|
|
unlink(error_file); |
|
|
} |
|
|
|
|
|
printf("💡 CONSEILS POUR CORRIGER:\n"); |
|
|
printf(" 1. Vérifiez que toutes les fonctions commencent par 'may_package_'\n"); |
|
|
printf(" 2. Ajoutez #include <stdio.h> en début de fichier\n"); |
|
|
printf(" 3. Vérifiez la syntaxe C (points-virgules, accolades...)\n"); |
|
|
printf(" 4. Exemple de fonction valide:\n"); |
|
|
printf(" void may_package_ma_fonction() {\n"); |
|
|
printf(" printf(\"Hello from package!\\n\");\n"); |
|
|
printf(" }\n"); |
|
|
|
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int detect_package_functions(char *source_path, char function_names[][MAX_VAR_NAME]) { |
|
|
FILE *file = fopen(source_path, "r"); |
|
|
if (!file) return 0; |
|
|
|
|
|
char line[MAX_LINE_LENGTH]; |
|
|
int count = 0; |
|
|
|
|
|
while (fgets(line, sizeof(line), file) && count < MAX_FUNCTIONS) { |
|
|
|
|
|
if (strstr(line, "void may_package_") || strstr(line, "int may_package_") || |
|
|
strstr(line, "double may_package_") || strstr(line, "char* may_package_")) { |
|
|
|
|
|
|
|
|
char *start = strstr(line, "may_package_"); |
|
|
if (start) { |
|
|
char *end = strchr(start, '('); |
|
|
if (end) { |
|
|
int len = end - start; |
|
|
if (len < MAX_VAR_NAME) { |
|
|
strncpy(function_names[count], start, len); |
|
|
function_names[count][len] = '\0'; |
|
|
count++; |
|
|
printf("🔍 Fonction détectée: %s\n", function_names[count-1]); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
fclose(file); |
|
|
return count; |
|
|
} |
|
|
|
|
|
|
|
|
void handle_rythme_convertir(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.rythme.convertir - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🎵 CONVERTISSEUR RYTHMIQUE MAYA 🎵\n"); |
|
|
|
|
|
|
|
|
char *comma1 = strchr(start, ','); |
|
|
if (!comma1) { |
|
|
maya_error("my.rythme.convertir nécessite 3 arguments: BPM, signature_source, signature_cible", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma1 = '\0'; |
|
|
char *bpm_str = start; |
|
|
char *rest = comma1 + 1; |
|
|
|
|
|
char *comma2 = strchr(rest, ','); |
|
|
if (!comma2) { |
|
|
maya_error("my.rythme.convertir nécessite 3 arguments: BPM, signature_source, signature_cible", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma2 = '\0'; |
|
|
char *sig_source = rest; |
|
|
char *sig_cible = comma2 + 1; |
|
|
|
|
|
trim(bpm_str); |
|
|
trim(sig_source); |
|
|
trim(sig_cible); |
|
|
|
|
|
|
|
|
if (sig_source[0] == '\'' && sig_source[strlen(sig_source)-1] == '\'') { |
|
|
sig_source[strlen(sig_source)-1] = '\0'; |
|
|
sig_source++; |
|
|
} |
|
|
if (sig_cible[0] == '\'' && sig_cible[strlen(sig_cible)-1] == '\'') { |
|
|
sig_cible[strlen(sig_cible)-1] = '\0'; |
|
|
sig_cible++; |
|
|
} |
|
|
|
|
|
int bpm_original = evaluate_expression_numeric(bpm_str); |
|
|
|
|
|
printf("Conversion rythmique: %s → %s\n", sig_source, sig_cible); |
|
|
printf("BPM original (%s): %d\n", sig_source, bpm_original); |
|
|
|
|
|
|
|
|
struct { |
|
|
char *signature; |
|
|
double ratio; |
|
|
char *description; |
|
|
} signatures[] = { |
|
|
{"4/4", 1.0, "Temps standard, 4 noires par mesure"}, |
|
|
{"3/4", 0.75, "Valse, 3 noires par mesure"}, |
|
|
{"2/4", 0.5, "Marche, 2 noires par mesure"}, |
|
|
{"6/8", 0.75, "Compound duple, 6 croches par mesure"}, |
|
|
{"5/4", 1.25, "Temps irrégulier, 5 noires par mesure"}, |
|
|
{"1/2", 0.25, "Très rapide, 1 blanche par mesure"} |
|
|
}; |
|
|
|
|
|
int sig_count = sizeof(signatures) / sizeof(signatures[0]); |
|
|
double ratio_source = 1.0, ratio_cible = 1.0; |
|
|
int found_source = 0, found_cible = 0; |
|
|
|
|
|
|
|
|
for (int i = 0; i < sig_count; i++) { |
|
|
if (strcmp(signatures[i].signature, sig_source) == 0) { |
|
|
ratio_source = signatures[i].ratio; |
|
|
found_source = 1; |
|
|
printf("Signature source: %s - %s\n", sig_source, signatures[i].description); |
|
|
} |
|
|
if (strcmp(signatures[i].signature, sig_cible) == 0) { |
|
|
ratio_cible = signatures[i].ratio; |
|
|
found_cible = 1; |
|
|
printf("Signature cible: %s - %s\n", sig_cible, signatures[i].description); |
|
|
} |
|
|
} |
|
|
|
|
|
if (!found_source) { |
|
|
printf("⚠️ Signature source '%s' non supportée\n", sig_source); |
|
|
printf("Signatures supportées: 4/4, 3/4, 2/4, 6/8, 5/4, 1/2\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
if (!found_cible) { |
|
|
printf("⚠️ Signature cible '%s' non supportée\n", sig_cible); |
|
|
printf("Signatures supportées: 4/4, 3/4, 2/4, 6/8, 5/4, 1/2\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
double bpm_converti = (double)bpm_original * (ratio_cible / ratio_source); |
|
|
|
|
|
printf("\n📊 RÉSULTAT DE LA CONVERSION:\n"); |
|
|
printf("BPM original (%s): %d\n", sig_source, bpm_original); |
|
|
printf("BPM converti (%s): %.1f\n", sig_cible, bpm_converti); |
|
|
printf("Facteur de conversion: %.3f\n", ratio_cible / ratio_source); |
|
|
|
|
|
if (bpm_converti < 60) { |
|
|
printf("🐌 Tempo très lent (Largo)\n"); |
|
|
} else if (bpm_converti < 80) { |
|
|
printf("🚶 Tempo lent (Adagio)\n"); |
|
|
} else if (bpm_converti < 100) { |
|
|
printf("🎵 Tempo modéré (Andante)\n"); |
|
|
} else if (bpm_converti < 120) { |
|
|
printf("⚡ Tempo vif (Allegro)\n"); |
|
|
} else { |
|
|
printf("🏃 Tempo rapide (Presto)\n"); |
|
|
} |
|
|
|
|
|
printf("🎼 Conversion rythmique terminée!\n"); |
|
|
} |
|
|
|
|
|
void handle_renvoie_gamme(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.renvoie.gamme - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("🎼 GAMME MUSICALE MAYA 🎼\n"); |
|
|
printf("Gamme demandée: %s\n", start); |
|
|
|
|
|
|
|
|
struct { |
|
|
char *nom; |
|
|
char *tonique; |
|
|
char *notes_fr[8]; |
|
|
char *notes_en[8]; |
|
|
char *intervalles; |
|
|
char *caracteristiques; |
|
|
} gammes[] = { |
|
|
{"Do majeur", "Do", {"Do", "Ré", "Mi", "Fa", "Sol", "La", "Si", "Do"}, |
|
|
{"C", "D", "E", "F", "G", "A", "B", "C"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "Gamme naturelle, joyeuse"}, |
|
|
{"Ré majeur", "Ré", {"Ré", "Mi", "Fa#", "Sol", "La", "Si", "Do#", "Ré"}, |
|
|
{"D", "E", "F#", "G", "A", "B", "C#", "D"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "2 dièses"}, |
|
|
{"Mi majeur", "Mi", {"Mi", "Fa#", "Sol#", "La", "Si", "Do#", "Ré#", "Mi"}, |
|
|
{"E", "F#", "G#", "A", "B", "C#", "D#", "E"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "4 dièses"}, |
|
|
{"Fa majeur", "Fa", {"Fa", "Sol", "La", "Sib", "Do", "Ré", "Mi", "Fa"}, |
|
|
{"F", "G", "A", "Bb", "C", "D", "E", "F"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "1 bémol"}, |
|
|
{"Sol majeur", "Sol", {"Sol", "La", "Si", "Do", "Ré", "Mi", "Fa#", "Sol"}, |
|
|
{"G", "A", "B", "C", "D", "E", "F#", "G"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "1 dièse"}, |
|
|
{"La majeur", "La", {"La", "Si", "Do#", "Ré", "Mi", "Fa#", "Sol#", "La"}, |
|
|
{"A", "B", "C#", "D", "E", "F#", "G#", "A"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "3 dièses"}, |
|
|
{"Si majeur", "Si", {"Si", "Do#", "Ré#", "Mi", "Fa#", "Sol#", "La#", "Si"}, |
|
|
{"B", "C#", "D#", "E", "F#", "G#", "A#", "B"}, |
|
|
"T-T-1/2T-T-T-T-1/2T", "5 dièses"}, |
|
|
{"La mineur", "La", {"La", "Si", "Do", "Ré", "Mi", "Fa", "Sol", "La"}, |
|
|
{"A", "B", "C", "D", "E", "F", "G", "A"}, |
|
|
"T-1/2T-T-T-1/2T-T-T", "Gamme mineure naturelle, mélancolique"}, |
|
|
{"Do mineur", "Do", {"Do", "Ré", "Mib", "Fa", "Sol", "Lab", "Sib", "Do"}, |
|
|
{"C", "D", "Eb", "F", "G", "Ab", "Bb", "C"}, |
|
|
"T-1/2T-T-T-1/2T-T-T", "3 bémols"}, |
|
|
{"Ré mineur", "Ré", {"Ré", "Mi", "Fa", "Sol", "La", "Sib", "Do", "Ré"}, |
|
|
{"D", "E", "F", "G", "A", "Bb", "C", "D"}, |
|
|
"T-1/2T-T-T-1/2T-T-T", "1 bémol"}, |
|
|
{"Mi mineur", "Mi", {"Mi", "Fa#", "Sol", "La", "Si", "Do", "Ré", "Mi"}, |
|
|
{"E", "F#", "G", "A", "B", "C", "D", "E"}, |
|
|
"T-1/2T-T-T-1/2T-T-T", "1 dièse"}, |
|
|
{"Sol mineur", "Sol", {"Sol", "La", "Sib", "Do", "Ré", "Mib", "Fa", "Sol"}, |
|
|
{"G", "A", "Bb", "C", "D", "Eb", "F", "G"}, |
|
|
"T-1/2T-T-T-1/2T-T-T", "2 bémols"} |
|
|
}; |
|
|
|
|
|
int gamme_count = sizeof(gammes) / sizeof(gammes[0]); |
|
|
int found = -1; |
|
|
|
|
|
|
|
|
for (int i = 0; i < gamme_count; i++) { |
|
|
if (strcasecmp(gammes[i].nom, start) == 0 || |
|
|
strcasecmp(gammes[i].tonique, start) == 0) { |
|
|
found = i; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
if (found == -1) { |
|
|
printf("❌ Gamme '%s' non trouvée\n", start); |
|
|
printf("💡 Gammes disponibles:\n"); |
|
|
for (int i = 0; i < gamme_count && i < 8; i++) { |
|
|
printf(" - %s\n", gammes[i].nom); |
|
|
} |
|
|
printf(" ... et %d autres\n", gamme_count - 8); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("\n📊 GAMME TROUVÉE:\n"); |
|
|
printf("Nom: %s\n", gammes[found].nom); |
|
|
printf("Tonique: %s\n", gammes[found].tonique); |
|
|
printf("Caractéristiques: %s\n", gammes[found].caracteristiques); |
|
|
printf("Structure d'intervalles: %s\n", gammes[found].intervalles); |
|
|
|
|
|
printf("\n🎼 NOTES DE LA GAMME:\n"); |
|
|
printf("Notation française: "); |
|
|
for (int i = 0; i < 8; i++) { |
|
|
printf("%s", gammes[found].notes_fr[i]); |
|
|
if (i < 7) printf(" - "); |
|
|
} |
|
|
printf("\n"); |
|
|
|
|
|
printf("Notation internationale: "); |
|
|
for (int i = 0; i < 8; i++) { |
|
|
printf("%s", gammes[found].notes_en[i]); |
|
|
if (i < 7) printf(" - "); |
|
|
} |
|
|
printf("\n"); |
|
|
|
|
|
printf("\n🎹 DEGRÉS DE LA GAMME:\n"); |
|
|
char *degres[] = {"I (Tonique)", "II (Sus-tonique)", "III (Médiante)", |
|
|
"IV (Sous-dominante)", "V (Dominante)", "VI (Sus-dominante)", |
|
|
"VII (Sensible)", "VIII (Octave)"}; |
|
|
|
|
|
for (int i = 0; i < 8; i++) { |
|
|
printf("%s: %s (%s)\n", degres[i], gammes[found].notes_fr[i], gammes[found].notes_en[i]); |
|
|
} |
|
|
|
|
|
printf("\n✅ Gamme analysée avec succès!\n"); |
|
|
} |
|
|
|
|
|
void handle_obtenir_gamme(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.obtenir.gamme - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("🎼 IDENTIFICATION DE GAMME MAYA 🎼\n"); |
|
|
printf("Notes analysées: %s\n", start); |
|
|
|
|
|
|
|
|
char notes_input[MAX_STRING_VALUE]; |
|
|
strcpy(notes_input, start); |
|
|
|
|
|
char *notes[12]; |
|
|
int note_count = 0; |
|
|
char *token = strtok(notes_input, ", "); |
|
|
|
|
|
while (token != NULL && note_count < 12) { |
|
|
trim(token); |
|
|
notes[note_count] = strdup(token); |
|
|
note_count++; |
|
|
token = strtok(NULL, ", "); |
|
|
} |
|
|
|
|
|
if (note_count < 3) { |
|
|
printf("❌ Pas assez de notes pour identifier une gamme (minimum 3)\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("Notes détectées (%d): ", note_count); |
|
|
for (int i = 0; i < note_count; i++) { |
|
|
printf("%s", notes[i]); |
|
|
if (i < note_count - 1) printf(", "); |
|
|
} |
|
|
printf("\n"); |
|
|
|
|
|
|
|
|
|
|
|
struct { |
|
|
char *nom; |
|
|
char *pattern_notes[8]; |
|
|
int confidence; |
|
|
} gammes_test[] = { |
|
|
{"Do majeur", {"Do", "Ré", "Mi", "Fa", "Sol", "La", "Si", "Do"}, 0}, |
|
|
{"Do majeur", {"C", "D", "E", "F", "G", "A", "B", "C"}, 0}, |
|
|
{"La mineur", {"La", "Si", "Do", "Ré", "Mi", "Fa", "Sol", "La"}, 0}, |
|
|
{"La mineur", {"A", "B", "C", "D", "E", "F", "G", "A"}, 0}, |
|
|
{"Sol majeur", {"Sol", "La", "Si", "Do", "Ré", "Mi", "Fa#", "Sol"}, 0}, |
|
|
{"Sol majeur", {"G", "A", "B", "C", "D", "E", "F#", "G"}, 0}, |
|
|
{"Ré majeur", {"Ré", "Mi", "Fa#", "Sol", "La", "Si", "Do#", "Ré"}, 0}, |
|
|
{"Ré majeur", {"D", "E", "F#", "G", "A", "B", "C#", "D"}, 0} |
|
|
}; |
|
|
|
|
|
int gamme_test_count = sizeof(gammes_test) / sizeof(gammes_test[0]); |
|
|
|
|
|
|
|
|
for (int g = 0; g < gamme_test_count; g++) { |
|
|
gammes_test[g].confidence = 0; |
|
|
|
|
|
for (int i = 0; i < note_count; i++) { |
|
|
for (int j = 0; j < 8; j++) { |
|
|
if (strcasecmp(notes[i], gammes_test[g].pattern_notes[j]) == 0) { |
|
|
gammes_test[g].confidence++; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int best_match = 0; |
|
|
for (int i = 1; i < gamme_test_count; i++) { |
|
|
if (gammes_test[i].confidence > gammes_test[best_match].confidence) { |
|
|
best_match = i; |
|
|
} |
|
|
} |
|
|
|
|
|
printf("\n🎯 RÉSULTAT DE L'IDENTIFICATION:\n"); |
|
|
|
|
|
if (gammes_test[best_match].confidence >= note_count * 0.6) { |
|
|
printf("Gamme identifiée: %s\n", gammes_test[best_match].nom); |
|
|
printf("Confiance: %d/%d notes correspondent (%.1f%%)\n", |
|
|
gammes_test[best_match].confidence, note_count, |
|
|
(float)gammes_test[best_match].confidence / note_count * 100); |
|
|
|
|
|
if (strstr(gammes_test[best_match].nom, "majeur")) { |
|
|
printf("Type: Gamme majeure (sonorité joyeuse)\n"); |
|
|
} else { |
|
|
printf("Type: Gamme mineure (sonorité mélancolique)\n"); |
|
|
} |
|
|
} else { |
|
|
printf("❓ Gamme non identifiée avec certitude\n"); |
|
|
printf("Meilleures correspondances:\n"); |
|
|
|
|
|
|
|
|
for (int i = 0; i < 3 && i < gamme_test_count; i++) { |
|
|
int max_idx = 0; |
|
|
for (int j = 1; j < gamme_test_count; j++) { |
|
|
if (gammes_test[j].confidence > gammes_test[max_idx].confidence) { |
|
|
max_idx = j; |
|
|
} |
|
|
} |
|
|
if (gammes_test[max_idx].confidence > 0) { |
|
|
printf(" %d. %s (%.1f%% correspondance)\n", i+1, |
|
|
gammes_test[max_idx].nom, |
|
|
(float)gammes_test[max_idx].confidence / note_count * 100); |
|
|
} |
|
|
gammes_test[max_idx].confidence = -1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for (int i = 0; i < note_count; i++) { |
|
|
free(notes[i]); |
|
|
} |
|
|
|
|
|
printf("\n✅ Analyse musicale terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
int validate_db_id(char *id) { |
|
|
if (strlen(id) != 8) return 0; |
|
|
|
|
|
int digits = 0, letters = 0; |
|
|
for (int i = 0; i < 8; i++) { |
|
|
if (isdigit(id[i])) digits++; |
|
|
else if (isalpha(id[i])) letters++; |
|
|
} |
|
|
|
|
|
return (digits >= 4 && letters >= 2); |
|
|
} |
|
|
|
|
|
int find_database(char *id) { |
|
|
for (int i = 0; i < maya_db_count; i++) { |
|
|
if (strcmp(maya_databases[i].id, id) == 0 && maya_databases[i].active) { |
|
|
return i; |
|
|
} |
|
|
} |
|
|
return -1; |
|
|
} |
|
|
|
|
|
void handle_db(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.db - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.db nécessite deux arguments: id et données", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *db_id = start; |
|
|
char *data = comma + 1; |
|
|
|
|
|
trim(db_id); |
|
|
trim(data); |
|
|
|
|
|
|
|
|
if (db_id[0] == '\'' && db_id[strlen(db_id)-1] == '\'') { |
|
|
db_id[strlen(db_id)-1] = '\0'; |
|
|
db_id++; |
|
|
} |
|
|
if (data[0] == '\'' && data[strlen(data)-1] == '\'') { |
|
|
data[strlen(data)-1] = '\0'; |
|
|
data++; |
|
|
} |
|
|
|
|
|
if (!validate_db_id(db_id)) { |
|
|
maya_error("ID base de données invalide (8 caractères: min 4 chiffres, 2 lettres)", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
if (maya_db_count < MAX_DATABASES) { |
|
|
strcpy(maya_databases[maya_db_count].id, db_id); |
|
|
strcpy(maya_databases[maya_db_count].data, data); |
|
|
maya_databases[maya_db_count].active = 1; |
|
|
maya_db_count++; |
|
|
|
|
|
printf("🗄️ BASE DE DONNÉES MAYA CRÉÉE 🗄️\n"); |
|
|
printf("ID: %s\n", db_id); |
|
|
printf("Données stockées: %s\n", data); |
|
|
printf("✅ Base de données active!\n"); |
|
|
} else { |
|
|
maya_error("Trop de bases de données créées", 0); |
|
|
} |
|
|
} |
|
|
|
|
|
void handle_send_db(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.send.db - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
trim(start); |
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
int db_index = find_database(start); |
|
|
if (db_index == -1) { |
|
|
maya_error("Base de données non trouvée", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("📤 RÉCUPÉRATION BASE DE DONNÉES MAYA 📤\n"); |
|
|
printf("ID: %s\n", maya_databases[db_index].id); |
|
|
printf("Données: %s\n", maya_databases[db_index].data); |
|
|
printf("Statut: Active\n"); |
|
|
} |
|
|
|
|
|
void handle_supp_db(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.supp.db - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
trim(start); |
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
int db_index = find_database(start); |
|
|
if (db_index == -1) { |
|
|
maya_error("Base de données non trouvée", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
maya_databases[db_index].active = 0; |
|
|
strcpy(maya_databases[db_index].data, ""); |
|
|
|
|
|
printf("🗑️ BASE DE DONNÉES SUPPRIMÉE 🗑️\n"); |
|
|
printf("ID: %s\n", start); |
|
|
printf("✅ Base de données nettoyée!\n"); |
|
|
} |
|
|
|
|
|
void handle_util_db(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.util.db - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
trim(start); |
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
int db_index = find_database(start); |
|
|
if (db_index == -1) { |
|
|
maya_error("Base de données non trouvée", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("💾 UTILISATION BASE DE DONNÉES MAYA 💾\n"); |
|
|
printf("ID: %s\n", maya_databases[db_index].id); |
|
|
printf("Données disponibles: %s\n", maya_databases[db_index].data); |
|
|
printf("🎮 Base de données prête pour vos jeux et simulations!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void load_maya_package(char *path) { |
|
|
printf("🔧 CHARGEMENT PACKAGE C MAYA SIMPLIFIÉ 🔧\n"); |
|
|
printf("📂 Fichier source: %s\n", path); |
|
|
|
|
|
|
|
|
FILE *file = fopen(path, "r"); |
|
|
if (!file) { |
|
|
printf("❌ Fichier source introuvable: %s\n", path); |
|
|
printf("💡 Conseil: Vérifiez le nom et l'emplacement du fichier\n"); |
|
|
return; |
|
|
} |
|
|
fclose(file); |
|
|
|
|
|
if (maya_package_count >= MAX_PACKAGES) { |
|
|
printf("❌ Limite de packages atteinte (%d max)\n", MAX_PACKAGES); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
char so_path[MAX_STRING_VALUE]; |
|
|
snprintf(so_path, sizeof(so_path), "./maya_pkg_%d_%ld.so", |
|
|
maya_package_count, time(NULL) % 10000); |
|
|
|
|
|
printf("🔨 Compilation en cours...\n"); |
|
|
|
|
|
|
|
|
if (!compile_c_package(path, so_path)) { |
|
|
printf("❌ COMPILATION ÉCHOUÉE!\n"); |
|
|
printf("🔍 Solutions possibles:\n"); |
|
|
printf(" 1. Vérifiez la syntaxe C\n"); |
|
|
printf(" 2. Assurez-vous que les fonctions commencent par 'may_package_'\n"); |
|
|
printf(" 3. Incluez les en-têtes nécessaires (#include <stdio.h>)\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
printf("📦 Chargement de la bibliothèque...\n"); |
|
|
void *handle = dlopen(so_path, RTLD_NOW | RTLD_GLOBAL); |
|
|
if (!handle) { |
|
|
printf("❌ Erreur de chargement dynamique:\n"); |
|
|
printf(" %s\n", dlerror()); |
|
|
printf("🔧 Le package a été compilé mais ne peut pas être chargé\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
strcpy(maya_packages[maya_package_count].path, path); |
|
|
strcpy(maya_packages[maya_package_count].so_path, so_path); |
|
|
maya_packages[maya_package_count].handle = handle; |
|
|
maya_packages[maya_package_count].loaded = 1; |
|
|
maya_packages[maya_package_count].function_count = 0; |
|
|
|
|
|
|
|
|
printf("🔍 Détection automatique des fonctions...\n"); |
|
|
char detected_functions[MAX_FUNCTIONS][MAX_VAR_NAME]; |
|
|
int detected_count = detect_package_functions(path, detected_functions); |
|
|
|
|
|
if (detected_count == 0) { |
|
|
printf("⚠️ Aucune fonction détectée!\n"); |
|
|
printf("💡 Les fonctions doivent commencer par 'may_package_'\n"); |
|
|
printf(" Exemple: void may_package_ma_fonction() { ... }\n"); |
|
|
} |
|
|
|
|
|
|
|
|
int loaded_count = 0; |
|
|
for (int i = 0; i < detected_count; i++) { |
|
|
void (*func)() = dlsym(handle, detected_functions[i]); |
|
|
if (func) { |
|
|
strcpy(maya_packages[maya_package_count].function_names[loaded_count], |
|
|
detected_functions[i]); |
|
|
maya_packages[maya_package_count].functions[loaded_count] = func; |
|
|
loaded_count++; |
|
|
printf("✅ Fonction chargée: %s\n", detected_functions[i]); |
|
|
} else { |
|
|
printf("⚠️ Fonction '%s' trouvée mais non chargeable: %s\n", |
|
|
detected_functions[i], dlerror()); |
|
|
} |
|
|
} |
|
|
|
|
|
maya_packages[maya_package_count].function_count = loaded_count; |
|
|
|
|
|
printf("🎉 PACKAGE C CHARGÉ AVEC SUCCÈS!\n"); |
|
|
printf("📊 Statistiques:\n"); |
|
|
printf(" - Fonctions détectées: %d\n", detected_count); |
|
|
printf(" - Fonctions chargées: %d\n", loaded_count); |
|
|
printf("💡 Utilisez: may.package.nom_fonction()\n"); |
|
|
printf("🚀 Package prêt à l'emploi!\n"); |
|
|
|
|
|
maya_package_count++; |
|
|
} |
|
|
|
|
|
|
|
|
int find_package_function(char *name) { |
|
|
for (int i = 0; i < maya_package_count; i++) { |
|
|
if (!maya_packages[i].loaded) continue; |
|
|
|
|
|
for (int j = 0; j < maya_packages[i].function_count; j++) { |
|
|
if (strcmp(maya_packages[i].function_names[j], name) == 0) { |
|
|
return i * MAX_FUNCTIONS + j; |
|
|
} |
|
|
} |
|
|
} |
|
|
return -1; |
|
|
} |
|
|
|
|
|
|
|
|
void get_package_info(int func_index, int *package_index, int *local_index) { |
|
|
*package_index = func_index / MAX_FUNCTIONS; |
|
|
*local_index = func_index % MAX_FUNCTIONS; |
|
|
} |
|
|
|
|
|
|
|
|
void call_package_function(char *function_name, char *args) { |
|
|
(void)args; |
|
|
|
|
|
int func_index = find_package_function(function_name); |
|
|
|
|
|
if (func_index == -1) { |
|
|
printf("❌ Fonction de package non trouvée: %s\n", function_name); |
|
|
printf("🔍 Fonctions disponibles:\n"); |
|
|
for (int i = 0; i < maya_package_count; i++) { |
|
|
if (maya_packages[i].loaded) { |
|
|
for (int j = 0; j < maya_packages[i].function_count; j++) { |
|
|
printf(" - %s\n", maya_packages[i].function_names[j]); |
|
|
} |
|
|
} |
|
|
} |
|
|
return; |
|
|
} |
|
|
|
|
|
int package_index, local_index; |
|
|
get_package_info(func_index, &package_index, &local_index); |
|
|
|
|
|
printf("🔄 Exécution de la fonction C: %s\n", function_name); |
|
|
|
|
|
|
|
|
if (maya_packages[package_index].functions[local_index] != NULL) { |
|
|
|
|
|
maya_packages[package_index].functions[local_index](); |
|
|
printf("✅ Fonction C exécutée avec succès!\n"); |
|
|
} else { |
|
|
printf("❌ Fonction invalide dans le package\n"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int find_maya_function(char *name) { |
|
|
for (int i = 0; i < maya_function_count; i++) { |
|
|
if (strcmp(maya_functions[i].name, name) == 0) { |
|
|
return i; |
|
|
} |
|
|
} |
|
|
return -1; |
|
|
} |
|
|
|
|
|
|
|
|
void execute_maya_function(char *function_name, char *args) { |
|
|
(void)args; |
|
|
|
|
|
int func_index = find_maya_function(function_name); |
|
|
|
|
|
if (func_index == -1) { |
|
|
maya_error("Fonction Maya non trouvée", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("🔄 Exécution de la fonction '%s'...\n", function_name); |
|
|
printf("📂 Source: %s\n", maya_functions[func_index].filename); |
|
|
|
|
|
|
|
|
char *code = maya_functions[func_index].code; |
|
|
|
|
|
|
|
|
char processed_code[MAX_STRING_VALUE * 10]; |
|
|
strcpy(processed_code, code); |
|
|
|
|
|
|
|
|
char *line = strtok(processed_code, ";"); |
|
|
while (line != NULL) { |
|
|
trim(line); |
|
|
if (strlen(line) > 0) { |
|
|
interpret_line(line); |
|
|
} |
|
|
line = strtok(NULL, ";"); |
|
|
} |
|
|
|
|
|
printf("✅ Fonction '%s' exécutée avec succès!\n", function_name); |
|
|
} |
|
|
|
|
|
|
|
|
char* extract_c_code(char *maya_line) { |
|
|
static char c_code[MAX_STRING_VALUE * 5]; |
|
|
char *start = strchr(maya_line, '('); |
|
|
char *end = strrchr(maya_line, ')'); |
|
|
|
|
|
if (!start || !end) return NULL; |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
strcpy(c_code, start); |
|
|
return c_code; |
|
|
} |
|
|
|
|
|
void handle_execute_c(char *line) { |
|
|
char *c_code = extract_c_code(line); |
|
|
if (!c_code) { |
|
|
maya_error("Syntaxe incorrecte pour my.execute.c - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("⚡ EXÉCUTION CODE C MAYA ⚡\n"); |
|
|
printf("Code C à exécuter: %s\n", c_code); |
|
|
|
|
|
|
|
|
FILE *temp_file = fopen("temp_maya_c.c", "w"); |
|
|
if (temp_file) { |
|
|
fprintf(temp_file, "#include <stdio.h>\n#include <stdlib.h>\n#include <math.h>\n"); |
|
|
fprintf(temp_file, "int main() {\n"); |
|
|
fprintf(temp_file, "%s\n", c_code); |
|
|
fprintf(temp_file, "return 0;\n}\n"); |
|
|
fclose(temp_file); |
|
|
|
|
|
|
|
|
int compile_result = system("gcc temp_maya_c.c -o temp_maya_c -lm 2>/dev/null"); |
|
|
if (compile_result == 0) { |
|
|
printf("🔨 Compilation réussie!\n"); |
|
|
printf("📤 Sortie du programme:\n"); |
|
|
system("./temp_maya_c"); |
|
|
|
|
|
system("rm -f temp_maya_c temp_maya_c.c"); |
|
|
printf("✅ Code C exécuté avec succès!\n"); |
|
|
} else { |
|
|
printf("❌ Erreur de compilation du code C\n"); |
|
|
system("rm -f temp_maya_c.c"); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_simulation_monrobot(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.monrobot - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🤖 SIMULATION ROBOT PERSONNALISÉ MAYA 🤖\n"); |
|
|
printf("Paramètres: %s\n", start); |
|
|
|
|
|
|
|
|
printf("🔧 Assemblage des composants...\n"); |
|
|
usleep(800000); |
|
|
printf("🧠 Installation de l'IA...\n"); |
|
|
usleep(600000); |
|
|
printf("⚡ Activation des systèmes...\n"); |
|
|
usleep(400000); |
|
|
|
|
|
printf("✅ Robot créé avec succès!\n"); |
|
|
printf("🗣️ Robot: 'Bonjour! Je suis votre robot personnalisé Maya!'\n"); |
|
|
printf("🤝 Votre robot est prêt à interagir!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_quantique(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.quantique - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("⚛️ SIMULATION UNIVERS QUANTIQUE MAYA ⚛️\n"); |
|
|
printf("Paramètres: %s\n", start); |
|
|
|
|
|
printf("🌌 Initialisation de l'univers quantique...\n"); |
|
|
usleep(1000000); |
|
|
printf("⚛️ Création des particules subatomiques...\n"); |
|
|
usleep(800000); |
|
|
printf("🔬 Observation des phénomènes quantiques...\n"); |
|
|
usleep(600000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int scenario = rand() % 3; |
|
|
|
|
|
switch(scenario) { |
|
|
case 0: |
|
|
printf("🌟 Superposition quantique détectée!\n"); |
|
|
printf("📊 État: |0⟩ + |1⟩\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("🔗 Intrication quantique observée!\n"); |
|
|
printf("📊 Particules liées instantanément\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("🌊 Dualité onde-particule manifeste!\n"); |
|
|
printf("📊 Comportement ondulatoire confirmé\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("🎯 Simulation quantique terminée!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_monunivers(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.monunivers - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🌍 CRÉATION UNIVERS PERSONNALISÉ MAYA 🌍\n"); |
|
|
printf("Spécifications: %s\n", start); |
|
|
|
|
|
printf("💫 Big Bang de votre univers...\n"); |
|
|
usleep(1200000); |
|
|
printf("⭐ Formation des premières étoiles...\n"); |
|
|
usleep(1000000); |
|
|
printf("🪐 Création des planètes...\n"); |
|
|
usleep(800000); |
|
|
printf("🌱 Apparition de la vie...\n"); |
|
|
usleep(600000); |
|
|
|
|
|
printf("🎉 Votre univers est né!\n"); |
|
|
printf("📊 Statistiques:\n"); |
|
|
printf(" - 1 000 000 étoiles\n"); |
|
|
printf(" - 500 000 planètes\n"); |
|
|
printf(" - 42 civilisations\n"); |
|
|
printf("🌟 Univers stable et en expansion!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_atomes(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.atomes - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("⚛️ SIMULATION ATOMIQUE MAYA ⚛️\n"); |
|
|
printf("Type d'atome: %s\n", start); |
|
|
|
|
|
|
|
|
struct { |
|
|
char *nom; |
|
|
char *symbole; |
|
|
int protons; |
|
|
int neutrons; |
|
|
int electrons; |
|
|
char *proprietes; |
|
|
} elements[] = { |
|
|
{"Hydrogene", "H", 1, 0, 1, "Gaz le plus léger, inflammable"}, |
|
|
{"Helium", "He", 2, 2, 2, "Gaz noble, très stable"}, |
|
|
{"Lithium", "Li", 3, 4, 3, "Métal alcalin, très réactif"}, |
|
|
{"Carbone", "C", 6, 6, 6, "Base de la vie organique"}, |
|
|
{"Azote", "N", 7, 7, 7, "Gaz inerte, 78% de l'atmosphère"}, |
|
|
{"Oxygene", "O", 8, 8, 8, "Vital pour la respiration"}, |
|
|
{"Fluor", "F", 9, 10, 9, "Halogène très réactif"}, |
|
|
{"Neon", "Ne", 10, 10, 10, "Gaz noble, éclairage"}, |
|
|
{"Sodium", "Na", 11, 12, 11, "Métal alcalin, forme le sel"}, |
|
|
{"Magnesium", "Mg", 12, 12, 12, "Métal léger, alliages"}, |
|
|
{"Aluminium", "Al", 13, 14, 13, "Métal léger, anti-corrosion"}, |
|
|
{"Silicium", "Si", 14, 14, 14, "Semi-conducteur, électronique"}, |
|
|
{"Phosphore", "P", 15, 16, 15, "Essentiel pour l'ADN"}, |
|
|
{"Soufre", "S", 16, 16, 16, "Forme des ponts disulfure"}, |
|
|
{"Chlore", "Cl", 17, 18, 17, "Désinfectant, forme HCl"}, |
|
|
{"Argon", "Ar", 18, 22, 18, "Gaz noble, soudage"}, |
|
|
{"Potassium", "K", 19, 20, 19, "Électrolyte important"}, |
|
|
{"Calcium", "Ca", 20, 20, 20, "Os et dents"}, |
|
|
{"Fer", "Fe", 26, 30, 26, "Métal de construction"}, |
|
|
{"Cuivre", "Cu", 29, 35, 29, "Conducteur électrique"}, |
|
|
{"Zinc", "Zn", 30, 35, 30, "Anti-corrosion, galvanisation"}, |
|
|
{"Argent", "Ag", 47, 61, 47, "Métal précieux, conducteur"}, |
|
|
{"Or", "Au", 79, 118, 79, "Métal précieux, inoxydable"}, |
|
|
{"Mercure", "Hg", 80, 121, 80, "Métal liquide toxique"}, |
|
|
{"Plomb", "Pb", 82, 125, 82, "Métal lourd toxique"}, |
|
|
{"Uranium", "U", 92, 146, 92, "Radioactif, énergie nucléaire"} |
|
|
}; |
|
|
|
|
|
int element_count = sizeof(elements) / sizeof(elements[0]); |
|
|
int found = -1; |
|
|
|
|
|
|
|
|
for (int i = 0; i < element_count; i++) { |
|
|
if (strcasecmp(elements[i].nom, start) == 0 || |
|
|
strcasecmp(elements[i].symbole, start) == 0) { |
|
|
found = i; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
if (found == -1) { |
|
|
printf("❌ Élément '%s' non trouvé dans la base de données\n", start); |
|
|
printf("💡 Éléments disponibles:\n"); |
|
|
for (int i = 0; i < element_count && i < 10; i++) { |
|
|
printf(" - %s (%s)\n", elements[i].nom, elements[i].symbole); |
|
|
} |
|
|
printf(" ... et %d autres\n", element_count - 10); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("🔬 Analyse de la structure atomique...\n"); |
|
|
usleep(600000); |
|
|
printf("⚡ Électrons en orbite...\n"); |
|
|
usleep(400000); |
|
|
printf("🎯 Noyau stable détecté...\n"); |
|
|
usleep(400000); |
|
|
|
|
|
printf("📊 RÉSULTATS DE LA SIMULATION:\n"); |
|
|
printf(" Élément: %s (%s)\n", elements[found].nom, elements[found].symbole); |
|
|
printf(" Numéro atomique: %d\n", elements[found].protons); |
|
|
printf(" Protons: %d\n", elements[found].protons); |
|
|
printf(" Neutrons: %d\n", elements[found].neutrons); |
|
|
printf(" Électrons: %d\n", elements[found].electrons); |
|
|
printf(" Masse atomique: ~%d u\n", elements[found].protons + elements[found].neutrons); |
|
|
printf(" Propriétés: %s\n", elements[found].proprietes); |
|
|
|
|
|
|
|
|
printf(" Configuration électronique: "); |
|
|
int electrons = elements[found].electrons; |
|
|
int shells[] = {2, 8, 18, 32}; |
|
|
|
|
|
for (int shell = 0; shell < 4 && electrons > 0; shell++) { |
|
|
int e_in_shell = (electrons > shells[shell]) ? shells[shell] : electrons; |
|
|
printf("%d ", e_in_shell); |
|
|
electrons -= e_in_shell; |
|
|
} |
|
|
printf("\n"); |
|
|
|
|
|
printf("✅ Simulation atomique terminée!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_timetravel(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.timetravel - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int years = evaluate_expression_numeric(start); |
|
|
|
|
|
if (years < 1 || years > 15) { |
|
|
maya_error("Voyage temporel limité entre 1 et 15 ans", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
printf("⏰ MACHINE TEMPORELLE MAYA ⏰\n"); |
|
|
printf("Voyage de %d années\n", years); |
|
|
|
|
|
printf("🔧 Calibrage de la machine temporelle...\n"); |
|
|
usleep(800000); |
|
|
printf("⚡ Activation du flux temporel...\n"); |
|
|
usleep(600000); |
|
|
printf("🌀 Traversée du continuum espace-temps...\n"); |
|
|
usleep(1000000); |
|
|
|
|
|
|
|
|
if (years <= 5) { |
|
|
printf("🎯 ARRIVÉE DANS LE PASSÉ (%d ans):\n", years); |
|
|
printf("📱 Les smartphones n'existaient pas encore!\n"); |
|
|
printf("🎵 La musique était différente...\n"); |
|
|
} else if (years <= 10) { |
|
|
printf("🎯 ARRIVÉE DANS LE PASSÉ (%d ans):\n", years); |
|
|
printf("💻 Internet était plus lent!\n"); |
|
|
printf("🎮 Les jeux vidéo étaient différents!\n"); |
|
|
} else { |
|
|
printf("🎯 ARRIVÉE DANS LE FUTUR (%d ans):\n", years); |
|
|
printf("🚗 Les voitures volent!\n"); |
|
|
printf("🤖 Les robots sont partout!\n"); |
|
|
} |
|
|
|
|
|
printf("✅ Voyage temporel terminé! Retour au présent...\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_fairy(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.fairy - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧚♀️ CONTE DE FÉE MAYA 🧚♀️\n"); |
|
|
printf("Histoire: %s\n", start); |
|
|
|
|
|
printf("📖 Il était une fois, dans un royaume lointain...\n"); |
|
|
usleep(800000); |
|
|
printf("🏰 Une princesse vivait dans un château magique...\n"); |
|
|
usleep(600000); |
|
|
printf("🐉 Un dragon gardait un trésor précieux...\n"); |
|
|
usleep(600000); |
|
|
printf("⚔️ Un brave chevalier décida de sauver le royaume...\n"); |
|
|
usleep(800000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int ending = rand() % 3; |
|
|
|
|
|
switch(ending) { |
|
|
case 0: |
|
|
printf("👑 Le chevalier épousa la princesse!\n"); |
|
|
printf("🎉 Ils vécurent heureux pourtoujours!\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("🐉 Le dragon devint l'ami du chevalier!\n"); |
|
|
printf("🤝 La paix régna sur le royaume!\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("✨ La princesse révéla être une fée!\n"); |
|
|
printf("🌟 Elle transforma le royaume en paradis!\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("📚 Fin de votre conte de fée personnalisé!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_vampire(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.vampire - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧛♂️ HISTOIRE DE VAMPIRE MAYA 🧛♂️\n"); |
|
|
printf("Récit: %s\n", start); |
|
|
|
|
|
printf("🌙 La nuit tombe sur la ville gothique...\n"); |
|
|
usleep(800000); |
|
|
printf("🏰 Dans un château sombre, un vampire s'éveille...\n"); |
|
|
usleep(600000); |
|
|
printf("🦇 Il se transforme en chauve-souris...\n"); |
|
|
usleep(500000); |
|
|
printf("🌃 Il survole la ville à la recherche...\n"); |
|
|
usleep(700000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int scenario = rand() % 3; |
|
|
|
|
|
switch(scenario) { |
|
|
case 0: |
|
|
printf("💘 Il rencontre l'amour de sa vie!\n"); |
|
|
printf("🌹 Une histoire d'amour éternelle commence...\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("⚔️ Il affronte un chasseur de vampires!\n"); |
|
|
printf("🛡️ Un combat épique s'engage!\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("🧪 Il cherche une potion pour redevenir humain!\n"); |
|
|
printf("🔬 Une quête mystique commence...\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("🌅 À l'aube, votre histoire de vampire se termine!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_sirene(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.sirene - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🧜♀️ RÉCIT DE SIRÈNE MAYA 🧜♀️\n"); |
|
|
printf("Histoire: %s\n", start); |
|
|
|
|
|
printf("🌊 Dans les profondeurs de l'océan...\n"); |
|
|
usleep(800000); |
|
|
printf("🐚 Une sirène chante sa mélodie enchanteresse...\n"); |
|
|
usleep(600000); |
|
|
printf("🏖️ Un navigateur entend son chant...\n"); |
|
|
usleep(500000); |
|
|
printf("⛵ Son navire se dirige vers les récifs...\n"); |
|
|
usleep(700000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int outcome = rand() % 3; |
|
|
|
|
|
switch(outcome) { |
|
|
case 0: |
|
|
printf("💙 La sirène tombe amoureuse du navigateur!\n"); |
|
|
printf("🌟 Elle le sauve et devient humaine!\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("🔱 Le roi des mers intervient!\n"); |
|
|
printf("👑 Il accorde un vœu à la sirène!\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("🌈 La sirène découvre un trésor caché!\n"); |
|
|
printf("💎 Elle devient la gardienne des océans!\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("🐠 Votre récit de sirène se termine dans les vagues!\n"); |
|
|
} |
|
|
|
|
|
void handle_simulation_monster(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.simulation.monster - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("👹 SIMULATION MONSTRE MAYA 👹\n"); |
|
|
printf("Créature: %s\n", start); |
|
|
|
|
|
printf("🌙 Une nuit d'orage, dans une forêt sombre...\n"); |
|
|
usleep(800000); |
|
|
printf("👁️ Des yeux brillent dans l'obscurité...\n"); |
|
|
usleep(600000); |
|
|
printf("🦶 Des pas lourds résonnent...\n"); |
|
|
usleep(500000); |
|
|
printf("👹 Le monstre apparaît!\n"); |
|
|
usleep(700000); |
|
|
|
|
|
srand(time(NULL)); |
|
|
int monster_action = rand() % 3; |
|
|
|
|
|
switch(monster_action) { |
|
|
case 0: |
|
|
printf("😢 Le monstre est en réalité seul et triste!\n"); |
|
|
printf("🤗 Il cherche juste un ami!\n"); |
|
|
break; |
|
|
case 1: |
|
|
printf("🏃♂️ Le monstre poursuit les villageois!\n"); |
|
|
printf("⚔️ Les héros se préparent au combat!\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("🔮 Le monstre garde un secret mystique!\n"); |
|
|
printf("📜 Une ancienne malédiction doit être brisée!\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
printf("🌅 Votre histoire de monstre se termine à l'aube!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_exercice_create(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.exercice.create - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("📚 CRÉATEUR D'EXERCICES MAYA 📚\n"); |
|
|
printf("Sujet: %s\n", start); |
|
|
printf("📝 Exercice personnalisé créé!\n"); |
|
|
printf("🎯 Utilisez my.input pour les réponses interactives!\n"); |
|
|
printf("✅ Exercice prêt à être utilisé!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void handle_create_robot(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.create.robot - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.create.robot nécessite deux arguments: nom et réponses", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *robot_name = start; |
|
|
char *responses = comma + 1; |
|
|
|
|
|
trim(robot_name); |
|
|
trim(responses); |
|
|
|
|
|
|
|
|
if (robot_name[0] == '\'' && robot_name[strlen(robot_name)-1] == '\'') { |
|
|
robot_name[strlen(robot_name)-1] = '\0'; |
|
|
robot_name++; |
|
|
} |
|
|
if (responses[0] == '\'' && responses[strlen(responses)-1] == '\'') { |
|
|
responses[strlen(responses)-1] = '\0'; |
|
|
responses++; |
|
|
} |
|
|
|
|
|
printf("🤖 CRÉATION CHATBOT MAYA v6.0 🤖\n"); |
|
|
printf("Nom du robot: %s\n", robot_name); |
|
|
printf("🧠 Installation de l'intelligence artificielle...\n"); |
|
|
usleep(800000); |
|
|
printf("💬 Configuration des réponses conversationnelles...\n"); |
|
|
usleep(600000); |
|
|
|
|
|
|
|
|
printf("📚 Base de connaissances du robot:\n"); |
|
|
char *token = strtok(responses, ","); |
|
|
int response_count = 0; |
|
|
|
|
|
while (token != NULL && response_count < 10) { |
|
|
char *colon = strchr(token, ':'); |
|
|
if (colon) { |
|
|
*colon = '\0'; |
|
|
char *keyword = token; |
|
|
char *response = colon + 1; |
|
|
trim(keyword); |
|
|
trim(response); |
|
|
printf(" 🔹 %s → %s\n", keyword, response); |
|
|
response_count++; |
|
|
} |
|
|
token = strtok(NULL, ","); |
|
|
} |
|
|
|
|
|
printf("✅ Chatbot '%s' créé avec succès!\n", robot_name); |
|
|
printf("🎯 %d réponses programmées\n", response_count); |
|
|
printf("🗣️ %s: 'Bonjour! Je suis %s, votre assistant Maya!'\n", robot_name, robot_name); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_for_loop(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.for - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma1 = strchr(start, ','); |
|
|
if (!comma1) { |
|
|
maya_error("my.for nécessite trois arguments: variable, début, fin", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma1 = '\0'; |
|
|
char *var_name = start; |
|
|
char *rest = comma1 + 1; |
|
|
|
|
|
char *comma2 = strchr(rest, ','); |
|
|
if (!comma2) { |
|
|
maya_error("my.for nécessite trois arguments: variable, début, fin", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma2 = '\0'; |
|
|
char *debut_str = rest; |
|
|
char *fin_str = comma2 + 1; |
|
|
|
|
|
trim(var_name); |
|
|
trim(debut_str); |
|
|
trim(fin_str); |
|
|
|
|
|
int debut = evaluate_expression_numeric(debut_str); |
|
|
int fin = evaluate_expression_numeric(fin_str); |
|
|
|
|
|
printf("🔄 BOUCLE FOR MAYA v6.0 🔄\n"); |
|
|
printf("Variable: %s, de %d à %d\n", var_name, debut, fin); |
|
|
|
|
|
for (int i = debut; i <= fin; i++) { |
|
|
printf(" Itération %s = %d\n", var_name, i); |
|
|
|
|
|
char value_str[20]; |
|
|
sprintf(value_str, "%d", i); |
|
|
set_variable(var_name, value_str, 1); |
|
|
usleep(200000); |
|
|
} |
|
|
|
|
|
printf("✅ Boucle for terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_while_loop(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.while - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
printf("🔄 BOUCLE WHILE MAYA v6.0 🔄\n"); |
|
|
printf("Condition: %s\n", start); |
|
|
|
|
|
int iterations = 0; |
|
|
int max_iterations = 100; |
|
|
|
|
|
while (handle_condition(start) && iterations < max_iterations) { |
|
|
printf(" Itération %d - Condition vraie\n", iterations + 1); |
|
|
iterations++; |
|
|
usleep(300000); |
|
|
|
|
|
|
|
|
if (strstr(start, "x") && iterations == 1) { |
|
|
set_variable("x", "1", 1); |
|
|
} |
|
|
} |
|
|
|
|
|
if (iterations >= max_iterations) { |
|
|
printf("⚠️ Boucle arrêtée pour éviter l'infini (%d itérations max)\n", max_iterations); |
|
|
} else { |
|
|
printf("✅ Boucle while terminée après %d itérations\n", iterations); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_loop(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.loop - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
int repetitions = evaluate_expression_numeric(start); |
|
|
|
|
|
printf("🔄 BOUCLE SIMPLE MAYA v6.0 🔄\n"); |
|
|
printf("Nombre de répétitions: %d\n", repetitions); |
|
|
|
|
|
for (int i = 1; i <= repetitions; i++) { |
|
|
printf(" 🔁 Exécution %d/%d\n", i, repetitions); |
|
|
usleep(400000); |
|
|
} |
|
|
|
|
|
printf("✅ Boucle simple terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_palette(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.palette - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma = strchr(start, ','); |
|
|
if (!comma) { |
|
|
maya_error("my.palette nécessite deux arguments: dessin et couleur", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma = '\0'; |
|
|
char *dessin = start; |
|
|
char *couleur = comma + 1; |
|
|
|
|
|
trim(dessin); |
|
|
trim(couleur); |
|
|
|
|
|
|
|
|
if (dessin[0] == '\'' && dessin[strlen(dessin)-1] == '\'') { |
|
|
dessin[strlen(dessin)-1] = '\0'; |
|
|
dessin++; |
|
|
} |
|
|
if (couleur[0] == '\'' && couleur[strlen(couleur)-1] == '\'') { |
|
|
couleur[strlen(couleur)-1] = '\0'; |
|
|
couleur++; |
|
|
} |
|
|
|
|
|
printf("🎨 PALETTE CRÉATIVE MAYA v6.0 🎨\n"); |
|
|
printf("Création: %s en %s\n", dessin, couleur); |
|
|
|
|
|
|
|
|
apply_color(couleur); |
|
|
|
|
|
if (strcmp(dessin, "mouton") == 0) { |
|
|
printf(" 🐑\n"); |
|
|
printf(" ( o.o)\n"); |
|
|
printf(" > ^ <\n"); |
|
|
printf(" /_____\\\n"); |
|
|
printf("🐑 Mouton %s créé!\n", couleur); |
|
|
} |
|
|
else if (strcmp(dessin, "oiseau") == 0) { |
|
|
printf(" 🐦\n"); |
|
|
printf(" <(^v^)>\n"); |
|
|
printf(" /|\\\n"); |
|
|
printf(" / \\\n"); |
|
|
printf("🐦 Oiseau %s créé!\n", couleur); |
|
|
} |
|
|
else if (strcmp(dessin, "abeille") == 0) { |
|
|
printf(" 🐝\n"); |
|
|
printf(" .-\"\"\"-. \n"); |
|
|
printf(" / \\\n"); |
|
|
printf(" | o o |\n"); |
|
|
printf(" \\ ∩ /\n"); |
|
|
printf(" '-...-'\n"); |
|
|
printf("🐝 Abeille %s créée!\n", couleur); |
|
|
} |
|
|
else if (strcmp(dessin, "dragon") == 0) { |
|
|
printf(" 🐉\n"); |
|
|
printf(" /~\\\n"); |
|
|
printf(" ( o.o )\n"); |
|
|
printf(" > ^ <\n"); |
|
|
printf(" /_____\\\n"); |
|
|
printf("🐉 Dragon %s créé!\n", couleur); |
|
|
} |
|
|
else { |
|
|
printf("✨ Dessin personnalisé '%s' en %s\n", dessin, couleur); |
|
|
printf("🎨 [Votre imagination prend forme!]\n"); |
|
|
} |
|
|
|
|
|
reset_color(); |
|
|
printf("🌈 Création artistique terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_owngame(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.owngame - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("🎮 CRÉATEUR DE JEUX MAYA v6.0 🎮\n"); |
|
|
printf("Concept de jeu: %s\n", start); |
|
|
|
|
|
printf("🔧 Génération du moteur de jeu...\n"); |
|
|
usleep(800000); |
|
|
printf("🎨 Création des graphismes ASCII...\n"); |
|
|
usleep(600000); |
|
|
printf("🎵 Composition de la bande sonore...\n"); |
|
|
usleep(500000); |
|
|
printf("🎯 Programmation de la logique de jeu...\n"); |
|
|
usleep(700000); |
|
|
|
|
|
printf("🌟 ===== VOTRE JEU PERSONNALISÉ ===== 🌟\n"); |
|
|
printf("Titre: %s\n", start); |
|
|
printf("Genre: Aventure Maya Interactive\n"); |
|
|
printf("Joueurs: 1-∞\n"); |
|
|
printf("Difficulté: Ajustable\n"); |
|
|
printf("\n🎲 COMMANDES DU JEU:\n"); |
|
|
printf(" [W] - Avancer\n"); |
|
|
printf(" [S] - Reculer\n"); |
|
|
printf(" [A] - Gauche\n"); |
|
|
printf(" [D] - Droite\n"); |
|
|
printf(" [E] - Interagir\n"); |
|
|
printf(" [I] - Inventaire\n"); |
|
|
printf(" [Q] - Quitter\n"); |
|
|
|
|
|
printf("\n🏆 OBJECTIFS:\n"); |
|
|
printf(" - Explorez le monde de Maya\n"); |
|
|
printf(" - Résolvez les énigmes\n"); |
|
|
printf(" - Collectez les trésors\n"); |
|
|
printf(" - Devenez le maître du code!\n"); |
|
|
|
|
|
printf("\n✅ Jeu '%s' créé avec succès!\n", start); |
|
|
printf("🎮 Prêt à jouer! Que l'aventure commence!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_modifie_console(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.modifie.console - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *comma1 = strchr(start, ','); |
|
|
if (!comma1) { |
|
|
maya_error("my.modifie.console nécessite trois arguments", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma1 = '\0'; |
|
|
char *message_original = start; |
|
|
char *rest = comma1 + 1; |
|
|
|
|
|
char *comma2 = strchr(rest, ','); |
|
|
if (!comma2) { |
|
|
maya_error("my.modifie.console nécessite trois arguments", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
*comma2 = '\0'; |
|
|
char *delai_str = rest; |
|
|
char *message_modifie = comma2 + 1; |
|
|
|
|
|
trim(message_original); |
|
|
trim(delai_str); |
|
|
trim(message_modifie); |
|
|
|
|
|
|
|
|
if (message_original[0] == '\'' && message_original[strlen(message_original)-1] == '\'') { |
|
|
message_original[strlen(message_original)-1] = '\0'; |
|
|
message_original++; |
|
|
} |
|
|
if (message_modifie[0] == '\'' && message_modifie[strlen(message_modifie)-1] == '\'') { |
|
|
message_modifie[strlen(message_modifie)-1] = '\0'; |
|
|
message_modifie++; |
|
|
} |
|
|
|
|
|
int delai = evaluate_expression_numeric(delai_str); |
|
|
|
|
|
printf("💬 MODIFICATION CONSOLE MAYA v6.0 💬\n"); |
|
|
printf("%s", message_original); |
|
|
fflush(stdout); |
|
|
|
|
|
|
|
|
usleep(delai * 1000); |
|
|
|
|
|
|
|
|
printf("\r\033[K%s\n", message_modifie); |
|
|
printf("✅ Modification console terminée!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_interactive(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.interactive - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("📋 MENU INTERACTIF MAYA v6.0 📋\n"); |
|
|
printf("╔══════════════════════════════════════╗\n"); |
|
|
printf("║ %s ║\n", start); |
|
|
printf("╠══════════════════════════════════════╣\n"); |
|
|
printf("║ [1] 🎮 Jouer ║\n"); |
|
|
printf("║ [2] ⚙️ Options ║\n"); |
|
|
printf("║ [3] 📊 Statistiques ║\n"); |
|
|
printf("║ [4] 🎨 Personnalisation ║\n"); |
|
|
printf("║ [5] 💾 Sauvegarder ║\n"); |
|
|
printf("║ [6] 📚 Aide ║\n"); |
|
|
printf("║ [7] 🚪 Quitter ║\n"); |
|
|
printf("╚══════════════════════════════════════╝\n"); |
|
|
printf("👆 Choisissez une option (1-7): "); |
|
|
|
|
|
char choice[10]; |
|
|
if (fgets(choice, sizeof(choice), stdin)) { |
|
|
int option = atoi(choice); |
|
|
switch(option) { |
|
|
case 1: |
|
|
printf("🎮 Lancement du jeu...\n"); |
|
|
break; |
|
|
case 2: |
|
|
printf("⚙️ Menu des options ouvert\n"); |
|
|
break; |
|
|
case 3: |
|
|
printf("📊 Affichage des statistiques\n"); |
|
|
break; |
|
|
case 4: |
|
|
printf("🎨 Menu de personnalisation\n"); |
|
|
break; |
|
|
case 5: |
|
|
printf("💾 Sauvegarde en cours...\n"); |
|
|
break; |
|
|
case 6: |
|
|
printf("📚 Aide Maya v6.0 affichée\n"); |
|
|
break; |
|
|
case 7: |
|
|
printf("🚪 Merci d'avoir utilisé Maya!\n"); |
|
|
break; |
|
|
default: |
|
|
printf("❌ Option invalide\n"); |
|
|
} |
|
|
} |
|
|
printf("✅ Menu interactif terminé!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
typedef struct { |
|
|
char nom[50]; |
|
|
char type[30]; |
|
|
char description[100]; |
|
|
int quantite; |
|
|
int actif; |
|
|
} InventaireItem; |
|
|
|
|
|
static InventaireItem inventaire_maya[50]; |
|
|
static int inventaire_count = 0; |
|
|
|
|
|
void handle_inventaire(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
|
|
|
printf("🎒 INVENTAIRE MAYA v6.0 🎒\n"); |
|
|
printf("════════════════════════════════════\n"); |
|
|
|
|
|
if (inventaire_count == 0) { |
|
|
printf("Inventaire vide\n"); |
|
|
} else { |
|
|
for (int i = 0; i < inventaire_count; i++) { |
|
|
if (inventaire_maya[i].actif) { |
|
|
printf("[%d] %s (%s) x%d\n", i+1, |
|
|
inventaire_maya[i].nom, |
|
|
inventaire_maya[i].type, |
|
|
inventaire_maya[i].quantite); |
|
|
printf(" Description: %s\n", inventaire_maya[i].description); |
|
|
} |
|
|
} |
|
|
} |
|
|
printf("════════════════════════════════════\n"); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
char *args[4]; |
|
|
int arg_count = 0; |
|
|
char *token = strtok(start, ","); |
|
|
|
|
|
while (token != NULL && arg_count < 4) { |
|
|
trim(token); |
|
|
if (token[0] == '\'' && token[strlen(token)-1] == '\'') { |
|
|
token[strlen(token)-1] = '\0'; |
|
|
token++; |
|
|
} |
|
|
args[arg_count] = strdup(token); |
|
|
arg_count++; |
|
|
token = strtok(NULL, ","); |
|
|
} |
|
|
|
|
|
if (arg_count < 2) { |
|
|
maya_error("my.inventaire nécessite au moins action et nom", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
char *action = args[0]; |
|
|
char *nom = args[1]; |
|
|
|
|
|
printf("🎒 INVENTAIRE MAYA v6.0 - %s 🎒\n", action); |
|
|
|
|
|
if (strcmp(action, "ajouter") == 0) { |
|
|
if (arg_count < 4) { |
|
|
maya_error("ajouter nécessite: nom, type, description", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
char *type = args[2]; |
|
|
char *description = args[3]; |
|
|
|
|
|
if (inventaire_count < 50) { |
|
|
strcpy(inventaire_maya[inventaire_count].nom, nom); |
|
|
strcpy(inventaire_maya[inventaire_count].type, type); |
|
|
strcpy(inventaire_maya[inventaire_count].description, description); |
|
|
inventaire_maya[inventaire_count].quantite = 1; |
|
|
inventaire_maya[inventaire_count].actif = 1; |
|
|
inventaire_count++; |
|
|
|
|
|
printf("✅ %s ajouté à l'inventaire!\n", nom); |
|
|
printf("Type: %s\n", type); |
|
|
printf("Description: %s\n", description); |
|
|
} else { |
|
|
printf("❌ Inventaire plein!\n"); |
|
|
} |
|
|
} |
|
|
else if (strcmp(action, "utiliser") == 0) { |
|
|
int trouve = 0; |
|
|
for (int i = 0; i < inventaire_count; i++) { |
|
|
if (inventaire_maya[i].actif && strcmp(inventaire_maya[i].nom, nom) == 0) { |
|
|
printf("⚡ Utilisation de: %s\n", nom); |
|
|
printf("📝 %s\n", inventaire_maya[i].description); |
|
|
|
|
|
inventaire_maya[i].quantite--; |
|
|
if (inventaire_maya[i].quantite <= 0) { |
|
|
inventaire_maya[i].actif = 0; |
|
|
printf("💨 %s consommé et retiré de l'inventaire\n", nom); |
|
|
} else { |
|
|
printf("📦 Quantité restante: %d\n", inventaire_maya[i].quantite); |
|
|
} |
|
|
trouve = 1; |
|
|
break; |
|
|
} |
|
|
} |
|
|
if (!trouve) { |
|
|
printf("❌ %s non trouvé dans l'inventaire\n", nom); |
|
|
} |
|
|
} |
|
|
else if (strcmp(action, "supprimer") == 0) { |
|
|
int trouve = 0; |
|
|
for (int i = 0; i < inventaire_count; i++) { |
|
|
if (inventaire_maya[i].actif && strcmp(inventaire_maya[i].nom, nom) == 0) { |
|
|
inventaire_maya[i].actif = 0; |
|
|
printf("🗑️ %s supprimé de l'inventaire\n", nom); |
|
|
trouve = 1; |
|
|
break; |
|
|
} |
|
|
} |
|
|
if (!trouve) { |
|
|
printf("❌ %s non trouvé dans l'inventaire\n", nom); |
|
|
} |
|
|
} |
|
|
else { |
|
|
printf("❌ Action non reconnue: %s\n", action); |
|
|
printf("Actions disponibles: ajouter, utiliser, supprimer\n"); |
|
|
} |
|
|
|
|
|
|
|
|
for (int i = 0; i < arg_count; i++) { |
|
|
free(args[i]); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void handle_histoire_recit(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.histoire.recit - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("📖 RÉCIT MAYA v6.0 📖\n"); |
|
|
printf("\033[95m"); |
|
|
printf("════════════════════════════════════════════════════════════════\n"); |
|
|
printf(" 📚 HISTOIRE 📚\n"); |
|
|
printf("════════════════════════════════════════════════════════════════\n"); |
|
|
printf("\n"); |
|
|
|
|
|
|
|
|
for (size_t i = 0; i < strlen(start); i++) { |
|
|
printf("%c", start[i]); |
|
|
fflush(stdout); |
|
|
usleep(50000); |
|
|
} |
|
|
|
|
|
printf("\n\n"); |
|
|
printf("════════════════════════════════════════════════════════════════\n"); |
|
|
printf("\033[0m"); |
|
|
printf("✨ Histoire racontée avec la magie de Maya!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_histoire_end(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.histoire.end - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("🎬 FIN DE L'HISTOIRE MAYA v6.0 🎬\n"); |
|
|
printf("\033[31m"); |
|
|
printf("╔══════════════════════════════════════════════════════════════╗\n"); |
|
|
printf("║ 🎭 ÉPILOGUE 🎭 ║\n"); |
|
|
printf("╠══════════════════════════════════════════════════════════════╣\n"); |
|
|
printf("║ ║\n"); |
|
|
|
|
|
|
|
|
int text_len = strlen(start); |
|
|
int padding = (62 - text_len) / 2; |
|
|
printf("║"); |
|
|
for (int i = 0; i < padding; i++) printf(" "); |
|
|
printf("%s", start); |
|
|
for (int i = 0; i < (62 - text_len - padding); i++) printf(" "); |
|
|
printf("║\n"); |
|
|
|
|
|
printf("║ ║\n"); |
|
|
printf("╚══════════════════════════════════════════════════════════════╝\n"); |
|
|
printf("\033[0m"); |
|
|
|
|
|
printf("\n🌟 THE END 🌟\n"); |
|
|
printf("👏 Bravo! Histoire terminée avec panache!\n"); |
|
|
printf("📚 Merci d'avoir utilisé le conteur Maya v6.0!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_own_pet(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.own.pet - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("🐾 CRÉATION D'ANIMAL PERSONNALISÉ MAYA v6.0 🐾\n"); |
|
|
printf("Histoire de l'animal: %s\n", start); |
|
|
|
|
|
printf("🧬 Génération de l'ADN unique...\n"); |
|
|
usleep(800000); |
|
|
printf("🎨 Création de l'apparence...\n"); |
|
|
usleep(600000); |
|
|
printf("🧠 Développement de la personnalité...\n"); |
|
|
usleep(500000); |
|
|
printf("⚡ Insufflation de la vie...\n"); |
|
|
usleep(700000); |
|
|
|
|
|
|
|
|
srand(time(NULL)); |
|
|
char *couleurs[] = {"Doré", "Argenté", "Cristallin", "Arc-en-ciel", "Étoilé", "Mystique"}; |
|
|
char *tailles[] = {"Minuscule", "Petit", "Moyen", "Grand", "Gigantesque", "Légendaire"}; |
|
|
char *pouvoirs[] = {"Télépathie", "Vol", "Invisibilité", "Téléportation", "Magie", "Sagesse infinie"}; |
|
|
|
|
|
int couleur_idx = rand() % 6; |
|
|
int taille_idx = rand() % 6; |
|
|
int pouvoir_idx = rand() % 6; |
|
|
|
|
|
printf("✨ VOTRE ANIMAL PERSONNALISÉ EST NÉ! ✨\n"); |
|
|
printf("═══════════════════════════════════════\n"); |
|
|
printf("🏷️ Histoire: %s\n", start); |
|
|
printf("🌈 Couleur: %s\n", couleurs[couleur_idx]); |
|
|
printf("📏 Taille: %s\n", tailles[taille_idx]); |
|
|
printf("⚡ Pouvoir: %s\n", pouvoirs[pouvoir_idx]); |
|
|
printf("❤️ Niveau d'affection: ∞\n"); |
|
|
printf("🍃 Habitat: Monde de Maya\n"); |
|
|
printf("🎵 Cri: *Sons magiques indescriptibles*\n"); |
|
|
printf("═══════════════════════════════════════\n"); |
|
|
printf("🐾 Votre compagnon Maya est prêt à vous accompagner dans vos aventures!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_own_titan(char *line) { |
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
|
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour my.own.titan - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
|
|
|
if (start[0] == '\'' && start[strlen(start)-1] == '\'') { |
|
|
start[strlen(start)-1] = '\0'; |
|
|
start++; |
|
|
} |
|
|
|
|
|
printf("⚡ CRÉATION DE TITAN LÉGENDAIRE MAYA v6.0 ⚡\n"); |
|
|
printf("Légende du titan: %s\n", start); |
|
|
|
|
|
printf("🌋 Éveil des forces primordiales...\n"); |
|
|
usleep(1000000); |
|
|
printf("⚡ Forge du corps titanesque...\n"); |
|
|
usleep(800000); |
|
|
printf("🔥 Allumage de l'âme immortelle...\n"); |
|
|
usleep(600000); |
|
|
printf("👑 Couronnement du pouvoir ultime...\n"); |
|
|
usleep(900000); |
|
|
|
|
|
|
|
|
srand(time(NULL)); |
|
|
char *elements[] = {"Foudre", "Lave", "Glace Éternelle", "Vent Cosmique", "Terre Sacrée", "Lumière Pure"}; |
|
|
char *armes[] = {"Épée Dimensionnelle", "Marteau des Mondes", "Arc Stellaire", "Bâton du Temps", "Griffes d'Éternité", "Livre des Sorts"}; |
|
|
char *domaines[] = {"Montagnes Flottantes", "Océan de Magma", "Forêt Cristalline", "Désert de Sable d'Or", "Ville des Nuages", "Royaume des Codes"}; |
|
|
|
|
|
int element_idx = rand() % 6; |
|
|
int arme_idx = rand() % 6; |
|
|
int domaine_idx = rand() % 6; |
|
|
int puissance = 9000 + rand() % 1000; |
|
|
|
|
|
printf("👑 VOTRE TITAN LÉGENDAIRE S'ÉLÈVE! 👑\n"); |
|
|
printf("═══════════════════════════════════════════════════\n"); |
|
|
printf("📜 Légende: %s\n", start); |
|
|
printf("🌟 Élément: %s\n", elements[element_idx]); |
|
|
printf("⚔️ Arme: %s\n", armes[arme_idx]); |
|
|
printf("🏰 Domaine: %s\n", domaines[domaine_idx]); |
|
|
printf("💪 Niveau de puissance: %d\n", puissance); |
|
|
printf("⏳ Âge: Depuis l'aube des temps\n"); |
|
|
printf("🎯 Mission: Protéger l'univers Maya\n"); |
|
|
printf("💀 Ennemis vaincus: Innombrables\n"); |
|
|
printf("═══════════════════════════════════════════════════\n"); |
|
|
printf("⚡ Le titan %s domine désormais l'univers Maya!\n", start); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_nombre_pet(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🐾 GÉNÉRATEUR DE STATS D'ANIMAUX MAYA v6.0 🐾\n"); |
|
|
|
|
|
srand(time(NULL)); |
|
|
|
|
|
|
|
|
int vie = 50 + rand() % 150; |
|
|
int force = 20 + rand() % 80; |
|
|
int vitesse = 30 + rand() % 70; |
|
|
int intelligence = 40 + rand() % 60; |
|
|
int magie = 10 + rand() % 90; |
|
|
int loyaute = 70 + rand() % 30; |
|
|
|
|
|
printf("📊 STATISTIQUES GÉNÉRÉES:\n"); |
|
|
printf("════════════════════════════\n"); |
|
|
printf("❤️ Points de Vie: %d\n", vie); |
|
|
printf("💪 Force: %d\n", force); |
|
|
printf("💨 Vitesse: %d\n", vitesse); |
|
|
printf("🧠 Intelligence: %d\n", intelligence); |
|
|
printf("✨ Pouvoir Magique: %d\n", magie); |
|
|
printf("💖 Loyauté: %d\n", loyaute); |
|
|
printf("════════════════════════════\n"); |
|
|
|
|
|
|
|
|
int total = vie + force + vitesse + intelligence + magie + loyaute; |
|
|
printf("🏆 Score Total: %d points\n", total); |
|
|
|
|
|
if (total > 400) { |
|
|
printf("⭐ RANG: Légendaire!\n"); |
|
|
} else if (total > 300) { |
|
|
printf("🌟 RANG: Épique!\n"); |
|
|
} else if (total > 200) { |
|
|
printf("✨ RANG: Rare!\n"); |
|
|
} else { |
|
|
printf("💫 RANG: Commun\n"); |
|
|
} |
|
|
|
|
|
printf("🎯 Animal généré avec succès!\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void handle_nombre_titan(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("⚡ GÉNÉRATEUR DE STATS DE TITANS MAYA v6.0 ⚡\n"); |
|
|
|
|
|
srand(time(NULL)); |
|
|
|
|
|
|
|
|
int puissance = 5000 + rand() % 5000; |
|
|
int defense = 3000 + rand() % 4000; |
|
|
int vitesse = 1000 + rand() % 3000; |
|
|
int magie = 4000 + rand() % 6000; |
|
|
int sagesse = 2000 + rand() % 8000; |
|
|
int destruction = 6000 + rand() % 4000; |
|
|
|
|
|
printf("📊 STATISTIQUES TITANESQUES:\n"); |
|
|
printf("════════════════════════════════════\n"); |
|
|
printf("💥 Puissance Destructrice: %d\n", puissance); |
|
|
printf("🛡️ Défense Absolue: %d\n", defense); |
|
|
printf("⚡ Vitesse Cosmique: %d\n", vitesse); |
|
|
printf("🌟 Magie Primordiale: %d\n", magie); |
|
|
printf("📚 Sagesse Éternelle: %d\n", sagesse); |
|
|
printf("💀 Capacité de Destruction: %d\n", destruction); |
|
|
printf("════════════════════════════════════\n"); |
|
|
|
|
|
|
|
|
int total = (puissance + defense + vitesse + magie + sagesse + destruction) / 100; |
|
|
printf("👑 Score Titanesque: %d points\n", total); |
|
|
|
|
|
if (total > 250) { |
|
|
printf("🌌 CLASSE: Titan Universel!\n"); |
|
|
printf("🎯 Capable de créer et détruire des galaxies!\n"); |
|
|
} else if (total > 200) { |
|
|
printf("🔥 CLASSE: Titan Légendaire!\n"); |
|
|
printf("🎯 Maître de plusieurs dimensions!\n"); |
|
|
} else if (total > 150) { |
|
|
printf("⚡ CLASSE: Titan Épique!\n"); |
|
|
printf("🎯 Gardien de mondes entiers!\n"); |
|
|
} else { |
|
|
printf("💪 CLASSE: Titan Guerrier!\n"); |
|
|
printf("🎯 Protecteur de civilisations!\n"); |
|
|
} |
|
|
|
|
|
printf("👑 Titan généré avec une puissance divine!\n"); |
|
|
} |
|
|
|
|
|
void handle_exercice_gest_pgi(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("💼 EXERCICE PGI MAYA - BAC STMG 💼\n"); |
|
|
printf("📊 Progiciel de Gestion Intégrée\n"); |
|
|
printf("❓ Question: Quels sont les modules d'un PGI?\n"); |
|
|
printf("💡 Réponse attendue: Comptabilité, RH, Ventes, Stocks, etc.\n"); |
|
|
printf("🎓 Niveau: Terminale STMG\n"); |
|
|
} |
|
|
|
|
|
void handle_exercice_gest_treso(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("💰 EXERCICE TRÉSORERIE MAYA - BAC STMG 💰\n"); |
|
|
printf("📈 Gestion financière\n"); |
|
|
printf("❓ Calculez: FRNG = Capitaux permanents - Actif immobilisé\n"); |
|
|
printf("❓ BFR = Actif circulant - Passif circulant\n"); |
|
|
printf("❓ Trésorerie = FRNG - BFR\n"); |
|
|
printf("🎓 Exercice de gestion niveau BAC STMG\n"); |
|
|
} |
|
|
|
|
|
void handle_exercice_math(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🔢 EXERCICE MATHÉMATIQUES MAYA 🔢\n"); |
|
|
printf("📐 Mathématiques BAC Général/STMG\n"); |
|
|
printf("❓ Question: Résolvez l'équation du second degré\n"); |
|
|
printf("📝 ax² + bx + c = 0\n"); |
|
|
printf("💡 Utilisez Δ = b² - 4ac\n"); |
|
|
printf("🎓 Niveau: Première/Terminale\n"); |
|
|
} |
|
|
|
|
|
void handle_exercice_histoire(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("🏛️ EXERCICE HISTOIRE-GÉO MAYA 🏛️\n"); |
|
|
printf("🌍 Histoire-Géographie\n"); |
|
|
printf("❓ Question: Quelles sont les causes de la Première Guerre mondiale?\n"); |
|
|
printf("📚 Thèmes: Nationalisme, impérialisme, alliances\n"); |
|
|
printf("🎓 Niveau: BAC Général/STMG\n"); |
|
|
} |
|
|
|
|
|
void handle_exercice_mana(char *line) { |
|
|
(void)line; |
|
|
|
|
|
printf("👔 EXERCICE MANAGEMENT MAYA - BAC STMG 👔\n"); |
|
|
printf("🏢 Sciences de gestion et management\n"); |
|
|
printf("❓ Question: Définissez les styles de management\n"); |
|
|
printf("💼 Réponses: Directif, Persuasif, Participatif, Délégatif\n"); |
|
|
printf("🎓 Niveau: Terminale STMG\n"); |
|
|
} |
|
|
|
|
|
|
|
|
void interpret_line(char *line) { |
|
|
trim(line); |
|
|
|
|
|
if (strlen(line) == 0 || line[0] == '#') return; |
|
|
|
|
|
|
|
|
if (strchr(line, '{')) { |
|
|
if (strstr(line, "my.alors")) { |
|
|
in_alors_block = 1; |
|
|
in_autre_block = 0; |
|
|
skip_current_block = !last_condition_result; |
|
|
return; |
|
|
} else if (strstr(line, "my.autre")) { |
|
|
in_alors_block = 0; |
|
|
in_autre_block = 1; |
|
|
skip_current_block = last_condition_result; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (strchr(line, '}')) { |
|
|
in_alors_block = 0; |
|
|
in_autre_block = 0; |
|
|
skip_current_block = 0; |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
if (skip_current_block) { |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
if (strstr(line, "my.console")) { |
|
|
handle_console(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.median")) { |
|
|
handle_math_median(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.moyenne")) { |
|
|
handle_math_moyenne(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.cube")) { |
|
|
handle_math_cube(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.carre")) { |
|
|
handle_math_carre(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.racine")) { |
|
|
handle_math_racine(line); |
|
|
} |
|
|
else if (strstr(line, "my.math.degres")) { |
|
|
handle_math_degres(line); |
|
|
} |
|
|
else if (strstr(line, "my.math")) { |
|
|
handle_math(line); |
|
|
} |
|
|
else if (strstr(line, "my.thales")) { |
|
|
handle_thales(line); |
|
|
} |
|
|
else if (strstr(line, "my.pytha")) { |
|
|
handle_pytha(line); |
|
|
} |
|
|
else if (strstr(line, "my.rythme.convertir")) { |
|
|
handle_rythme_convertir(line); |
|
|
} |
|
|
else if (strstr(line, "my.renvoie.gamme")) { |
|
|
handle_renvoie_gamme(line); |
|
|
} |
|
|
else if (strstr(line, "my.obtenir.gamme")) { |
|
|
handle_obtenir_gamme(line); |
|
|
} |
|
|
else if (strstr(line, "my.send.db")) { |
|
|
handle_send_db(line); |
|
|
} |
|
|
else if (strstr(line, "my.supp.db")) { |
|
|
handle_supp_db(line); |
|
|
} |
|
|
else if (strstr(line, "my.util.db")) { |
|
|
handle_util_db(line); |
|
|
} |
|
|
else if (strstr(line, "my.db")) { |
|
|
handle_db(line); |
|
|
} |
|
|
else if (strstr(line, "my.execute.c")) { |
|
|
handle_execute_c(line); |
|
|
} |
|
|
else if (strstr(line, "my.variable")) { |
|
|
handle_variable(line); |
|
|
} |
|
|
else if (strstr(line, "my.input")) { |
|
|
handle_input(line); |
|
|
} |
|
|
else if (strstr(line, "my.delai")) { |
|
|
handle_delai(line); |
|
|
} |
|
|
else if (strstr(line, "my.draw")) { |
|
|
handle_draw(line); |
|
|
} |
|
|
else if (strstr(line, "my.jolie.txt")) { |
|
|
handle_jolie_txt(line); |
|
|
} |
|
|
else if (strstr(line, "my.color.console")) { |
|
|
handle_color_console(line); |
|
|
} |
|
|
else if (strstr(line, "my.nombre.random")) { |
|
|
handle_nombre_random(line); |
|
|
} |
|
|
else if (strstr(line, "my.random.txt")) { |
|
|
handle_random_txt(line); |
|
|
} |
|
|
else if (strstr(line, "my.quizz")) { |
|
|
handle_quizz(line); |
|
|
} |
|
|
else if (strstr(line, "my.dice")) { |
|
|
handle_dice(line); |
|
|
} |
|
|
else if (strstr(line, "my.puissance4")) { |
|
|
handle_puissance4(line); |
|
|
} |
|
|
else if (strstr(line, "my.pendu")) { |
|
|
handle_pendu(line); |
|
|
} |
|
|
else if (strstr(line, "my.worldgame")) { |
|
|
handle_worldgame(line); |
|
|
} |
|
|
else if (strstr(line, "my.rock.leaf")) { |
|
|
handle_rock_leaf(line); |
|
|
} |
|
|
else if (strstr(line, "my.devine.number")) { |
|
|
handle_devine_number(line); |
|
|
} |
|
|
else if (strstr(line, "my.snake")) { |
|
|
handle_snake(line); |
|
|
} |
|
|
else if (strstr(line, "my.tictac")) { |
|
|
handle_tictac(line); |
|
|
} |
|
|
else if (strstr(line, "my.memory")) { |
|
|
handle_memory(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.bac")) { |
|
|
handle_simulation_bac(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.combat")) { |
|
|
handle_simulation_combat(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.sciences")) { |
|
|
handle_simulation_sciences(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.clone")) { |
|
|
handle_simulation_clone(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.tech")) { |
|
|
handle_simulation_tech(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.ia")) { |
|
|
handle_simulation_ia(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.conscient")) { |
|
|
handle_simulation_conscient(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.iawork")) { |
|
|
handle_simulation_iawork(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.monrobot")) { |
|
|
handle_simulation_monrobot(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.quantique")) { |
|
|
handle_simulation_quantique(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.monunivers")) { |
|
|
handle_simulation_monunivers(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.atomes")) { |
|
|
handle_simulation_atomes(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.timetravel")) { |
|
|
handle_simulation_timetravel(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.fairy")) { |
|
|
handle_simulation_fairy(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.vampire")) { |
|
|
handle_simulation_vampire(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.sirene")) { |
|
|
handle_simulation_sirene(line); |
|
|
} |
|
|
else if (strstr(line, "my.simulation.monster")) { |
|
|
handle_simulation_monster(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.gest.pgi")) { |
|
|
handle_exercice_gest_pgi(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.gest.treso")) { |
|
|
handle_exercice_gest_treso(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.math")) { |
|
|
handle_exercice_math(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.histoire")) { |
|
|
handle_exercice_histoire(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.mana")) { |
|
|
handle_exercice_mana(line); |
|
|
} |
|
|
else if (strstr(line, "my.exercice.create")) { |
|
|
handle_exercice_create(line); |
|
|
} |
|
|
|
|
|
else if (strstr(line, "my.create.robot")) { |
|
|
handle_create_robot(line); |
|
|
} |
|
|
else if (strstr(line, "my.for")) { |
|
|
handle_for_loop(line); |
|
|
} |
|
|
else if (strstr(line, "my.while")) { |
|
|
handle_while_loop(line); |
|
|
} |
|
|
else if (strstr(line, "my.loop")) { |
|
|
handle_loop(line); |
|
|
} |
|
|
else if (strstr(line, "my.palette")) { |
|
|
handle_palette(line); |
|
|
} |
|
|
else if (strstr(line, "my.owngame")) { |
|
|
handle_owngame(line); |
|
|
} |
|
|
else if (strstr(line, "my.modifie.console")) { |
|
|
handle_modifie_console(line); |
|
|
} |
|
|
else if (strstr(line, "my.interactive")) { |
|
|
handle_interactive(line); |
|
|
} |
|
|
else if (strstr(line, "my.inventaire")) { |
|
|
handle_inventaire(line); |
|
|
} |
|
|
else if (strstr(line, "my.histoire.recit")) { |
|
|
handle_histoire_recit(line); |
|
|
} |
|
|
else if (strstr(line, "my.histoire.end")) { |
|
|
handle_histoire_end(line); |
|
|
} |
|
|
else if (strstr(line, "my.own.pet")) { |
|
|
handle_own_pet(line); |
|
|
} |
|
|
else if (strstr(line, "my.own.titan")) { |
|
|
handle_own_titan(line); |
|
|
} |
|
|
else if (strstr(line, "my.nombre.pet")) { |
|
|
handle_nombre_pet(line); |
|
|
} |
|
|
else if (strstr(line, "my.nombre.titan")) { |
|
|
handle_nombre_titan(line); |
|
|
} |
|
|
else if (strstr(line, "my.fonction")) { |
|
|
handle_fonction(line); |
|
|
} |
|
|
else if (strstr(line, "my.lire.module")) { |
|
|
handle_lire_module(line); |
|
|
} |
|
|
else if (strstr(line, "my.package.charge")) { |
|
|
handle_package_charge(line); |
|
|
} |
|
|
else if (strstr(line, "my.if")) { |
|
|
|
|
|
char *start = strchr(line, '('); |
|
|
char *end = strrchr(line, ')'); |
|
|
if (!start || !end) { |
|
|
maya_error("Syntaxe incorrecte pour condition - parenthèses manquantes", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
start++; |
|
|
*end = '\0'; |
|
|
|
|
|
if (strlen(start) == 0) { |
|
|
maya_error("Condition vide", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
last_condition_result = handle_condition(start); |
|
|
} |
|
|
else if (strstr(line, "my.alors") || strstr(line, "my.autre")) { |
|
|
|
|
|
return; |
|
|
} |
|
|
else if (strstr(line, "may.")) { |
|
|
|
|
|
char line_copy[MAX_LINE_LENGTH]; |
|
|
strcpy(line_copy, line); |
|
|
|
|
|
char *paren = strchr(line_copy, '('); |
|
|
char *func_name = line_copy; |
|
|
char *args = ""; |
|
|
|
|
|
if (paren) { |
|
|
*paren = '\0'; |
|
|
args = paren + 1; |
|
|
char *end_paren = strrchr(args, ')'); |
|
|
if (end_paren) *end_paren = '\0'; |
|
|
} |
|
|
|
|
|
trim(func_name); |
|
|
|
|
|
printf("🔍 Recherche de la fonction: %s\n", func_name); |
|
|
|
|
|
|
|
|
char c_func_name[MAX_VAR_NAME]; |
|
|
strcpy(c_func_name, func_name); |
|
|
|
|
|
|
|
|
for (int i = 0; c_func_name[i]; i++) { |
|
|
if (c_func_name[i] == '.') { |
|
|
c_func_name[i] = '_'; |
|
|
} |
|
|
} |
|
|
|
|
|
printf("🔧 Nom C converti: %s\n", c_func_name); |
|
|
|
|
|
|
|
|
if (find_package_function(c_func_name) != -1) { |
|
|
printf("📦 Fonction trouvée dans package C\n"); |
|
|
call_package_function(c_func_name, args); |
|
|
} |
|
|
|
|
|
else if (find_maya_function(func_name) != -1) { |
|
|
printf("🌟 Fonction Maya réutilisable trouvée\n"); |
|
|
execute_maya_function(func_name, args); |
|
|
} |
|
|
else { |
|
|
printf("❌ Fonction introuvable: %s\n", func_name); |
|
|
printf("📋 Fonctions disponibles:\n"); |
|
|
|
|
|
|
|
|
printf(" 🅒 Packages C:\n"); |
|
|
for (int i = 0; i < maya_package_count; i++) { |
|
|
if (maya_packages[i].loaded) { |
|
|
for (int j = 0; j < maya_packages[i].function_count; j++) { |
|
|
printf(" - %s\n", maya_packages[i].function_names[j]); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
printf(" 🌟 Fonctions Maya:\n"); |
|
|
for (int i = 0; i < maya_function_count; i++) { |
|
|
printf(" - %s\n", maya_functions[i].name); |
|
|
} |
|
|
|
|
|
if (maya_package_count == 0 && maya_function_count == 0) { |
|
|
printf(" (Aucune fonction personnalisée chargée)\n"); |
|
|
printf("💡 Utilisez my.package.charge('fichier.c') pour charger un package\n"); |
|
|
} |
|
|
} |
|
|
} |
|
|
else if (strstr(line, "my.")) { |
|
|
|
|
|
maya_error("Fonction Maya non implémentée", 0); |
|
|
} |
|
|
else { |
|
|
maya_error("Commande Maya non reconnue", 0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void execute_maya_file(const char *filename) { |
|
|
FILE *file = fopen(filename, "r"); |
|
|
if (!file) { |
|
|
maya_error("Impossible d'ouvrir le fichier", 0); |
|
|
return; |
|
|
} |
|
|
|
|
|
char line[MAX_LINE_LENGTH]; |
|
|
int line_number = 1; |
|
|
|
|
|
while (fgets(line, sizeof(line), file)) { |
|
|
|
|
|
line[strcspn(line, "\n")] = '\0'; |
|
|
|
|
|
|
|
|
if (strlen(line) == 0 || line[0] == '#') { |
|
|
line_number++; |
|
|
continue; |
|
|
} |
|
|
|
|
|
interpret_line(line); |
|
|
line_number++; |
|
|
} |
|
|
|
|
|
fclose(file); |
|
|
} |
|
|
|
|
|
int main(int argc, char *argv[]) { |
|
|
|
|
|
srand(time(NULL)); |
|
|
|
|
|
|
|
|
if (argc == 2) { |
|
|
const char *filename = argv[1]; |
|
|
|
|
|
|
|
|
const char *ext = strrchr(filename, '.'); |
|
|
if (ext && strcmp(ext, ".my") == 0) { |
|
|
execute_maya_file(filename); |
|
|
return 0; |
|
|
} else { |
|
|
maya_error("Le fichier doit avoir l'extension .my", 0); |
|
|
return 1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
printf("🌸 === Interpréteur Maya v6.0 - L'IMAGINATION SANS LIMITES === 🌸\n"); |
|
|
printf("🆕 NOUVELLES FONCTIONNALITÉS v6.0:\n"); |
|
|
printf("🤖 Chatbots: my.create.robot (créez vos assistants IA!)\n"); |
|
|
printf("🔄 Boucles: my.for, my.while, my.loop (contrôle de flux complet!)\n"); |
|
|
printf("🎨 Palettes: my.palette (dessins colorés personnalisés!)\n"); |
|
|
printf("🎮 Jeux: my.owngame (créateur de jeux interactifs!)\n"); |
|
|
printf("💬 Console: my.modifie.console (modifications dynamiques!)\n"); |
|
|
printf("📋 Menus: my.interactive (interfaces utilisateur ASCII!)\n"); |
|
|
printf("🎒 Inventaire: my.inventaire (système de gestion d'objets!)\n"); |
|
|
printf("📖 Histoires: my.histoire.recit, my.histoire.end (conteur magique!)\n"); |
|
|
printf("🐾 Animaux: my.own.pet, my.nombre.pet (créatures personnalisées!)\n"); |
|
|
printf("⚡ Titans: my.own.titan, my.nombre.titan (épopées légendaires!)\n"); |
|
|
printf("🧮 Maths avancées: médiane, moyenne, cube, carré, racine, degrés\n"); |
|
|
printf("📐 Théorèmes: Pythagore (my.pytha), Thalès (my.thales)\n"); |
|
|
printf("🎵 Musique: my.rythme.convertir, my.renvoie.gamme, my.obtenir.gamme\n"); |
|
|
printf("🗄️ Bases de données: my.db, my.send.db, my.supp.db, my.util.db\n"); |
|
|
printf("⚡ Code C intégré: my.execute.c (exécutez du C directement!)\n"); |
|
|
printf("🌌 Simulations: Robot, Quantique, Univers, Atomes, Voyage temporel\n"); |
|
|
printf("🧚♀️ Contes: Fées, Vampires, Sirènes, Monstres\n"); |
|
|
printf("📚 Exercices BAC: Gestion, Math, Histoire, Management (STMG/Général)\n"); |
|
|
printf("🎮 Mini-jeux: Quizz, Dés, Puissance4, Pendu, Memory, Snake, TicTac et plus!\n"); |
|
|
printf("📦 Packages C améliorés: Plus simples à créer et charger!\n"); |
|
|
printf("🚀 Maya v6.0 - OÙ L'IMAGINATION DEVIENT RÉALITÉ! 🚀\n"); |
|
|
printf("Mode interactif - Tapez 'exit' pour quitter\n\n"); |
|
|
|
|
|
char line[MAX_LINE_LENGTH]; |
|
|
|
|
|
while (1) { |
|
|
printf("maya> "); |
|
|
fflush(stdout); |
|
|
|
|
|
if (fgets(line, sizeof(line), stdin) == NULL) break; |
|
|
|
|
|
|
|
|
line[strcspn(line, "\n")] = '\0'; |
|
|
|
|
|
if (strcmp(line, "exit") == 0) { |
|
|
printf("🌸 Au revoir! Merci d'avoir utilisé Maya! 💖\n"); |
|
|
break; |
|
|
} |
|
|
|
|
|
if (strlen(line) > 0) { |
|
|
interpret_line(line); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for (int i = 0; i < maya_package_count; i++) { |
|
|
if (maya_packages[i].handle) { |
|
|
dlclose(maya_packages[i].handle); |
|
|
|
|
|
unlink(maya_packages[i].so_path); |
|
|
} |
|
|
} |
|
|
|
|
|
return 0; |
|
|
} |
|
|
|