import 'dart:math';
import 'dart:io';
class Puzzle {
List boxes = new List(16);
int empty_position;
}
void main() {
//Fonctions
void init_puzzle(Puzzle puzzle_in) {
print('Init puzzle...');
//Initialisation des cases
puzzle_in.boxes[0]='[01]';
puzzle_in.boxes[1]='[02]';
puzzle_in.boxes[2]='[03]';
puzzle_in.boxes[3]='[04]';
puzzle_in.boxes[4]='[05]';
puzzle_in.boxes[5]='[06]';
puzzle_in.boxes[6]='[07]';
puzzle_in.boxes[7]='[08]';
puzzle_in.boxes[8]='[09]';
puzzle_in.boxes[9]='[10]';
puzzle_in.boxes[10]='[11]';
puzzle_in.boxes[11]='[12]';
puzzle_in.boxes[12]='[13]';
puzzle_in.boxes[13]='[14]';
puzzle_in.boxes[14]='[15]';
puzzle_in.boxes[15]='[EV]';
//Initialisation de la position vide
puzzle_in.empty_position = 15;
print('Done');
}
void print_puzzle(Puzzle puzzle_in) {
print('Print puzzle...');
print(puzzle_in.boxes[0]+puzzle_in.boxes[1]+puzzle_in.boxes[2]+puzzle_in.boxes[3]);
print(puzzle_in.boxes[4]+puzzle_in.boxes[5]+puzzle_in.boxes[6]+puzzle_in.boxes[7]);
print(puzzle_in.boxes[8]+puzzle_in.boxes[9]+puzzle_in.boxes[10]+puzzle_in.boxes[11]);
print(puzzle_in.boxes[12]+puzzle_in.boxes[13]+puzzle_in.boxes[14]+puzzle_in.boxes[15]);
print('Empty position = ');
print(puzzle_in.empty_position);
print('...Done');
}
void mix_puzzle(Puzzle puzzle_in_1, Puzzle puzzle_in_2) {
print('Mix puzzle...');
List random_list = new List(puzzle_in_1.boxes.length);
List check_list = new List(puzzle_in_1.boxes.length);
//Initialiser la check_list
for (int i = 0; i < random_list.length; i++) {
check_list[i]=false;
}
//Initialiser la random_list
int i = 0;
int j = 0;
var rgn = new Random();
while(j < 16) {
i = rgn.nextInt(16);
if (check_list[i]==false) {
random_list[j]=i;
j = j + 1;
check_list[i]=true;
}
}
//Mélanger le puzzle
for (int i = 0; i < puzzle_in_1.boxes.length ; i++) {
puzzle_in_1.boxes[random_list[i]]=puzzle_in_2.boxes[i];
}
//Mettre à jour la position vide
puzzle_in_1.empty_position = random_list[puzzle_in_1.boxes.length-1];
print('Done');
}
bool compare_puzzle(Puzzle puzzle_in_1, Puzzle puzzle_in_2) {
print('Check puzzle...');
bool compare = true;
if (puzzle_in_1.boxes.length!=puzzle_in_2.boxes.length) {
return false;
} else {
int i = 0;
while(i < puzzle_in_1.boxes.length) {
if (puzzle_in_1.boxes[i]!=puzzle_in_2.boxes[i]) {
compare = false;
break;
}
i = i + 1;
}
return compare;
}
return true;
}
void move_down (Puzzle puzzle_in) {
if (puzzle_in.empty_position < 4) {
print('move down: impossible');
} else {
String box_to_move = puzzle_in.boxes[puzzle_in.empty_position-4];
puzzle_in.boxes[puzzle_in.empty_position-4]='[EV]';
puzzle_in.boxes[puzzle_in.empty_position]=box_to_move;
puzzle_in.empty_position=puzzle_in.empty_position-4;
}
}
void move_up (Puzzle puzzle_in) {
if (puzzle_in.empty_position > 11) {
print('move up: impossible');
} else {
String box_to_move = puzzle_in.boxes[puzzle_in.empty_position+4];
puzzle_in.boxes[puzzle_in.empty_position+4]='[EV]';
puzzle_in.boxes[puzzle_in.empty_position]=box_to_move;
puzzle_in.empty_position=puzzle_in.empty_position+4;
}
}
void move_right (Puzzle puzzle_in) {
if (puzzle_in.empty_position % 4 == 0) {
print('move right: impossible');
} else {
String box_to_move = puzzle_in.boxes[puzzle_in.empty_position-1];
puzzle_in.boxes[puzzle_in.empty_position-1]='[EV]';
puzzle_in.boxes[puzzle_in.empty_position]=box_to_move;
puzzle_in.empty_position=puzzle_in.empty_position-1;
}
}
void move_left (Puzzle puzzle_in) {
if (puzzle_in.empty_position % 4 == 3) {
print('move left: impossible');
} else {
String box_to_move = puzzle_in.boxes[puzzle_in.empty_position+1];
puzzle_in.boxes[puzzle_in.empty_position+1]='[EV]';
puzzle_in.boxes[puzzle_in.empty_position]=box_to_move;
puzzle_in.empty_position=puzzle_in.empty_position+1;
}
}
//Message d'accueil
print("Hello, YphiPuzzle!");
//Initialisation du puzzle témoin
Puzzle good_puzzle = new Puzzle();
init_puzzle(good_puzzle);
//Initialisation du puzzle
Puzzle yphi_puzzle = new Puzzle();
init_puzzle(yphi_puzzle);
//Mélange du puzzle
mix_puzzle(yphi_puzzle,good_puzzle);
//Affichage du puzzle
print_puzzle(yphi_puzzle);
int move_count = 0;
while (!(compare_puzzle(yphi_puzzle,good_puzzle))) {
//Invite de commande
print('Type a command (z = up, s = down, q = left, d = right, e = exit): ');
//Lecture de la commande
String input = stdin.readLineSync();
//Interprétation de la commande
if (input == 'z') {
print('You typed: $input ==> Moving up');
move_up(yphi_puzzle);
} else if (input == 's') {
print('You typed: $input ==> Moving down');
move_down(yphi_puzzle);
} else if (input == 'q') {
print('You typed: $input ==> Moving left');
move_left(yphi_puzzle);
} else if (input == 'd') {
print('You typed: $input ==> Moving right');
move_right(yphi_puzzle);
} else if (input == 'e') {
print('You typed: $input ==> Exiting');
//A modifier
move_right(yphi_puzzle);
} else {
print('Unknown command');
}
move_count = move_count + 1;
//Affichage du puzzle
print_puzzle(yphi_puzzle);
print('Move count = $move_count');
}
}
Aucun commentaire:
Enregistrer un commentaire