Kortstokk
Kortbildene finnes i mange fritt tilgjengelige versjoner på nettet.
Skisssen ser slik ut:
Et kort er definert slik:
_kort.pde
// beskrivelse av et kort class kort{ int nr; // 1..13 String type; // spar,kløver,hjerter,ruter PImage forside; boolean visForsiden; // hvor er det plassert float posX,posY; // lag kortet (constructor) kort(int nr,String type){ this.nr=nr; this.type=type; // f.eks.:data/s9.png String filename="data/"+type.charAt(0)+nr+".png"; forside=loadImage(filename); visForsiden=true; // et sted må vi legge det posX=width/2; posY=height/2; } void tegn(){ if(visForsiden) image(forside,posX,posY); else // bruk global bakside image(baksiden,posX,posY); } void vend(){ visForsiden=!visForsiden; } void plasser(float x,float y){ posX=x; posY=y; } void flytt(int dx,int dy){ posX=posX+dx; posY=posY+dy; } boolean treff(){ // er museposisjon inne i kort firkanten return((mouseX < posX+kB)&&(mouseX > posX) && (mouseY < posY+kH)&&(mouseY > posY)); } }
og kortene ordnes og manipuleres slik
_spillkort.pde
/* Spillkort Bildene er fra en fri kilde på nettet bildenavn: type og verdi. f.eks s2.png er spar 2 og bakside: backbv.png */ // vi vil lage en kortstokk ArrayList<kort> kortStokk; // alle kort har samme bakside PImage baksiden; // alle kort er like store int kB,kH; // kortet vi drar med musa kort aktivtKort; void setup(){ size(600,600); // gjør klar baksiden og kortstørrelsen baksiden=loadImage("data/backbv.png"); kB=baksiden.width; kH=baksiden.height; // lager ny kortstokk kortStokk=new ArrayList<kort>(); // fyll opp med kort for(int i=0;i<13;i++){ kortStokk.add(new kort(i+1,"spar")); kortStokk.add(new kort(i+1,"hjerter")); kortStokk.add(new kort(i+1,"ruter")); kortStokk.add(new kort(i+1,"kløver")); } // spre dem tilfeldig for(kort k:kortStokk) { k.plasser(random(10,width-kB-10), random(10,height-kH-10)); } // ikke noe aktivt kort aktivtKort=null; } void draw(){ // grønn filt på bordet background(10,200,0); // tegner bakfra siden det aktive // kortet ligger først i stokken for(int i=kortStokk.size()-1; i >=0; i--){ kortStokk.get(i).tegn(); } } void mousePressed(){ // har vi truffet et kort ? // leter forfra for( kort k:kortStokk){ if (k.treff()){ aktivtKort=k; // flytt det forrest kortStokk.remove(k); kortStokk.add(0,aktivtKort); return; } } } void mouseDragged(){ // drar vi egentlig på et kort ? if(aktivtKort!=null){ // ikke flytt utenfor rammene if((mouseX < width-10) && (mouseX > 10) &&(mouseY < height-10)&&(mouseY>10)) aktivtKort.flytt(mouseX-pmouseX,mouseY-pmouseY); } } void mouseReleased(){ // det var det, ikke noe aktivt kort aktivtKort=null; } void mouseClicked(){ // enkelt klikk // har vi truffet et kort ? // leter forfra for( kort k:kortStokk){ if (k.treff()){ aktivtKort=k; // flytt det forrest kortStokk.remove(k); kortStokk.add(0,aktivtKort); // snu det aktivtKort.vend(); aktivtKort=null; return; } } }