You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Saturday, October 23rd 2010, 8:29pm

Bluej Sum Häuser Farben ändern

Hallo :)

Im Informatik-Unterricht in der Schule haben wir mehrere Aufgaben aufbekommen.
Wir lernen Java mit der Stift und Mäuse Bibiliothek.
Komme damit jedoch nicht zurecht. Ich denke ich werde euch da noch öfters mit ärgern. :D

Okay jetzt zu meiner Frage :
Wir sollen 3 Häuser zeichnen und diese sollen per Tastendruck die Zeichenfarbe ändern. Jedoch tun sie es bei mir nicht. Es wird jedoch auch kein Fehler angezeigt..
Wäre lieb, wenn ihr mal drüber schauen könntet.
Danke !
LG

Source 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
import sum.kern.*;

public class Haus4
{
  /* Objekte */
   Bildschirm mB;
   Buntstift s;
   Maus m;
   Tastatur t;

public void fuehreAus ()
{ 
 
/* Konstruktor */
  mB=new Bildschirm (350, 400);
  s=new Buntstift ();
  m=new Maus ();
  t=new Tastatur ();
  
 
       if (t.wurdeGedrueckt ())
     {
        switch (t.zeichen ())
            {
                case 'r': case 'R': s.setzeFarbe(Farbe.ROT); break;
                case 'b': case 'B': s.setzeFarbe(Farbe.BLAU); break;
                case 'g': case 'G': s.setzeFarbe(Farbe.GRUEN); break;
                default: s.setzeFarbe(Farbe.SCHWARZ); break;
         
            }
            t.weiter ();
      }    
  
 /* Aktion */
   
  //Haus1
    //Hausgrundriss
    s.bewegeBis (1, 150); 
    s.zeichneRechteck (100, 100);
    //Dach
    s.bewegeBis (1,150);
    s.runter ();
    s.dreheBis (45);
    s.bewegeUm (70);
    s.dreheBis (-45);
    s.bewegeUm (70);
    //Fenster 1
    s.hoch ();
    s.bewegeBis (11, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster2
    s.hoch ();
    s.bewegeBis (41, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster3
    s.hoch ();
    s.bewegeBis (71, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster4
    s.hoch ();
    s.bewegeBis (11, 200);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Tür
    s.hoch ();
    s.bewegeBis (41, 200);
    s.runter ();
    s.zeichneRechteck (20, 50);
    //Fenster5
    s.hoch ();
    s.bewegeBis (71, 200);
    s.zeichneRechteck (20, 20);

  //Haus2
    //Hausgrundriss
    s.bewegeBis (110, 150); 
    s.zeichneRechteck (100, 100);
    //Dach
    s.bewegeBis (110,150);
    s.runter ();
    s.dreheBis (45);
    s.bewegeUm (70);
    s.dreheBis (-45);
    s.bewegeUm (70);
    //Fenster 1
    s.hoch ();
    s.bewegeBis (121, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster2
    s.hoch ();
    s.bewegeBis (151, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster3
    s.hoch ();
    s.bewegeBis (181, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster4
    s.hoch ();
    s.bewegeBis (121, 200);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Tür
    s.hoch ();
    s.bewegeBis (151, 200);
    s.runter ();
    s.zeichneRechteck (20, 50);
    //Fenster5
    s.hoch ();
    s.bewegeBis (181, 200);
    s.zeichneRechteck (20, 20); 
 
  //Haus3
    //Hausgrundriss
    s.bewegeBis (220, 150); 
    s.zeichneRechteck (100, 100);
    //Dach
    s.bewegeBis (220,150);
    s.runter ();
    s.dreheBis (45);
    s.bewegeUm (70);
    s.dreheBis (-45);
    s.bewegeUm (70);
    //Fenster 1
    s.hoch ();
    s.bewegeBis (231, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster2
    s.hoch ();
    s.bewegeBis (261, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster3
    s.hoch ();
    s.bewegeBis (291, 160);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Fenster4
    s.hoch ();
    s.bewegeBis (231, 200);
    s.runter ();
    s.zeichneRechteck (20, 20);
    //Tür
    s.hoch ();
    s.bewegeBis (261, 200);
    s.runter ();
    s.zeichneRechteck (20, 50);
    //Fenster5
    s.hoch ();
    s.bewegeBis (291, 200);
    s.zeichneRechteck (20, 20); 
    
  //Bezeichnung
    s.hoch ();
    s.bewegeBis (2, 399);
    s.runter ();
    s.schreibeText ("Haus2");   
  
    
    

    
    
    
    
 /* Abbau */
  s.gibFrei ();
  mB.gibFrei ();
  m.gibFrei ();

}
}

2

Sunday, October 24th 2010, 5:06pm

Hi, ich bin auch neu hier und nicht so gut, hoffe aber helfen zu können. Bei den Lösungsmöglichkeiten weiß ich leider net ob sie so wirklich laufen, ist aber die beste Lösung die mir einfällt, musst du dann ausprobieren.
Allerdings, wenn ich den code ausführe, werden sofort die Häuser gemalt ((in schwarz)ohne auf eine eingabe zu warten). Da kannst du vielleicht wenn du auf eine eingabe wartest was ändern (wie genau kann ich dir leider net sagen).
Dazu ist die Methode, nachdem du "Haus2" geschrieben hast beendet, also wird in deinem code, sobald du anfängst die häuser zu zeichnen nicht mehr auf eine eingabe geachtet (und danach eben auch nicht).
Das die Häuser nachdem Zeichnen nicht mehr die Farbe ändern könntest du lösen, indem du am ende eine Schleife einfügst, die checkt ob eine eingabe gemacht wurde, die Häuser löscht und in der Farbe neu zeichnet.
Z.B:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 2;i > 1;)
   {
       if (/*Taste gedrückt*/)
       {
           // lösche Häuser
           /*Zeichne Häuser in der Farbe neu*/
        }
      else
      [
       // bisschen warten
       ]
    }

Die Schleife hier läuft theoretisch endlos. Ich weiß allerdings nicht genau, wie man den tastendruck registriert. und verwendet.

und noch ein kleiner Tipp am Rande:
Du kannst, statt den code für das Haus 3 mal zu schreiben, ihn in eine Methode schreiben und dann die Methode 3mal aufrufen. Das macht den code übersichtlicher und es wird einfacher fehler usw. zu finden.
Also praktisch:

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
public void zeichneHaus()
{
//Quellkot für das Haus
}
public void fuehreAus()
{
//stift bewegen
zeichneHaus();
//stift bewegen
zeichneHaus();
//stift bewegen
zeichneHaus();
}

Allerdings solltest du dann aufpassen und den code so ändern, dass du immer um einen bestimmten Betrag bewegst, oder in der Methode den Punkt berechnen. Und dann dahin bewegen.
Mfg Zwergling

This post has been edited 1 times, last edit by "Zwergling" (Oct 24th 2010, 5:29pm)


3

Sunday, October 24th 2010, 7:06pm

Hallo,

hab den Fehler gefunden. Hatte das Do/while vergessen.

Trotzdem danke für deine Antwort Zwerg.
Zum Tipp. Ja ich könnte, aber das ist mir gerade zu viel Arbeit und da wir die Häuser ganz am Anfang schon einmal gebraucht hatten, dachte ich mir kopierste die einfach. ;)

LG

Similar threads

Social bookmarks