Programmoù gant processing.py 2021-22

Un nebeut programoù ber (<50 linenn kod) evit deskiñ programiñ gant Processing (yezh Python, Java pe Javascript)

Barr-livañ

Ur program gant Processing e mod « Java ». Tresañ war ar prenest grafik gant al logodenn, doare barr-livañ.

Evit mont pelloc’h : ouzhpennañ un doare da ziverkañ an tresadenn.

void setup() {
  size(1000, 900);
  background(255);  // Livañ ar prenest a-bezh e gwenn
  frameRate(500);   // Brasaat ar "framerate" evit brasaat spisder an barr-livañ
}

void draw() {
 stroke(0);     // Dibab a liv du
 
 float dx = mouseX - pmouseX;
 float dy = mouseY - pmouseY;
 float d = sqrt(dx*dx + dy*dy);  // Jediñ pellder ar logodenn e keñver ar "frame" diwezhañ
  
  if (mousePressed){
    strokeWeight(4 + d*0.3);
    line(pmouseX, pmouseY, mouseX, mouseY);
  }
}

Klogorennoù

Diskouezh kelc’hioù a liv disheñvel lec’hiet en un doare ankivil war ar skramm. Implijet e vez ar fonksion random e-leizh evit kaout talvoudoù ankivil.

Srivet gant Processing, doare Java.

void setup(){
  size(1000,800);
  background(255);
  noStroke(); 
}

void draw(){
  fill(255, 255, 255, 8);  // Adlivañ ar skramm gant gwenn treuzwelus
  rect(0, 0, width, height);
  
  fill(random(180,255), random(180,255), random(180,255)); // Dibab un liv ankivil
  circle(random(width), random(height), random(40, 80));  // Tresañ ur c'helc'h a ment ankivil en un lec'h ankivil
}

Mezennoù erc’h

Erru ar goañv met kentoc’h eget chom da gortoz e kouezfe an erc’h, klasket e vo krouiñ omp erc’h galloudel deomp ni. Evel-se e c’hallimp profitañ ouzh ar sell ha chom en tommder er memes koulz.

Skrivet gant Processing, doare Python.

mezennou_pos = []  # Evit dougenn daveenoù lerc'h ar mezennoù
mezennou_vel = []  # Evit dougenn vektorioù tizh ar mezennoù
#mezennou_liv = []

def setup():
    size(800, 800)
    noStroke()
    # Krouet e vez ur bochad mezennoù erc'h nevez
    for i in range(600):
        mezennou_pos.append(PVector(random(0, width),random(-600, 0)))
        mezennou_vel.append(PVector(0, 1))  # Roet e vez un tizh a orin
        #mezennou_liv.append(color(random(0,255),random(0,255),random(0,255)))

def draw ():
    background(0) 
    
    for i in range (600):
        mezennou_vel[i].x += random(-1, 1) * 0.01
        mezennou_vel[i].y += random(-1, 1) * 0.01
        mezennou_pos[i] += mezennou_vel[i]
        
        if mezennou_pos[i].y > height:  # Ma vez ar mezenn erruet e traoñ ar skramm...
            # Adlaket e vez en nec'h ar skramm
            mezennou_pos[i].y = 0
            mezennou_pos[i].x = random(0, width)
            # Adlaket e vez an tizh da 1 war-zu an traoñ
            mezennou_vel[i] = PVector(0, 1)
        
        # Tresañ ar mezenn
        #fill(mezennou_liv[i])
        circle(mezennou_pos[i].x, mezennou_pos[i].y, 8)    

Pikseloù « Sparta »

Setu ur mennozh bet kinniget gant Paolig : ur bouchad pikseloù a loc’h eus traoñ ar skramm hag a pign tamm-ha-tamm. An uhelañ ma vezont, ar brasañ eo o chañs da vezañ « lazet » (da lavaret eo, adkregiñ diouzh traoñ ar skramm).

Ar program-mañ zo bet skrivet gant Processing e doare Python.

pos = []

def setup():
    global pos
    print(random(0, height))
    strokeWeight(2)
    
    size(500, 500)
    for i in range(10000):
        pos.append(PVector(random(0, width), height-1))

def draw():
    global pos 
    
    background(255)
    for daveennou in pos:
        point(daveennou.x, daveennou.y)
        daveennou.y -= random(0, 1)
        if random(0, daveennou.y) < 1:
            daveennou.x = random(0, width)
            daveennou.y = height-1

Morpioñs

bouestou = [0, 0, 0, 0, 0, 0, 0, 0, 0]

def setup():
    size(500, 500)

def draw():
    background(255)
    for i in range(9):
        print(i)

def mouseClicked():
    i = 3 * mouseX / width
    j = 3 * mouseY / height
    n = 3 * j + i
    print(i, j, n)
    

Deomp un tamm pelloc’h en eil lodenn :

bouestou = [0, 0, 0, 0, 0, 0, 0, 0, 0]
taol = 0

def setup():
    size(600, 600)
    noStroke()

def draw():
    background(255)
    for n in range(9):
        x = n % 3
        y = int(n / 3)
        if bouestou[n] == 1:
            fill(255, 0, 0)
            rect(x*width/3, y*height/3, width/3, height/3)
        elif bouestou[n] == 2:
            fill(0, 0, 255)
            rect(x*width/3, y*height/3, width/3, height/3)


def mouseClicked():
    global taol
    
    i = 3 * mouseX / width
    j = 3 * mouseY / height
    n = 3 * j + i
    
    if bouestou[n] == 0:
        if taol % 2 == 0:
            bouestou[n] = 1
        else:
            bouestou[n] = 2
        taol = taol+1

Ha setu (dam)echu ar poellad ! Ne chom nemet da kinklañ ar c’hinnig hervez ho c’hoant.

bouestou = [0, 0, 0, 0, 0, 0, 0, 0, 0]
taol = 0
gameover = False

def setup():
    size(600, 600)
    noStroke()
    textSize(80)


def draw():
    if gameover:
        return
    
    background(255)
    for n in range(9):
        x = n % 3
        y = int(n / 3)
        if bouestou[n] == 1:
            fill(255, 0, 0)
            rect(x*width/3, y*height/3, width/3, height/3)
        elif bouestou[n] == 2:
            fill(0, 0, 255)
            rect(x*width/3, y*height/3, width/3, height/3)


def mouseClicked():
    global taol
    global gameover
    global bouestou
    
    if gameover:
        gameover = False
        bouestou = [0, 0, 0, 0, 0, 0, 0, 0, 0]
        return
    
    i = 3 * mouseX / width
    j = 3 * mouseY / height
    n = 3 * j + i
    
    if bouestou[n] == 0:
        if taol % 2 == 0:
            bouestou[n] = 1
        else:
            bouestou[n] = 2
        taol = taol+1
    
    for p in range(1, 3):
        if bouestou[0] == bouestou[1] == bouestou[2] == p:
            gounezet(p)
        elif bouestou[3] == bouestou[4] == bouestou[5] == p:
            gounezet(p)
        elif bouestou[6] == bouestou[7] == bouestou[8] == p:
            gounezet(p)
        elif bouestou[0] == bouestou[3] == bouestou[6] == p:
            gounezet(p)
        elif bouestou[1] == bouestou[4] == bouestou[7] == p:
            gounezet(p)
        elif bouestou[2] == bouestou[5] == bouestou[8] == p:
            gounezet(p)
        elif bouestou[0] == bouestou[4] == bouestou[8] == p:
            gounezet(p)
        elif bouestou[2] == bouestou[4] == bouestou[6] == p:
            gounezet(p)

def gounezet(p):
    global gameover
    if p == 1:
        background(255, 0, 0)
        fill(255)
        text("GOUNEZET", 90, 300)
    elif p == 2:
        background(0, 0, 255)
    
    gameover = True
    #print("Gounezet e peus c'hoarier {}".format(p))
    print("Gounezet e peus c'hoarier", p)
    
    

Effedoù grafikel a bep seurt

Ur program berr bet graet gant Paolig gant Processing doare Python.

def setup():
    size(1500,1000)

def draw():
    #background(0)
    for i in range(100):
        circle(mouseY,mouseX,random(10,200))
        line(mouseY,mouseX,mouseX,mouseY)
        circle(mouseX,mouseY,random(10,200))

Skeudennoù-bev gant p5.js

Implijet e vo ar yezh p5.js evit deskiñ tresañ traoù war ar skramm. Ar yezh p5.js a zo diazezet war ar yezh javascript. Graet eo evit bezañ peurgaset diouzh ur merdeer hag aes eo da enframmañ ar poelladoù skrivet ganti e-barzh ur bajenn Web.

Ne’z eus ket ezhomm staliañ netra evit kregiñ da kodiñ gant p5.js. Tu ‘zo deoc’h implij un « éditeur » enlinenn, evel amañ.

Tresañ gant livioù

function setup() {
    createCanvas(400, 400);
}

function draw() {
    background(200, 200, 255); // Livet e vez ar foñs
    
    fill(10, 220, 50); // Dibabet e vez un liv nevez (tost da gwer)
    rect(280, 100, 80, 80); // Treset e vez ur skouergornek
    
    fill(255, 60, 200); // Dibabet e vez ul liv nevez (tost da roz)
    ellipse(width/2, height/2, 100, 200); // Treset un elips
}

Ar fonksion background a servij da livañ ar prenestr grafik penn-da-benn gant al liv ho peus c’hoant. Diverket e vo pep tra a oa bet treset araok. Roet e vez dezhi 3 arguzenn : ur c’hementad a ruz (etre 0 ha 255), ur c’hementad a gwer (etre 0 ha 255) hag ur c’hementad a glas (etre 0 ha 255).
Bep gwech ma vez implijet ur fonksion gant livioù e vo roet 3 arguzenn (Ruz, Gwer, Glas) evel-se.

Ar fonksion fill a vez implijet evit dibab ul liv nevez. Gwellet e vo an disoc’h gant pep fonksion tresañ a teuio warlec’h.

Gant ar rect e vez treset ur skouergornek. Roet e vez dezhi 4 arguzenn : position x, position y, ment x ha ment y.

Gant ar fonksion ellipse e vez treset un elips. Roet e vez dezhi 4 arguzenn : position kreiz x, position kreiz y, ment x, ment y.

[[https://editor.p5js.org/lise_diwan/sketches/cLT-9X1Gg]]

Lakaat an traoù da fiñval

let x; // Krouiñ ur varienn 'x'
let y; // Krouiñ ur varienn 'y'
    
function setup() {
    createCanvas(400, 400);
    fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
    
    x = 20; // Deraouiñ ar varienn 'x'
    y = 20; // Deraouiñ ar varienn 'y'
}

function draw() {
    background(255); // Livet e vez ar foñs e gwenn kann
    
    ellipse(x, y, 50, 50); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
    
    x += 1; // Kemmet e vez ar varienn 'x'
    y += 1; // Kemmet e vez ar varienn 'y'
}

Amañ e vez krouet div varienn, x hag y evit derc’hel daveenoù ur c’helc’h. Bep gwech ma vez peurgaset ar fonksion draw (30 wech dre eilenn dre ziouer) e vo diverket ar prenest, treset ar c’helc’h gant an daveenoù x hag y hag cheñchet an deveennoù un tammig.

Klaskit cheñch an doare ma fiñv ar c’helc’h.

[[https://editor.p5js.org/lise_diwan/sketches/Y0rEj1ue5]]

Wrap around

Ur gudenn on eus. Ma’z a re bell hor c’helc’h e vo er maez eus hor prenestr. Implijet e vo ur framm konsision evit gwiriekaat daveenoù ar c’helc’h hag adlakaat anezho el lec’h mat ma’z eont kuit eus ar prenestr.

let x; // Krouiñ ur varienn 'x'
let y; // Krouiñ ur varienn 'y'
    
function setup() {
    createCanvas(400, 400);
    fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
    
    x = 20; // Deraouiñ ar varienn 'x'
    y = 20; // Deraouiñ ar varienn 'y'
}

function draw() {
    background(255); // Livet e vez ar foñs e gwenn kann
    
    ellipse(x, y, 50, 50); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
    
    x += 3.6; // Kemmet e vez ar varienn 'x'
    y += 2.2; // Kemmet e vez ar varienn 'y'
    
    if (x>width) {
        x -= width;
    }
    if (x<0) {
        x += width;
    }
    if (y>height) {
        y -= height;
    }
    if (y<0) {
        y += height;
    }
}

Gwirieket e vez 4 kondision gant ar stadamant if : Ma’z eo x er maez eus an tu kleiz x<0, ma’z eo x er maez eus an tu dehou x>width, ma’z eo y re izel y>height ha ma’z eo y re uhel y<0.

E-barzh ar variennoù width ha height e vez dalc’het ledander hag uhelder ar prenestr grafik.

Merzet ho peus maretez e oa tuet fall ax an uhelder. Gwir eo, war ur skramm, al linenn gant an daveen y=0 a zo en nec’h tout ha pa vez kresket an daveen y ez a izeloc’h an traoù. Ar poent 0, 0 a zo en nec’h en tu kleiz hag ar poent width, heigh a zo en traoñ hag en tu dehou eus ar prenestr.

[[https://editor.p5js.org/lise_diwan/sketches/kCFd7pKGe]]

Ur bern objedoù o fiñval

War un urzhiataer, pa vez graet un dra gant un elfenn n’eo ket diaes tre ober ar memes tra gant un niver bras tre a elfennoù eñvel.

let x = [4, 53, 233, 12, 300, 210]; // Krouiñ ul listenn 'x'
let y = [320, 111, 23, 201, 50, 15]; // Krouiñ ul listenn 'y'

function setup() {
    createCanvas(400, 400);
    fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset
}

function draw() {
    background(255); // Livet e vez ar foñs e gwenn kann
    
    for (let i=0; i<x.length; i++) {
        ellipse(x[i], y[i], 50, 50); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
        x[i] += 1; // Kemmet e vez ar varienn 'x' el listenn
        y[i] += 5; // Kemmet e vez ar varienn 'y' el listenn
        if (x[i]>width) {
            x[i] -= width;
        }
        if (x[i]<0) {
            x[i] += width;
        }
        if (y[i]>height) {
            y[i] -= height;
        }
        if (y[i]<0) {
            y[i] += height;
        }
    }
}

Amañ e vez gwelet ur bern traoù nevez ha galoudus. Implijet e vez listennoù evit derc’hel meur a variennoù dameñvel. Implijet e vez ar rodell  »for » evit //iteriñ// war pep talvoud kavet e-barzh al listennoù.

Menozioù : Klaskit krouiñ 2 listennad nevez  »tizh_x » ha  »tizh_y » evit derc’hel un tizh disheñvel evit pep kelc’h. Al listennoù-se a vo ar memes ment eget ar re all (6 elfenn ma n’ho peus ket cheñchet an traoù).

[[https://editor.p5js.org/lise_diwan/sketches/vSCogDPDm]]

Let's get Crazy !

Termeniñ pep kelc’h dre dorn a zo skuizus. Penaos ober evit termeniñ un niver bras tre a kelc’hoù (pe traoù all) en un doare aes ? Implijet e vo ar rodell for en-dro evit-se.

let x = []; // Krouiñ ul listenn goulo 'x'
let y = []; // Krouiñ ul listenn goulo 'y'
let niver = 500; // Niver a elfennoù da grouiñ

function setup() {
    createCanvas(400, 400);
    fill(255, 0, 0); // Dibab al liv ruz evit pep elfenn treset

    // Amañ e vo leuniet al listennoù dre ur rodell 'for'
    for (let i=0; i<niver; i++) {
        x[i] = random(width);
        y[i] = random(height);
    }
}

function draw() {
    background(255); // Livet e vez ar foñs e gwenn kann

    for (let i=0; i<x.length; i++) {
        ellipse(x[i], y[i], 20, 20); // Treset e vez ur c'helc'h d'an daveenoù 'x' ha 'y'
        x[i] += 1; // Kemmet e vez ar varienn 'x' el listenn
        y[i] += 10; // Kemmet e vez ar varienn 'y' el listenn
        if (x[i]>width) {
            x[i] -= width;
        }
        if (x[i]<0) { x[i] += width; } if (y[i]>height) {
            y[i] -= height;
        }
        if (y[i]<0) {
            y[i] += height;
        }
    }
}

[[https://editor.p5js.org/lise_diwan/sketches/a7_tCZmO0]]

Spritesheets

Gant ar yezh p5.js ez eus tu enframmañ skeudennoù gif bev met pa ‘vez kalz a skeudennoù bev disheñvel da implij e-barzh ho poellad e c’hell dont da vezañ luziet buhan a walc’h.
Un doare all d’ober a zo lakaat ur bern tresadennoù bihan war ar memes skeudenn, anvet ur « spritesheet ». Evit krouiñ ur skeudenn bev e vo diskouezet nemet un lodennig eus ar skeudenn bras bep gwech.
Pouezus e vefe eus ar memes ment pep skeudennig eus ar spritesheet.

Ur skouer spritesheet eus ar re gentañ e istor mab den :
{{ https://upload.wikimedia.org/wikipedia/commons/4/4a/Muybridge_race_horse_gallop.jpg?nolink&400 }}

let img;
let img_size = 32;
let x_pos, y_pos;

let last_frame;
const frame_dur = 800;

const animation = [[0, 3], [1, 3]];
let frame_i;

function preload() {
    img = loadImage("data/toto.png");
}

function setup() {
    createCanvas(400, 400);
    imageMode(CENTER);
    x_pos = width/2;
    y_pos = height-4*img_size;
    last_frame = millis();
    frame_i = 0;
}

function draw() {
    background(255);
    
    if (millis() - last_frame >= frame_dur) {
        frame_i += 1;
        last_frame = millis();
        
        if (frame_i >= animation.length) {
            frame_i = 0;
        }
    }

    image(img, x_pos, y_pos,
    img_size*4, img_size*4,
    img_size*animation[frame_i][0],
    img_size*animation[frame_i][1],
    img_size, img_size);
}

[[https://editor.p5js.org/lise_diwan/sketches/gpLMaorbY5]]

Aotomata

Setu an teknik diwezhañ a vo gwelet evit krouiñ ur sekañs skeudennoù-bev o cheñch ingal.
Gant pep animasion e klot ur stad. Pep stad a zo liammet gant stadoù all ha pa ‘vez cheñchet stad ne c’heller nemet mont betek ar stadoù liammet d’ar stad diwezhañ.

Pa vez loc’het ar poellad e vez aet d’ar stad a-orin (an hini gwer war ar skeudenn). Pa ‘vez erruet d’ar stad fin (an hini ruz) e vez echu ar c’hoari (« Game Over »).
Evit cheñch stad e vez tenet un niverenn er sort (evel gant un diñs) hag hervez an disoc’h e vez aet betek ur stad pe ur stad all.

{{ :lise_diwan:aotomata.png?nolink&400 |}}

// Listenn ar skeudennoù evit pep animasion
const anim_dihunet = [[6, 1]];
const anim_dihun = [[0, 0]];
const anim_bazailhat = [[4, 4], [4, 4], [4, 4]];
const anim_kousket = [[0, 3], [1, 3]];
const anim_skrab = [[5, 2], [6, 2], [5, 2], [6, 2], [5, 2], [6, 2]];
const anim_marv = [[6, 4]];

// Ment pep skeudennig (e pixels)
const img_size = 32;

// Padelez pep skeudenn en animasion
const frame_dur = 400;

// Roadennoù all...
let anim;
let frame_i;
let last_frame;
let stad;
let rand;
let img;
let x_pos, y_pos;

function preload() {
    // Karg ar spritesheet e memor an urzhiataer
    img = loadImage("data/toto.png");
}

function setup() {
    createCanvas(400, 400);
    imageMode(CENTER);
    x_pos = width/2;
    y_pos = height-4*img_size;
    last_frame = millis();
    frame_i = 0;
    
    stad = "DIHUNET";
    anim = anim_dihunet;
}

function draw() {
    background(255);
    
    if (millis() - last_frame >= frame_dur) {
        // Tremen d'ar skeudenn da-heul
        frame_i += 1;
        last_frame = millis();
        
        if (stad == "DIHUNET") {
            rand = int(random(20));
            if (rand == 0) {
                // Bazailhat
                anim = anim_bazailhat;
                frame_i = 0;
                stad = "BAZAILHAT";
            } else if (rand == 1) {
                // En em skrabañ
                anim = anim_skrab;
                frame_i = 0;
                stad = "SKRAB";
            }
    
        } else if (stad == "DIHUN") {
            anim = anim_dihunet;
            frame_i = 0;
            stad = "DIHUNET";
        
        } else if (stad == "BAZAILHAT") {
            // Gortoz e vefe echu an animasion araok cheñch stad
            if (frame_i == anim.length) {
                if (random(6) < 1.0) {
                    // Mont da gousket
                    anim = anim_kousket;
                    frame_i = 0;
                    stad = "KOUSKET";
                } else {
                    // Dihunet
                    anim = anim_dihunet;
                    frame_i = 0;
                    stad = "DIHUNET";
                }
            }
        
        } else if (stad == "KOUSKET") {
            rand = int(random(100));
            if (rand == 0) {
                anim = anim_marv;
                frame_i = 0;
                stad = "MARV";
            } else if (rand < 6) {
                anim = anim_dihun; frame_i = 0; stad = "DIHUN";
            }
        
        } else if (stad == "SKRAB") {
            if (frame_i == anim.length) {
                anim = anim_dihunet;
                frame_i = 0;
                stad = "DIHUNET";
            }
            
        } else if (stad == "MARV") {
            anim = anim_marv;
        }
        
        // Distreiñ en penn kentañ an animation ma'z eo echu
        if (frame_i >= anim.length) {
            frame_i = 0;
        }
    }
    
    // Tresañ ar skeudenn
    image(img, x_pos, y_pos,
    img_size*4, img_size*4,
    img_size*anim[frame_i][0],
    img_size*anim[frame_i][1],
    img_size, img_size);
}

[[https://editor.p5js.org/lise_diwan/sketches/pOJwECXkE]]