Utilisateur:Adrien
Aller à la navigation
Aller à la recherche
Le projet au --Adrien 13 novembre 2010 à 12:53 (UTC)
Projet Lausanne 2011
But du jeu
Algorithme
Pseudo-code
Grille
- initialiser la grille (11x5x5 objets-cellules)
- charger un mot, le décomposer en caractères
- pour chaque caractère, sélectionner le motif correspondant (un motif est un tableau bi-dimensionnel 5x5 comportant les coordonnées (ensemble de paires ordonnées) de chaque cellule à illuminer)
- copier le motif dans chaque sous-grille
- parcourir chaque sous grille: pour chaque cellule reconnue, attribuer une valeur (i.e. 'true') et incrémenter indice d'usure
- parcourir la grille: pour chaque cellule 'true' ayant un indice d'usure inférieur à 11, afficher cette cellule en blanc; sinon, l'afficher en gris (rvb=211,211,211)
Ruban
- charger un texte depuis un fichier externe
- afficher, faire défiler
- biffer (comment?)
- pour tout mot biffé: lorsque ce mot est sorti du champ, le comparer au lexique
- afficher le mot le plus similaire dans la grille
Code
Embryon de code pour la grille entière. Reste à rendre autonome chaque sous-grille.
String ruban ="La ville est un palimpseste.";
String[] ruban_array={ruban};
PFont f;
float x;
int i=0;
int corps=72;
char c='*';
//
Cell[][][] grille; //tableau d'objets-cellules
int nb=11;
int cols=5;
int rows=5;
int larg=854;
int haut=480;
boolean[] motif={true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true};
boolean[] motifA={false,false,true,false,false,false,false,true,false,false,false,true,false,true,false,true,true,true,true,true,true,false,false,false,true};
boolean[] motifB={true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true};
boolean[] motifC={true,true,true,true,true,true,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,true,true,true,true};
boolean[] motifE={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true};
boolean[] motifF={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,false,false,false,false,true,false,false,false,false};
boolean[] motifI={false,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,false,false};
boolean[] motifL={true,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,true,true,true,true};
boolean[] motifM={true,false,false,false,true,true,true,false,true,true,true,false,true,false,true,true,false,false,false,true,true,false,false,false,true,};
boolean[] motifN={true,false,false,false,true,true,true,false,false,true,true,false,true,false,true,true,false,false,true,true,true,false,false,false,true};
boolean[] motifP={true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,false,true,false,false,false,false};
boolean[] motifS={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true};
boolean[] motifT={true,true,true,true,true,false,false,true,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,false,false};
boolean[] motifU={true,false,false,false,true,true,false,false,false,true,true,false,false,false,true,true,false,false,false,true,false,true,true,true,false};
boolean[] motifV={true,false,false,false,true,true,false,false,false,true,true,false,false,false,true,false,true,false,true,false,false,false,true,false,false};
boolean[] motifX={true,false,false,false,true,false,true,false,true,false,false,false,true,false,false,false,true,false,true,false,true,false,false,false,true};
//int bloc=0;
//SETUP
void setup() {
f = createFont("Tw Cen MT Condensed Extra Bold",corps);
x = larg;
size(larg,haut);
grille = new Cell[nb][cols][rows];
for (int h=0; h < nb; h++) {
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
grille[h][i][j] = new Cell(i*10+25+h*75,j*10,10,10);
}
}
}
}
//DRAW
void draw() {
background(0); //fond noir
fill(255);
textFont(f,16);
textAlign(LEFT);
text(ruban_array[i],x,400);
x = x - 3;
float w = textWidth(ruban_array[i]);
if (x < -w) {
x = larg;
i = (i + 1) % ruban_array.length;
}
//
for (int h=0; h < nb; h++) {
int n=0;
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
//if (bloc<=nb) { h=bloc; } else { bloc=0; }
if (motif[n]) {
grille[h][j][i].allumer();
}
else {
grille[h][j][i].eteindre();
}
n++;
}
}
}
}
//CELLULES
class Cell {
float x,y;
float w,h;
Cell(float tempX, float tempY, float tempW, float tempH) {
x = tempX;
y = tempY;
w = tempW;
h = tempH;
}
void allumer() {
stroke (0); //contour noir
fill (255); //interieur blanc
rect(x,y,w,h); //dessine les cellules
}
void eteindre() {
stroke (0);
fill (0);
rect(x,y,w,h);
}
}
//MAJ
void keyPressed() {
switch (key) {
case 'a': arrayCopy(motifA,motif);
break;
case 'b': arrayCopy(motifB,motif);
break;
case 'c': arrayCopy(motifC,motif);
break;
case 'e': arrayCopy(motifE,motif);
break;
case 'f': arrayCopy(motifF,motif);
break;
case 'i': arrayCopy(motifI,motif);
break;
case 'l': arrayCopy(motifL,motif);
break;
case 'm': arrayCopy(motifM,motif);
break;
case 'n': arrayCopy(motifN,motif);
break;
case 'p': arrayCopy(motifP,motif);
break;
case 's': arrayCopy(motifS,motif);
break;
case 't': arrayCopy(motifT,motif);
break;
case 'v': arrayCopy(motifV,motif);
break;
case 'u': arrayCopy(motifU,motif);
break;
case 'x': arrayCopy(motifX,motif);
break;
}
//
String nouveau=ruban_array[0].replace(key,c);
ruban_array[0]=nouveau;
println(ruban_array);
//bloc++;
}
- Code problématique
Cell[][][] grille; //tableau d'objets-cellules
int nb=11;
int cols=5;
int rows=5;
int larg=854;
int haut=480;
boolean[] motif={true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true};
boolean[] motifA={false,false,true,false,false,false,false,true,false,false,false,true,false,true,false,true,true,true,true,true,true,false,false,false,true};
boolean[] motifB={true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,true,true,true,true,true,true};
boolean[] motifC={true,true,true,true,true,true,false,false,false,false,true,false,false,false,false,true,false,false,false,false,true,true,true,true,true};
boolean[] motifE={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,false,false,false,false,true,true,true,true,true};
boolean[] motifF={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true,false,false,false,false,true,false,false,false,false};
boolean[] motifP={true,true,true,true,true,true,false,false,false,true,true,true,true,true,true,true,false,false,false,false,true,false,false,false,false};
boolean[] motifS={true,true,true,true,true,true,false,false,false,false,true,true,true,true,true,false,false,false,false,true,true,true,true,true,true};
boolean[] motifX={true,false,false,false,true,false,true,false,true,false,false,false,true,false,false,false,true,false,true,false,true,false,false,false,true};
int bloc=0;
//SETUP
void setup() {
size(larg,haut);
grille = new Cell[nb][cols][rows];
for (int h=0; h < nb; h++) {
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
grille[h][i][j] = new Cell(i*10+25+h*75,j*10,10,10);
}
}
}
}
//DRAW
void draw() {
background(0); //fond noir
for (int h=0; h < nb; h++) {
int n=0;
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
if (bloc<=nb) { h=bloc; } else { bloc=0; } // ??? ///
if (motif[n]) {
grille[h][j][i].allumer();
}
else {
grille[h][j][i].eteindre();
}
n++;
}
}
}
}
//CELLULES
class Cell {
float x,y;
float w,h;
Cell(float tempX, float tempY, float tempW, float tempH) {
x = tempX;
y = tempY;
w = tempW;
h = tempH;
}
void allumer() {
stroke (0); //contour noir
fill (255); //interieur blanc
rect(x,y,w,h); //dessine les cellules
}
void eteindre() {
stroke (0);
fill (0);
rect(x,y,w,h);
}
}
//MAJ
void keyPressed() {
switch (key) {
case 'a': arrayCopy(motifA,motif);
break;
case 'b': arrayCopy(motifB,motif);
break;
case 'c': arrayCopy(motifC,motif);
break;
case 'e': arrayCopy(motifE,motif);
break;
case 'f': arrayCopy(motifF,motif);
break;
case 'p': arrayCopy(motifP,motif);
break;
case 's': arrayCopy(motifS,motif);
break;
case 'x': arrayCopy(motifX,motif);
break;
}
bloc++; /// ??? ///
}
phase2-3: transformation de fonte vectorielle; imput(data); logFont(font '.flw'; 3x taille x3
Exemples
Ruban
// An array of news headlines
String[] headlines = {
"Processing downloads break downloading record.",
"New study shows computer programming lowers cholesterol.",
};
PFont f; // Global font variable
float x; // horizontal location of headline
int index = 0;
void setup() {
size(400,200);
f = createFont("Arial",16,true);
// Initialize headline offscreen to the right
x = width;
}
void draw() {
background(255);
fill(0);
// Display headline at x location
textFont(f,16);
textAlign(LEFT);
text(headlines[index],x,180);
// Decrement x
x = x - 3;
// If x is less than the negative width,
// then it is off the screen
float w = textWidth(headlines[index]);
if (x < -w) {
x = width;
index = (index + 1) % headlines.length;
}
}
Grille
// 2D Array of objects
Cell[][] grid;
// Number of columns and rows in the grid
int cols = 10;
int rows = 10;
void setup() {
size(200,200);
grid = new Cell[cols][rows];
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Initialize each object
grid[i][j] = new Cell(i*20,j*20,20,20,i+j);
}
}
}
void draw() {
background(0);
// The counter variables i and j are also the column and row numbers and
// are used as arguments to the constructor for each object in the grid.
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Oscillate and display each object
grid[i][j].oscillate();
grid[i][j].display();
}
}
}
// A Cell object
class Cell {
// A cell object knows about its location in the grid as well as its size with the variables x,y,w,h.
float x,y; // x,y location
float w,h; // width and height
float angle; // angle for oscillating brightness
// Cell Constructor
Cell(float tempX, float tempY, float tempW, float tempH, float tempAngle) {
x = tempX;
y = tempY;
w = tempW;
h = tempH;
angle = tempAngle;
}
// Oscillation means increase angle
void oscillate() {
angle += 0.02;
}
void display() {
stroke(255);
// Color calculated using sine wave
fill(127+127*sin(angle));
rect(x,y,w,h);
}
}
