최신판 |
당신의 편집 |
2번째 줄: |
2번째 줄: |
| === 중간 과제 === | | === 중간 과제 === |
| <syntaxhighlight lang="java" line='line'> | | <syntaxhighlight lang="java" line='line'> |
| PImage bg, sia, imageGradient, dimpleImage, eyelidImage, lip;
| | def quick_sort(arr): |
| PFont Helvetica75, Helvetica93, AppleSDGothicNeoB, AppleSDGothicNeoB20;
| | less = [] |
| boolean doubleEyelid=false, dimple=false; // 쌍꺼풀, 보조개
| | pivot_list = [] |
| boolean mouseClicked=false, keyRefreshed=false, draw_face=false;
| | more = [] |
| color skinColor=#FAD2AC; // 피부색
| | if len(arr) <= 1: |
| int selectRL=1, selectUD=1; // 좌우 선택, 상하 선택
| | return arr |
| | | else: |
| void setup() {
| | pass |
| size(540, 960);
| |
|
| |
| bg = loadImage("Gradient.png");
| |
| sia = loadImage("sia_digitalart_50.png");
| |
| imageGradient = loadImage("image_gradient.png");
| |
| dimpleImage = loadImage("dimple.png");
| |
| eyelidImage = loadImage("doubled_eyelid.png");
| |
| lip = loadImage("lip.png");
| |
|
| |
| Helvetica75 = createFont("Helvetica Bold.ttf", 10);
| |
| Helvetica93 = createFont("Helvetica Extended Black.ttf", 48);
| |
| AppleSDGothicNeoB = createFont("AppleSDGothicNeoB.ttf", 25);
| |
| AppleSDGothicNeoB20 = createFont("AppleSDGothicNeoB.ttf", 20);
| |
|
| |
| image(bg, 0, 0, 540, 960);
| |
| userInterface();
| |
| }
| |
| | |
| void draw() {
| |
|
| |
| if(keyRefreshed) { // 방향키 누르는 효과 지속
| |
| image(bg, 0, 0, 540, 960);
| |
| userInterface();
| |
| keyRefreshed = false;
| |
| }
| |
|
| |
| if(selectRL==1 && selectUD==1) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(127.2, 735.9);
| |
| vertex(120, 730.9);
| |
| vertex(111.5, 730.9);
| |
| vertex(111.5, 740.9);
| |
| vertex(119.9, 740.9);
| |
| endShape(CLOSE);
| |
| }
| |
| else if(selectRL==1 && selectUD==2) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(127.2, 762.2);
| |
| vertex(120, 757.2);
| |
| vertex(111.5, 757.3);
| |
| vertex(111.5, 767.2);
| |
| vertex(119.9, 767.2);
| |
| endShape(CLOSE);
| |
| }
| |
| else if(selectRL==2 && selectUD==1) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(285.4, 735.9);
| |
| vertex(278.2, 730.9);
| |
| vertex(269.8, 730.9);
| |
| vertex(269.8, 740.9);
| |
| vertex(278.2, 740.9);
| |
| endShape(CLOSE);
| |
| }
| |
| else if(selectRL==2 && selectUD==2) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(285.4, 762.2);
| |
| vertex(278.2, 757.2);
| |
| vertex(269.8, 757.2);
| |
| vertex(269.8, 767.2);
| |
| vertex(278.2, 767.2);
| |
| endShape(CLOSE);
| |
| }
| |
| else if(selectRL==3 && selectUD==1) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(443, 735.7);
| |
| vertex(435.8, 730.7);
| |
| vertex(427.3, 730.8);
| |
| vertex(427.3, 740.7);
| |
| vertex(435.8, 740.7);
| |
| endShape(CLOSE);
| |
| }
| |
| else if(selectRL==3 && selectUD==2) {
| |
| fill(#FFFFFF);
| |
| beginShape();
| |
| vertex(443, 762.2);
| |
| vertex(435.8, 757.2);
| |
| vertex(427.3, 757.2);
| |
| vertex(427.3, 767.2);
| |
| vertex(435.8, 767.2);
| |
| endShape(CLOSE);
| |
| }
| |
|
| |
| if(draw_face==true) {
| |
| drawFace();
| |
| }
| |
|
| |
| debug();
| |
| }
| |
| | |
| void mousePressed() {
| |
| if(mouseX>=91 && mouseX<=120 && mouseY>=820 && mouseY<=865) { // UP
| |
| fill(#4188F1);
| |
| beginShape(); // UP (91.7, 820.8 ~ 120.2, 865.5)
| |
| vertex(105.9, 865.5);
| |
| vertex(91.7, 844.8);
| |
| vertex(91.7, 820.8);
| |
| vertex(120.2, 820.8);
| |
| vertex(120.2, 844.8);
| |
| endShape(CLOSE);
| |
| mouseClicked=true;
| |
| }
| |
|
| |
| if(mouseX>91 && mouseX<120 && mouseY>885 && mouseY<930) { // DOWN
| |
| fill(#4188F1);
| |
| beginShape(); // DOWN (91.7, 885.5 ~ 120.2, 930.3)
| |
| vertex(105.7, 885.5);
| |
| vertex(120.1, 906.3);
| |
| vertex(120.2, 930.3);
| |
| vertex(91.7, 930.3);
| |
| vertex(91.7, 906.3);
| |
| endShape(CLOSE);
| |
| mouseClicked=true;
| |
| }
| |
|
| |
| if(mouseX>115 && mouseX<160 && mouseY>861 && mouseY<889) { // RIGHT
| |
| fill(#4188F1);
| |
| beginShape(); // RIGHT (115.9, 861.3 ~ 160.7, 889.8)
| |
| vertex(115.9, 875.5);
| |
| vertex(136.7, 861.3);
| |
| vertex(160.7, 861.3);
| |
| vertex(160.7, 889.7);
| |
| vertex(136.6, 889.7);
| |
| endShape(CLOSE);
| |
| mouseClicked=true;
| |
| }
| |
|
| |
| if(mouseX>51 && mouseX<95 && mouseY>861 && mouseY<889) { // LEFT
| |
| fill(#4188F1);
| |
| beginShape(); // LEFT (51.2, 861.3 ~ 95.9, 889.8)
| |
| vertex(95.9, 875.3); | |
| vertex(75.2, 861.3);
| |
| vertex(51.2, 861.3);
| |
| vertex(51.2, 889.8);
| |
| vertex(75.2, 889.8);
| |
| endShape(CLOSE);
| |
| mouseClicked=true;
| |
| }
| |
|
| |
| if(mouseX>391 && mouseX<496 && mouseY>820 && mouseY<865) { // 선택
| |
| textFont(AppleSDGothicNeoB);
| |
| fill(#4188F1);
| |
| quad(496.3, 820.8, 391.4, 820.8, 391.4, 865.5, 496.3, 865.5);
| |
| fill(#000000);
| |
| text("선택", 423.4, 854.3);
| |
| mouseClicked=true; | |
| }
| |
|
| |
| if(mouseX>391 && mouseX<496 && mouseY>885 && mouseY<930) { // 초기화
| |
| fill(#4188F1); | |
| quad(391.4, 885.5, 496.3, 885.5, 496.3, 930.2, 391.4, 930.2);
| |
| fill(#000000);
| |
| text("초기화", 412, 919);
| |
| mouseClicked=true;
| |
| }
| |
|
| |
| if(mouseX>269 && mouseX<374 && mouseY>820 && mouseY<930) { // 확정
| |
| fill(#4188F1);
| |
| quad(269.4, 820.8, 374.3, 820.8, 374.3, 930.2, 269.4, 930.2);
| |
| fill(#000000);
| |
| text("확정", 301.7, 887);
| |
| mouseClicked=true; | |
| }
| |
| }
| |
| | |
| void mouseReleased() {
| |
| if(mouseClicked) {
| |
| if(mouseX>=91 && mouseX<=120 && mouseY>=820 && mouseY<=865) { // UP
| |
| fill(#FFFFFF);
| |
| beginShape(); // UP (91.7, 820.8 ~ 120.2, 865.5)
| |
| vertex(105.9, 865.5);
| |
| vertex(91.7, 844.8);
| |
| vertex(91.7, 820.8);
| |
| vertex(120.2, 820.8);
| |
| vertex(120.2, 844.8);
| |
| endShape(CLOSE);
| |
| if(selectUD>1) { // 방향키가 아래일 때
| |
| selectUD--; // 위로 올림
| |
| }
| |
| else if(selectUD==1) { // 방향키가 위일 때
| |
| if(selectRL==1) { // 방향키가 왼쪽 위일 때 | |
| selectRL = 3; // 방향키를 맨 오른쪽으로 이동
| |
| selectUD = 2; // 방향키를 맨 아래로 이동
| |
| }
| |
| else if(selectRL>1 && selectRL<=3) { // 방향키가 맨 왼쪽이 아닐 때
| |
| selectRL--; // 방향키를 한 칸 왼쪽으로 이동
| |
| selectUD = 2; // 방향키를 아래로 내림
| |
| }
| |
| }
| |
| draw_face = false;
| |
| }
| |
|
| |
| if(mouseX>91 && mouseX<120 && mouseY>885 && mouseY<930) { // DOWN | |
| fill(#FFFFFF);
| |
| beginShape(); // DOWN (91.7, 885.5 ~ 120.2, 930.3)
| |
| vertex(105.7, 885.5);
| |
| vertex(120.1, 906.3);
| |
| vertex(120.2, 930.3);
| |
| vertex(91.7, 930.3);
| |
| vertex(91.7, 906.3);
| |
| endShape(CLOSE);
| |
| if(selectUD<2) { // 방향키가 위일 때
| |
| selectUD++; // 아래로 내림
| |
| }
| |
| else if(selectUD==2) { // 방향키가 아래일 때
| |
| if(selectRL==3) { // 방향키가 오른쪽 아래일 때
| |
| selectUD = 1; // 방향키를 맨 위로 이동
| |
| selectRL = 1; // 방향키를 맨 왼쪽으로 이동
| |
| }
| |
| else if(selectRL<3 && selectRL>=1) { // 방향키가 맨 오른쪽이 아닐 때 | |
| selectUD = 1; // 방향키를 맨 위로 이동
| |
| selectRL++; // 방향키를 한 칸 오른쪽으로 이동
| |
| }
| |
| }
| |
| draw_face = false;
| |
| }
| |
|
| |
| if(mouseX>115 && mouseX<160 && mouseY>861 && mouseY<889) { // RIGHT
| |
| fill(#FFFFFF);
| |
| beginShape(); // RIGHT (115.9, 861.3 ~ 160.7, 889.8)
| |
| vertex(115.9, 875.5);
| |
| vertex(136.7, 861.3);
| |
| vertex(160.7, 861.3);
| |
| vertex(160.7, 889.7);
| |
| vertex(136.6, 889.7);
| |
| endShape(CLOSE);
| |
| if(selectRL>=1 && selectRL<3) { // 방향키가 맨 오른쪽이 아닐 경우
| |
| selectRL++; // 방향키를 한 칸 오른쪽으로 이동
| |
| }
| |
| else if(selectRL==3) { // 방향키가 맨 오른쪽일 경우
| |
| selectRL = 1; // 방향키를 맨 왼쪽으로 이동
| |
| }
| |
| draw_face = false;
| |
| }
| |
| if(mouseX>51 && mouseX<95 && mouseY>861 && mouseY<889) { // LEFT
| |
| fill(#FFFFFF);
| |
| beginShape(); // LEFT (51.2, 861.3 ~ 95.9, 889.8)
| |
| vertex(95.9, 875.3);
| |
| vertex(75.2, 861.3);
| |
| vertex(51.2, 861.3);
| |
| vertex(51.2, 889.8);
| |
| vertex(75.2, 889.8);
| |
| endShape(CLOSE);
| |
| if(selectRL>1 && selectRL<=3) { // 방향키가 맨 왼쪽이 아닐 경우
| |
| selectRL--; // 방향키를 한 칸 왼쪽으로 이동
| |
| }
| |
| else if(selectRL==1) { // 방향키가 맨 왼쪽일 경우
| |
| selectRL = 3; // 방향키를 맨 오른쪽으로 이동
| |
| }
| |
| }
| |
| draw_face = false;
| |
| }
| |
|
| |
| if(mouseX>391 && mouseX<496 && mouseY>820 && mouseY<865) { // 선택
| |
| textFont(AppleSDGothicNeoB);
| |
| fill(#FFFFFF);
| |
| quad(496.3, 820.8, 391.4, 820.8, 391.4, 865.5, 496.3, 865.5);
| |
| fill(#000000);
| |
| text("선택", 423.4, 854.3);
| |
|
| |
| if(selectRL==1 && selectUD==1) { // 쌍꺼풀 있음
| |
| doubleEyelid = true;
| |
| }
| |
| else if(selectRL==1 && selectUD==2) { // 쌍꺼풀 없음
| |
| doubleEyelid = false;
| |
| }
| |
|
| |
| if(selectRL==2 && selectUD==1) { // 보조개 있음
| |
| dimple = true;
| |
| }
| |
| else if(selectRL==2 && selectUD==2) { // 보조개 없음
| |
| dimple = false;
| |
| }
| |
|
| |
| if(selectRL==3 && selectUD==1) { // 피부색 밝음
| |
| skinColor = #FAD2AC;
| |
| }
| |
| else if(selectRL==3 && selectUD==2) { // 피부색 어두음
| |
| skinColor = #DCA676;
| |
| }
| |
| draw_face = false;
| |
| }
| |
|
| |
| if(mouseX>391 && mouseX<496 && mouseY>885 && mouseY<930) { // 초기화
| |
| fill(#FFFFFF);
| |
| quad(391.4, 885.5, 496.3, 885.5, 496.3, 930.2, 391.4, 930.2);
| |
| fill(#000000);
| |
| text("초기화", 412, 919);
| |
|
| |
| doubleEyelid = false;
| |
| dimple = false;
| |
| skinColor = #FAD2AC;
| |
| selectRL = 1;
| |
| selectUD = 1;
| |
| draw_face = false;
| |
| }
| |
|
| |
| if(mouseX>269 && mouseX<374 && mouseY>820 && mouseY<930) { // 확정
| |
| fill(#FFFFFF);
| |
| quad(269.4, 820.8, 374.3, 820.8, 374.3, 930.2, 269.4, 930.2);
| |
| fill(#000000);
| |
| text("확정", 301.7, 887);
| |
| draw_face = true;
| |
| }
| |
| mouseClicked = false;
| |
| keyRefreshed = true;
| |
| }
| |
| | |
| void keyPressed() {
| |
| if(key=='s') {
| |
| saveFrame("screenshot/result-###.jpg");
| |
| println("Screenshot Saved!");
| |
| }
| |
| }
| |
| | |
| void makeEye() {
| |
| if(doubleEyelid) {
| |
| image(eyelidImage, 0, 0);
| |
| }
| |
|
| |
| fill(#FFFFFF);
| |
| ellipse(270-55, 428, 50, 25);
| |
| ellipse(270+55, 428, 50, 25);
| |
| fill(#000000);
| |
| ellipse(270-55, 428, 25, 25);
| |
| ellipse(270+55, 428, 25, 25);
| |
| }
| |
| | |
| void makeDimple() {
| |
| image(dimpleImage, 0, 0);
| |
| }
| |
| | |
| void drawFace() {
| |
| ellipseMode(CENTER);
| |
| noStroke();
| |
|
| |
| rectMode(CORNER);
| |
| if(skinColor==#FAD2AC) {
| |
| fill(#964B00);
| |
| }
| |
| else {
| |
| fill(#000000);
| |
| }
| |
| rect(141, 403, 257, 260); // HAIR_BACK 141, 403 ~ 398, 403
| |
|
| |
| fill(skinColor);
| |
| rectMode(CENTER);
| |
| rect(270, 600, 60, 200); // NECK
| |
| ellipse(270, 428, 240, 320); // HEAD
| |
|
| |
| if(skinColor==#FAD2AC) {
| |
| fill(#964B00);
| |
| }
| |
| else {
| |
| fill(#000000);
| |
| }
| |
| arc(270, 380, 260, 280, radians(170), radians(370), PIE); // HAIR
| |
|
| |
| fill(#4188F1);
| |
| beginShape();
| |
| vertex(240, 613);
| |
| vertex(230, 613);
| |
| vertex(49, 670);
| |
| vertex(45, 709);
| |
| vertex(494, 709);
| |
| vertex(490, 670);
| |
| vertex(310, 613);
| |
| vertex(300, 613);
| |
| endShape(CLOSE);
| |
|
| |
| fill(skinColor);
| |
| arc(270, 613, 80, 80, radians(0), radians(180), PIE); // NECK_SHIRTS
| |
| makeEye();
| |
| if(dimple) {
| |
| makeDimple();
| |
| }
| |
| image(lip, 0, 0);
| |
| }
| |
| | |
| void userInterface() {
| |
| image(sia, 60, -41);
| |
|
| |
| fill(#FFFFFF);
| |
| textFont(Helvetica93);
| |
| text("DIGITAL ARTS", 48, 81.2);
| |
|
| |
| textFont(AppleSDGothicNeoB);
| |
| text("증명사진 제작", 196.9, 113.2);
| |
|
| |
| image(imageGradient, 0, 0);
| |
| fill(0, 0, 0, 0);
| |
| stroke(#FFFFFF);
| |
| strokeWeight(3);
| |
| quad(43.7, 145.1, 43.7, 710.9, 496.3, 710.9, 496.3, 145.1);
| |
| strokeWeight(0);
| |
|
| |
| fill(#FFFFFF);
| |
| textFont(AppleSDGothicNeoB);
| |
| text("쌍꺼풀", 43.7, 759.5);
| |
| textFont(AppleSDGothicNeoB20);
| |
| text("있음", 131, 745);
| |
| text("없음", 131, 771);
| |
|
| |
| textFont(AppleSDGothicNeoB);
| |
| text("보조개", 203.7, 759.5);
| |
| textFont(AppleSDGothicNeoB20);
| |
| text("있음", 289.3, 745);
| |
| text("없음", 289.3, 771);
| |
|
| |
| textFont(AppleSDGothicNeoB);
| |
| text("피부색", 360.8, 759.5);
| |
| textFont(AppleSDGothicNeoB20);
| |
| text("밝게", 446.7, 744.7);
| |
| text("어둡게", 446.7, 771.1);
| |
|
| |
| beginShape(); // UP (91.7, 820.8 ~ 120.2, 865.5)
| |
| vertex(105.9, 865.5);
| |
| vertex(91.7, 844.8);
| |
| vertex(91.7, 820.8);
| |
| vertex(120.2, 820.8);
| |
| vertex(120.2, 844.8);
| |
| endShape(CLOSE);
| |
|
| |
| beginShape(); // DOWN (91.7, 885.5 ~ 120.2, 930.3)
| |
| vertex(105.7, 885.5);
| |
| vertex(120.1, 906.3);
| |
| vertex(120.2, 930.3);
| |
| vertex(91.7, 930.3);
| |
| vertex(91.7, 906.3);
| |
| endShape(CLOSE);
| |
|
| |
| beginShape(); // RIGHT (115.9, 861.3 ~ 160.7, 889.8)
| |
| vertex(115.9, 875.5);
| |
| vertex(136.7, 861.3);
| |
| vertex(160.7, 861.3);
| |
| vertex(160.7, 889.7);
| |
| vertex(136.6, 889.7);
| |
| endShape(CLOSE);
| |
|
| |
| beginShape(); // LEFT (51.2, 861.3 ~ 95.9, 889.8)
| |
| vertex(95.9, 875.3);
| |
| vertex(75.2, 861.3);
| |
| vertex(51.2, 861.3);
| |
| vertex(51.2, 889.8);
| |
| vertex(75.2, 889.8);
| |
| endShape(CLOSE);
| |
|
| |
| textFont(AppleSDGothicNeoB);
| |
| fill(#FFFFFF);
| |
| quad(496.3, 820.8, 391.4, 820.8, 391.4, 865.5, 496.3, 865.5); // 선택
| |
| fill(#000000);
| |
| text("선택", 423.4, 854.3);
| |
| fill(#FFFFFF);
| |
| quad(391.4, 885.5, 496.3, 885.5, 496.3, 930.2, 391.4, 930.2); // 초기화
| |
| fill(#000000);
| |
| text("초기화", 412, 919);
| |
| fill(#FFFFFF);
| |
| quad(269.4, 820.8, 374.3, 820.8, 374.3, 930.2, 269.4, 930.2); // 확정
| |
| fill(#000000);
| |
| text("확정", 301.7, 887);
| |
| }
| |
| | |
| void debug() {
| |
| if(doubleEyelid) {
| |
| print("Eyelid: double, ");
| |
| }
| |
| else {
| |
| print("Eyelid: Single, ");
| |
| }
| |
|
| |
| if(dimple) {
| |
| print("Dimple: O, ");
| |
| }
| |
| else {
| |
| print("Dimple: X, ");
| |
| }
| |
|
| |
| if(skinColor==#FAD2AC) {
| |
| print("Skin Color: Bright, ");
| |
| }
| |
| else {
| |
| print("Skin Color: Dark, ");
| |
| }
| |
|
| |
| print("Cursor Position X: ");
| |
| print(mouseX);
| |
| print(", Cursor Position Y: ");
| |
| println(mouseY);
| |
| }
| |
| | |
| </syntaxhighlight> | | </syntaxhighlight> |