1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
488
488
EMPFEHLEN
-
Bin dabei, ein 4gewint Applet zu programmieren.
Ich möchte die Bilder mit einer paint Methode auf die Spielfläche zeichnen, nur wie stell ich dass an? Ich komme einfach nicht weiter, habt ihr vielleicht eine Idee?Geändert von javap (14.03.09 um 15:31 Uhr)
-
10.03.09 19:36 #2
Klassen schreibt man groß, aber ich würde das komplett anderst machen:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.util.HashMap; import java.util.Map; public class Viergewinnt extends Applet { private static final long serialVersionUID = 1L; private boolean init = true; private int playerOnRow = 0; private Map<String, Field> fieldMap; private Images images; private Grid grid; private Paint paint; public void init() { new MouseListener(this); this.images = new Images(this); this.grid = new Grid(); this.createFields(); this.paint = new Paint(this); this.init = false; this.repaint(); } private void createFields() { this.fieldMap = new HashMap<String, Field>(); for(int y = 0; y < 6; y++) for(int x = 0; x < 7; x++) this.fieldMap.put(x + "/" + y, new Field()); } public void paint(Graphics g) { if(this.init) return; this.paint.run(this.images, this.fieldMap, g); this.grid.paint(g); } public void mouseClicked(int x) { if(x < 90 || x > 506) return; x-= 90; x = (int)Math.floor(x / 60); int y = 5; for(; y != -1 && this.fieldMap.get(x + "/" + y).getImage() != null; y--); if(y < 0) return; Image image = null; if(this.playerOnRow == 0) image = this.images.getSol(); else if(this.playerOnRow == 1) image = this.images.getLuna(); if(image == null) return; this.fieldMap.get(x + "/" + y).setImage(image); if(this.playerOnRow == 0) this.playerOnRow = 1; else this.playerOnRow = 0; this.repaint(); } } import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; public class Images extends Object { private Image sol; private Image luna; public Images(Viergewinnt viergewinnt) { super(); MediaTracker tracker = new MediaTracker(viergewinnt); this.sol = Toolkit.getDefaultToolkit().getImage("sol.jpg"); this.luna = Toolkit.getDefaultToolkit().getImage("luna.jpg"); tracker.addImage(this.sol, 0); tracker.addImage(this.luna, 1); try { tracker.waitForAll(); } catch(Throwable t) { t.printStackTrace(); } } public Image getSol() { return(this.sol); } public Image getLuna() { return(this.luna); } } import java.awt.Graphics; public class Grid extends Object { public Grid() { super(); } public void paint(Graphics g) { g.drawString("Vier Gewinnt", 260, 18); g.drawRect(85, 85, 420, 420); g.drawLine(85, 155, 505, 155); g.drawLine(85, 225, 505, 225); g.drawLine(85, 295, 505, 295); g.drawLine(85, 365, 505, 365); g.drawLine(85, 435, 505, 435); g.drawLine(85, 505, 505, 505); g.drawLine(145, 85, 145, 505); g.drawLine(205, 85, 205, 505); g.drawLine(265, 85, 265, 505); g.drawLine(325, 85, 325, 505); g.drawLine(385, 85, 385, 505); g.drawLine(445, 85, 445, 505); } } import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class MouseListener extends MouseAdapter { private Viergewinnt viergewinnt; public MouseListener(Viergewinnt viergewinnt) { super(); viergewinnt.addMouseListener(this); this.viergewinnt = viergewinnt; } public void mouseClicked(MouseEvent m) { int x = m.getX(); this.viergewinnt.mouseClicked(x); } } import java.awt.Image; public class Field extends Object { private Image image; public Field() { super(); } public void setImage(Image image) { this.image = image; } public Image getImage() { return(this.image); } } import java.awt.Graphics; import java.awt.Image; import java.util.Map; public class Paint extends Object { private Viergewinnt viergewinnt; public Paint(Viergewinnt viergewinnt) { super(); this.viergewinnt = viergewinnt; } public void run(Images images, Map<String, Field> fieldMap, Graphics g) { for (int y = 0; y < 6; y++) for(int x = 0; x < 7; x++) { Field field = fieldMap.get(x + "/" + y); if(field == null) { System.err.println("Error"); return; } Image image = field.getImage(); if(image != null) g.drawImage(image, x * 60 + 90, y * 70 + 95, this.viergewinnt); } } }
Du musst aber noch überprüfen ob wer gewonnen hat und ein Doppelbuffer könnte auch nicht schaden.
Viel Spaß damit.
-
danke für die schnelle hilfe, aber der Code ist ja ein ganz anderer als der, den ich gepostet habe. Ist mein code völliger schwachsinn?
Kann man dass auch nicht leichter programmieren, so dass auch ein laie versteht, was im quellcode geschieht?
-
11.03.09 22:22 #4
Nein, das nicht.
Aber bei meinen ist einfach nur alles schön auf Klassen aufgeteilt, wärend bei dir alles in einer pickt. Und nach ner Zeit wird das einfach unübersichtlich, deshalb sollte man es gleich verwenden. Als ich mit OOP angefangen habe hatte mein Source (meine Klasse) ein wenig mehr als 3000 Zeilen. Und glaub mir, es ist wesendlich angenehmer OO zu Programmieren, vor allem da es auch extrem einfach ist.
Ich habe ihm dir mal durchkommentiert.
Ich weiß, im Board sieht es immer sehr groß aus, aber lade ihm dir mal in ne IDE wie Eclipse oder was auch immer du bevorzugst, und schau ihm dir an.
In Wirklichkeit ist der nicht besonderst groß.
Hast du dennoch Fragen zu irgend einer Zeile dann frag.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.util.HashMap; import java.util.Map; public class Viergewinnt extends Applet //Erbe von Applet { private static final long serialVersionUID = 1L; //Serialisierungs-Zeugs private boolean init = true; //Wird noch intialisiert private int playerOnRow = 0; //Welcher Spieler ist dran? private Map<String, Field> fieldMap; //Hier werden die Felder gespeichert private Images images; //Das Bilder-Object private Grid grid; //Das Raster-Objekt private Paint paint; //Das Zeichen-Object public void init() //Überschreibt Applet.init(); { new MouseListener(this); //Das MouseListener-Object this.images = new Images(this); //Das Bilder-Object wird intialisiert. this.grid = new Grid();//-""- Raster-Object -""- this.createFields(); //Felder werden erstellt. this.paint = new Paint(this);//Das Paint-Object wird intialisiert. this.init = false; //Intialisierung abgeschlossen this.repaint();//Zeichne neu } private void createFields() //Siehe Viergewinnt.init(); { this.fieldMap = new HashMap<String, Field>(); //Neue HashMap for(int y = 0; y < 6; y++) //Vertikal for(int x = 0; x < 7; x++)//Horzeniontal this.fieldMap.put(x + "/" + y, new Field());//Feld erstellen und in Map schreiben. } public void paint(Graphics g) //Die Zeichenmethode { if(this.init) //Wird noch intialisiert return; //Zeichnen abbrechen this.paint.run(this.images, this.fieldMap, g); //Methode run des Zeichenobjekts aufrufen. this.grid.paint(g); //Methode Paint des Raster-Objects aufrufen. } public void mouseClicked(int x) //Noch so ne Methode { if(x < 90 || x > 506) //Maus ausserhalb des Rasters return; //dann abbrechen x-= 90; //sonst x x = (int)Math.floor(x / 60); //ausrichten. int y = 5;//eine Int mit Wert 5. for(; y != -1 && this.fieldMap.get(x + "/" + y).getImage() != null; y--); //Stein nach unten fallen lassen. if(y < 0) return; Image image = null; //Bilddatei erstellen. if(this.playerOnRow == 0) //Spieler 1 an der Reihe image = this.images.getSol(); //Sonne hohlen else if(this.playerOnRow == 1) //sonst image = this.images.getLuna(); //Mond holen. if(image == null) //Fehlerabfang return; this.fieldMap.get(x + "/" + y).setImage(image); //Stein setzen. if(this.playerOnRow == 0) //Anderer Spieler dran. this.playerOnRow = 1; else this.playerOnRow = 0; this.repaint(); //Neu zeichen. } } import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; public class Images extends Object { private Image sol; //Sonne, private Image luna; //Mond, //und keine Sterne. ._. public Images(Viergewinnt viergewinnt) { super(); MediaTracker tracker = new MediaTracker(viergewinnt); //Ein MediaTracker bitte this.sol = Toolkit.getDefaultToolkit().getImage("sol.jpg"); //Bild laden this.luna = Toolkit.getDefaultToolkit().getImage("luna.jpg"); //Bild laden tracker.addImage(this.sol, 0); //Bild tracker geben tracker.addImage(this.luna, 1); //this² try { tracker.waitForAll(); //Warten bis fertig geladen wurde. } catch(Throwable t) { t.printStackTrace(); } } public Image getSol() //Sonne zurückgeben { return(this.sol); } public Image getLuna() //Mond zurückgeben { return(this.luna); } } import java.awt.Graphics; public class Grid extends Object { public Grid() { super(); //Konstruktor von Object aufrufen. } public void paint(Graphics g) //Zeichnet überschrift und Raster. Nix besonderes. { g.drawString("Vier Gewinnt", 260, 18); g.drawRect(85, 85, 420, 420); g.drawLine(85, 155, 505, 155); g.drawLine(85, 225, 505, 225); g.drawLine(85, 295, 505, 295); g.drawLine(85, 365, 505, 365); g.drawLine(85, 435, 505, 435); g.drawLine(85, 505, 505, 505); g.drawLine(145, 85, 145, 505); g.drawLine(205, 85, 205, 505); g.drawLine(265, 85, 265, 505); g.drawLine(325, 85, 325, 505); g.drawLine(385, 85, 385, 505); g.drawLine(445, 85, 445, 505); } } import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class MouseListener extends MouseAdapter { private Viergewinnt viergewinnt; public MouseListener(Viergewinnt viergewinnt) { super(); viergewinnt.addMouseListener(this); //Viergewinnt den MouseListener geben. this.viergewinnt = viergewinnt; } public void mouseClicked(MouseEvent m) //Taste gedrückt. { int x = m.getX(); //Hohle x-Koordinaten this.viergewinnt.mouseClicked(x); //Und rufe das Teil da auf. } } import java.awt.Graphics; import java.awt.Image; import java.util.Map; public class Paint extends Object { private Viergewinnt viergewinnt; public Paint(Viergewinnt viergewinnt) { super(); this.viergewinnt = viergewinnt; } public void run(Images images, Map<String, Field> fieldMap, Graphics g) //Hier wird gezeichnet { for (int y = 0; y < 6; y++) //Vertikal for(int x = 0; x < 7; x++) //Horenziontal { Field field = fieldMap.get(x + "/" + y); //Hohle das Feld if(field == null) //Fehlerabfang { System.err.println("Error"); return; } Image image = field.getImage(); //Hohle den Spielsteing if(image != null) //Ist einer gesetzt g.drawImage(image, x * 60 + 90, y * 70 + 95, this.viergewinnt); //Zeichne ihm. } } }
-
irgendwie wird fast der gesamte text rot makiert dargestellt. woran liegt dass? An Eclipse? Oder hab ich jetzt was nicht mibekommen

Und ist es wirklich nicht möglich, den Code zu erweitern, den ich zu anfang gepostet habe? Es muss nicht perfekt geschrieben sein, ist vollkommen egal, hauptsache dass Programm wird irgendwie ausgeführt, so dass es funktioniert. Kann man da nicht kurz etwas dahinklatschen, unswar so, dass dabei mäglichst wenig text entsteht?
wäre dir sehr dankbar, wenn du mir da ein bisschen weiterhelfen könntest.Geändert von javap (14.03.09 um 15:32 Uhr)
-
12.03.09 21:25 #6
Doch schon, aber am Ende wirst du dich nichtmehr so gut auskennen.
Eben weil alles der Reihe nach drinnensteht.
Du kannst aber auch die Methode zum berechnen des Feldes (Viergewinnt.mouseClicked(int)) und die zum Zeichnen (Paint.run(Images, Map, Graphics)) anpassen und für deinen Source verwenden.
Ach ja, und die Datei braucht den selben Namen wie die Klasse. (Controll + 1)
-
Ich habe hier jetzt einen neuen code und der funktioniert auch soweit ganz gut, aber wie ermittle ich jetzt den Gewinn bei einer Diagonalen? könntest du mir da weiterhelfen, ich komm einfach nicht auf die lösung.
Und ich wollte noch einen Button per mouselistener einbauen, mit dem man dass momentane Spielfeld leeren kann, also die spielsteine vom Feld löschen.
Außerdem ist noch ein weiterer kleiner fehler im code. Wenn ein Spieler dass Spiel gewinnt, wird dass Spielfeld sofort gelöscht, dass Spielfeld soll aber erst dann nach dem Gewinnen gelöscht werden, wenn der spieler die confirm nachricht bestätigt.
Hoffe du kannst mir weiterhelfen =)
hier der code
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; public class VierGewinnt_dummy extends Applet implements MouseListener { private static final long serialVersionUID = -8566236578954888489L; static int feld[][] = { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 } }; int player = 1; int a = 0; int b = 0; Image rot; Image blau; Image cube; String Spieler1 = JOptionPane .showInputDialog("Spieler1:"); String Spieler2 = JOptionPane .showInputDialog("Spieler 2:"); public void init() { addMouseListener(this); cube = Toolkit.getDefaultToolkit().createImage("cube.gif"); rot = getImage(getCodeBase(), "rot.gif"); blau = getImage(getCodeBase(), "blau.gif"); JOptionPane.showMessageDialog(null, Spieler1 +" beginnt!"); } public boolean gewonnen(String Spieler) { String s = ""; for (int y2 = 0; y2 < 6; y2++) { for (int x1 = 0; x1 < 7; x1++) { s = s + feld[y2][x1]; } } for (int x1 = 0; x1 < 7; x1++) { for (int y2 = 0; y2 < 6; y2++) { s = s + feld[y2][x1]; } } repaint(); if (s.contains(Spieler)) { for (int x1 = 0; x1 < 7; x1++) for (int y1 = 0; y1 < 6; y1++) feld[y1][x1] = 0; repaint(); return true; } return false; } public void drawSpielfeld(Graphics g) { g.drawImage(cube, 0, 0, this); g.setFont(new Font("Comic Sans MS", + Font.BOLD, 20)); g.setColor(Color.white); g.drawLine(0, 50, 0, 350); g.drawLine(50, 50, 50, 350); g.drawLine(100, 50, 100, 350); g.drawLine(150, 50, 150, 350); g.drawLine(200, 50, 200, 350); g.drawLine(250, 50, 250, 350); g.drawLine(300, 50, 300, 350); g.drawLine(350, 50, 350, 350); g.drawLine(0, 50, 350, 50); g.drawLine(0, 100, 350, 100); g.drawLine(0, 150, 350, 150); g.drawLine(0, 200, 350, 200); g.drawLine(0, 250, 350, 250); g.drawLine(0, 300, 350, 300); g.drawLine(0, 350, 350, 350); g.setColor(Color.red); g.drawString("Vier Gewinnt", 225, 20); g.drawRect(0,350,350,390); g.setColor(Color.white); g.fillRect(1, 349, 349, 389); g.setColor(Color.black ); g.drawRect(50, 355, 242, 35); g.setFont(new Font("Comic Sans MS", + Font.BOLD, 20)); g.setColor(Color.black); g.drawString("Spielfeld Leeren", 96, 380); } public void paint(Graphics g) { resize(351, 400); drawSpielfeld(g); for (int x = 0; x < 7; x++) { for (int y = 0; y < 6; y++) { if (feld[y][x] == 1) g.drawImage(rot, 50 * x, 50 * y + 50, this); if (feld[y][x] == 2) g.drawImage(blau, 50 * x, 50 * y + 50, this); } } g.drawString(Spieler1 + ":" + a, 0, 20); g.drawString(Spieler2 + ":" + b, 0, 45); if (player == 1) { g.drawRect(230,22,118,22); g.setColor(Color.red); g.fillRect(231, 23, 117, 21);} if (player == 2) { g.drawRect(230,22,118,22); g.setColor(Color.blue); g.fillRect(231, 23, 117, 21); } } public void mouseClicked(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { int x = arg0.getX(); if (player == 1) { int feldvoll = 5; if (x < 50) { for (feldvoll = 5; feld[feldvoll][0] != 0; feldvoll--) { } feld[feldvoll][0] = 1; } if (x > 50 && x < 100) { for (feldvoll = 5; feld[feldvoll][1] != 0; feldvoll--) { } feld[feldvoll][1] = 1; } if (x > 100 && x < 150) { for (feldvoll = 5; feld[feldvoll][2] != 0; feldvoll--) { } feld[feldvoll][2] = 1; } if (x > 150 && x < 200) { for (feldvoll = 5; feld[feldvoll][3] != 0; feldvoll--) { } feld[feldvoll][3] = 1; } if (x > 200 && x < 250) { for (feldvoll = 5; feld[feldvoll][4] != 0; feldvoll--) { } feld[feldvoll][4] = 1; } if (x > 250 && x < 300) { for (feldvoll = 5; feld[feldvoll][5] != 0; feldvoll--) { } feld[feldvoll][5] = 1; } if (x > 300 && x < 350) { for (feldvoll = 5; feld[feldvoll][6] != 0; feldvoll--) { } feld[feldvoll][6] = 1; } player = 2; } else if (player == 2) { int feldvoll = 5; if (x < 50) { for (feldvoll = 5; feld[feldvoll][0] != 0; feldvoll--) { } feld[feldvoll][0] = 2; } if (x > 50 && x < 100) { for (feldvoll = 5; feld[feldvoll][1] != 0; feldvoll--) { } feld[feldvoll][1] = 2; } if (x > 100 && x < 150) { for (feldvoll = 5; feld[feldvoll][2] != 0; feldvoll--) { } feld[feldvoll][2] = 2; } if (x > 150 && x < 200) { for (feldvoll = 5; feld[feldvoll][3] != 0; feldvoll--) { } feld[feldvoll][3] = 2; } if (x > 200 && x < 250) { for (feldvoll = 5; feld[feldvoll][4] != 0; feldvoll--) { } feld[feldvoll][4] = 2; } if (x > 250 && x < 300) { for (feldvoll = 5; feld[feldvoll][5] != 0; feldvoll--) { } feld[feldvoll][5] = 2; } if (x > 300 && x < 350) { for (feldvoll = 5; feld[feldvoll][6] != 0; feldvoll--) { } feld[feldvoll][6] = 2; } player = 1; } if (gewonnen("1111")) { a = a + 1; JOptionPane.showMessageDialog(null, Spieler1 + " hat gewonnen!"); JOptionPane.showMessageDialog(null, Spieler2 + " ist dran!"); } if (gewonnen("2222")) { b = b + 1; JOptionPane.showMessageDialog(null, Spieler2 + " hat gewonnen!"); JOptionPane.showMessageDialog(null, Spieler1 + " ist dran!"); } } public void mouseReleased(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } }Geändert von javap (14.03.09 um 16:41 Uhr)
Ähnliche Themen
-
J2ME brauche Hilfe beim einbinden eines Midlets
Von Frechdachs34 im Forum JavaAntworten: 0Letzter Beitrag: 19.11.10, 15:56 -
Brauche Hilfe beim erstellen eines css Layouts
Von janosch im Forum CSSAntworten: 2Letzter Beitrag: 25.07.06, 19:08 -
Brauche Hilfe beim erstellen eines Buntglas Materials.
Von Glomby im Forum Cinema 4DAntworten: 7Letzter Beitrag: 06.10.05, 15:01 -
HILFE Ich brauche ein wenig hilfe beim erstellen eines pobligen nickpage script
Von Buffy-Fan im Forum PHPAntworten: 8Letzter Beitrag: 14.06.04, 10:37 -
Brauche Hilfe beim programmieren
Von aniram im Forum C/C++Antworten: 4Letzter Beitrag: 05.05.04, 18:57





Zitieren
Login





