package de.unirostock.Bridge.Schlange.webapplet; import java.awt.Graphics; import java.awt.Label; import de.unirostock.Bridge.Schlange.*; public class PaintRingspeicherSchlange extends AbstrPaintSchlange{ static PaintRingspeicherSchlange defaultInstance = null; static Label appLabel; static KonkrSchlange schlange; public static PaintRingspeicherSchlange getDefault(Label l, KonkrSchlange s) { if (defaultInstance == null) { defaultInstance = new PaintRingspeicherSchlange(); } appLabel = l; schlange = s; return defaultInstance; } public void paintSchlange(Graphics g, int abstand){ appLabel.setText("Schlange als Ringspeicher: " + schlange.getAnzahl() + " Elemente"); char c; char[] elemente = schlange.getSchlangeImplementierer().getAsArray(); //g.drawOval(x, y, Durchmesser x, Durchmesser y);Rechteckumrandung g.drawOval(430, 160, 30, 30); g.drawOval(400, 130, 90, 90); // g.drawLine(445,130,445,160); g.drawLine(445,190,445,220); // g.drawLine(458,168,482,150); g.drawLine(458,182,482,200); // g.drawLine(432,182,407,200); g.drawLine(432,168,407,150); char kopf = elemente[0]; paintArrows(g, kopf, schlange.getAnzahl()); for (int i=1; i<=schlange.getAnzahl(); i++) { c = elemente[i]; switch (kopf) { case '0':g.drawString(String.valueOf(c), 455,153);kopf='1';break; case '1':g.drawString(String.valueOf(c), 470,180);kopf='2';break; case '2':g.drawString(String.valueOf(c), 455,208);kopf='3';break; case '3':g.drawString(String.valueOf(c), 430,208);kopf='4';break; case '4':g.drawString(String.valueOf(c), 415,180);kopf='5';break; case '5':g.drawString(String.valueOf(c), 430,153);kopf='0';break; } } } private void paintArrows(Graphics g, char kopf, int anzahl) { if (anzahl < 2) {//begin und ende sind gleich, nur ein Pfeil switch (kopf) { case '0':paintArrow(g, 0, "begin,", "ende");break; case '1':paintArrow(g, 1, "begin,", "ende");break; case '2':paintArrow(g, 2, "begin,", "ende");break; case '3':paintArrow(g, 3, "begin,", "ende");break; case '4':paintArrow(g, 4, "begin,", "ende");break; case '5':paintArrow(g, 5, "begin,", "ende");break; } } else {// begin und ende sind unterscheidlich, 2 Pfeile switch (kopf) { case '0': paintArrow(g, 0, "begin", null); paintArrow(g, (anzahl-1)%6,"ende", null);break; case '1': paintArrow(g, 1, "begin", null); paintArrow(g, (1+anzahl-1)%6,"ende", null);break; case '2': paintArrow(g, 2, "begin", null); paintArrow(g, (2+anzahl-1)%6,"ende", null);break; case '3': paintArrow(g, 3, "begin", null); paintArrow(g, (3+anzahl-1)%6,"ende", null);break; case '4': paintArrow(g, 4, "begin", null); paintArrow(g, (4+anzahl-1)%6,"ende", null);break; case '5': paintArrow(g, 5, "begin", null); paintArrow(g, (5+anzahl-1)%6,"ende", null);break; } } } private void paintArrow(Graphics g, int feld, String beschriftung1, String beschriftung2){ switch (feld) { case 0 : g.drawLine(470, 130, 476, 122); g.drawLine(470, 130, 470, 124); g.drawLine(470, 130, 476, 128); if (beschriftung2 == null){ g.drawString(beschriftung1, 480, 120); } else { g.drawString(beschriftung1, 475, 115); g.drawString(beschriftung2, 485, 130); } break; case 1: g.drawLine(495, 175, 505, 175); g.drawLine(495, 175, 500, 172); g.drawLine(495, 175, 500, 178); if (beschriftung2 == null){ g.drawString(beschriftung1, 510, 180); } else { g.drawString(beschriftung1, 510, 173); g.drawString(beschriftung2, 510, 187); } break; case 2: g.drawLine(470, 220, 476, 228); g.drawLine(470, 220, 476, 222); g.drawLine(470, 220, 470, 226); if (beschriftung2 == null){ g.drawString(beschriftung1, 465, 243); } else { g.drawString(beschriftung1, 482, 230); g.drawString(beschriftung2, 482, 244); } break; case 3: g.drawLine(420, 220, 414, 228); g.drawLine(420, 220, 420, 226); g.drawLine(420, 220, 414, 222); if (beschriftung2 == null){ g.drawString(beschriftung1, 395, 243); } else { g.drawString(beschriftung1, 375, 230); g.drawString(beschriftung2, 375, 244); } break; case 4: g.drawLine(395, 175, 385, 175); g.drawLine(395, 175, 390, 172); g.drawLine(395, 175, 390, 178); if (beschriftung2 == null){ g.drawString(beschriftung1, 345, 180); } else { g.drawString(beschriftung1, 345, 173); g.drawString(beschriftung2, 345, 187); } break; case 5: g.drawLine(420, 130, 414, 122); g.drawLine(420, 130, 420, 124); g.drawLine(420, 130, 414, 128); if (beschriftung2 == null){ g.drawString(beschriftung1, 375, 120); } else { g.drawString(beschriftung1, 375, 115); g.drawString(beschriftung2, 375, 130); } break; } } public void paintRemoveAnimation(Graphics g, char c){ int x= 572; int y= 145;//115 for (int i = 1; i<11; i++){ g.clearRect(295,70,705,179); WebApp.drawPapierkorb(g); paintSchlange(g, 50-i*5); if (i<8){ paintElem(g, c, x+i*19, y-i*8); } else if (i==10){ paintElem(g, c, 743, 140);//110 } else { paintElem(g, c, x+i*19, y-(10-i)*30); } WebApp.verzoegern(); } } public void paintInsertAnimation(Graphics g, char c){ for (int i = 0; i<10; i++){ g.clearRect(175,70,165,100); paintElem(g, c, 210 + (340 - 210)/10*i, 145); WebApp.verzoegern(); } } public void paintElem(Graphics g, char c, int x, int y) { g.drawString(String.valueOf(c), x+8,y+15); g.drawLine(x, y, x+24, y);//oben waagerecht g.drawLine(x, y+23, x+24, y+23);// unten waagerecht g.drawLine(x, y, x, y+23);//linke Seite g.drawLine(x+24, y, x+24, y+23);//rechte Seite } }