ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: mehrere probleme bei fxruby
BeitragVerfasst: 14 Jul 2009, 15:32 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
hi,
bin gerade dabei mir ruby anzueignen und hab mir dazu unter rubykids.de nen einsteigertutoriel und das danach selbsständig erweitert.
jetz hab ich folgende probleme...

1. ich habe versucht über die variable "$fahrzeug" und den button "switch vehicle" die farbe des fahrrades zu ändern, weiß aber nich genau, wie ich das umsetzen kann
2. bei bewegen des fahrrads flimmert mein bildschirm und ich weiß nich, wie ich das bessern hinbekommen kann...

danke für hilfe aller art...

hier also mein quellcode:



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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
require 'fox16'
require 'fox16/colors'

include Fox

def initialize()
$fahrzeug = 1
end

class LKW

#fahrrad malen
def initialize(col_background = FXColor::Green)
@col_background = col_background
if $fahrzeug == 1
@col_Rahmen = FXColor::Green
else
@col_Rahmen = FXColor::Red
end
@col_reifen = FXColor::Black
@col_felgen = FXColor::White

end

def draw(dc, pos = FXPoint.new(0,0))
return if dc.nil?

dc.foreground = @col_background
dc.fillCircle(pos.x+12, pos.y+20, 5)
dc.fillCircle(pos.x+32, pos.y+20, 5)

dc.foreground = @col_reifen
dc.fillCircle(pos.x+12, pos.y+20, 4)
dc.fillCircle(pos.x+32, pos.y+20, 4)

dc.foreground = @col_felgen
dc.fillCircle(pos.x+12, pos.y+20, 2)
dc.fillCircle(pos.x+32, pos.y+20, 2)

dc.foreground = @col_Rahmen
dc.drawLine(pos.x+11, pos.y+13, pos.x+32, pos.y+13)
dc.drawLine(pos.x+11, pos.y+13, pos.x+19, pos.y+19)
dc.drawLine(pos.x+19, pos.y+19, pos.x+32, pos.y+13)
dc.drawLine(pos.x+11, pos.y+13, pos.x+5, pos.y+19)
dc.drawLine(pos.x+19, pos.y+19, pos.x+5, pos.y+19)
dc.drawLine(pos.x+32, pos.y+8, pos.x+32, pos.y+19)
dc.drawLine(pos.x+28, pos.y+8, pos.x+32, pos.y+8)

end
end

class RubykidsMainWindow < FXMainWindow
KEY_ARROW_LEFT = 65361
KEY_ARROW_UP = 65362
KEY_ARROW_RIGHT = 65363
KEY_ARROW_DOWN = 65364

def initialize(app)
super(app, "Driver 5", : opts => DECOR_ALL, :width => 1700, :height => 990)

@hauptFrame = FXHorizontalFrame.new(
self,
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
:padLeft => 0,
:padRight => 0,
:padTop => 0,
:padBottom => 0
)

@leinwandFrame = FXVerticalFrame.new(
@hauptFrame,
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y,
:padLeft => 20,
:padRight => 20,
:padTop => 250,
:padBottom => 240
)

FXLabel.new(
@leinwandFrame,
"Bobs Town",
: opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X
)

FXHorizontalSeparator.new(
@leinwandFrame,
SEPARATOR_GROOVE|LAYOUT_FILL_X
)



@leinwand = FXCanvas.new(
@leinwandFrame,
: opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT


)

FXHorizontalSeparator.new(
@leinwandFrame,
SEPARATOR_GROOVE|LAYOUT_FILL_X
)

@leinwand.connect(SEL_PAINT, method(:onLeinwandRepaint))
@leinwand.connect(SEL_KEYPRESS, method(:onKeyPressed))

@menuFrame = FXVerticalFrame.new(
@hauptFrame,
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_Y,
:padLeft => 20,
:padRight => 20,
:padTop => 250,
:padBottom => 250
)

FXLabel.new(
@menuFrame,
"Men����",
: opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X
)

FXHorizontalSeparator.new(
@menuFrame,
SEPARATOR_GROOVE|LAYOUT_FILL_X
)

FXButton.new(
@menuFrame,
"quit",
nil,
getApp(),
FXApp::ID_QUIT,
: opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
:padLeft => 10,
:padRight => 10,
:padTop => 5,
:padBottom => 5
)

FXButton.new(
@menuFrame,
"switch vehicle",
nil,
nil,
if $fahrzeug == 1
$fahrzeug = 2
else
$fahrzeug = 1
end,
: opts => FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_TOP|LAYOUT_LEFT,
:padLeft => 10,
:padRight => 10,
:padTop => 5,
:padBottom => 5
)

@current_pos = FXPoint.new(30, 135)
@move_distance = FXPoint.new(8, 8 )
@col_background = FXRGB(255, 255, 255)
@lkw = LKW.new(@col_background)

end

#zeichnungen
def onLeinwandRepaint(sender, sel, event)
FXDCWindow.new(@leinwand, event) do |dc|
dc.foreground = FXColor::LimeGreen
dc.fillRectangle(0, 0, @leinwand.width, @leinwand.height)

#h��user oben
x=10
y=35
while x < 1600 do
dc.foreground = FXColor::SlateGray
dc.fillRectangle(x, 30, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 45, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 80, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 40, y, 0)
dc.drawLine(x+55, 40, y, 0)
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x-20, 95, 5, 15)
dc.fillRectangle(x-10, 95, 5, 15)
dc.fillRectangle(x-25, 90, 25, 5)
x = x+75
y= y+75
end
#h��user mitte links
x=15
y=40
while x< 250 do
dc.foreground = FXColor::LightYellow
dc.fillRectangle(x,200, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 215, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 250, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 210, y, 170)
dc.drawLine(x+55, 210, y, 170)
dc.foreground = FXColor::Red
dc.fillRectangle(y-45, 265, 5, 15)
dc.fillRectangle(y-35, 265, 5, 15)
dc.fillRectangle(y-50, 260, 25, 5)
x= x+75
y= y+75
end
#h��user mitte mitte
x=365
y=390
while x<1300 do
dc.foreground = FXColor::SlateGray
dc.fillRectangle(x,200, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 215, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 250, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 210, y, 170)
dc.drawLine(x+55, 210, y, 170)
dc.foreground = FXColor::White
dc.fillRectangle(y+30, 265, 5, 15)
dc.fillRectangle(y+40, 265, 5, 15)
dc.fillRectangle(y+25, 260, 25, 5)
x= x+75
y= y+75
end
#h��user unten rechts
x=1390
y=1415
while x<1800 do
dc.foreground = FXColor::LightYellow
dc.fillRectangle(x,330, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 345, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 380, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 340, y, 300)
dc.drawLine(x+55, 340, y, 300)
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(y+30, 395, 5, 15)
dc.fillRectangle(y+40, 395, 5, 15)
dc.fillRectangle(y+25, 390, 25, 5)
x= x+75
y= y+75
end
#strasse quer oben
dc.foreground = FXColor::Black
dc.fillRectangle(0, 120, 1700, 40)
x=5
dc.foreground = FXColor::White
while x < 1700 do
dc.fillRectangle(x, 138, 10, 4)
x= x+20
end
#strasse quer mitte
dc.foreground = FXColor::Black
dc.fillRectangle(0, 290, 1350, 40)
x=5
dc.foreground = FXColor::White
while x < 1350 do
dc.fillRectangle(x, 308, 10, 4)
x= x+20
end
#strasse quer unten
dc.foreground = FXColor::Black
dc.fillRectangle(1325, 430, 500, 40)
x=1345
dc.foreground = FXColor::White
while x < 1600 do
dc.fillRectangle(x, 448, 10, 4)
x= x+20
end
#strasse senkrecht links
dc.foreground = FXColor::Black
dc.fillRectangle(300, 160, 45, 140)
x=160
dc.foreground = FXColor::White
while x < 300 do
dc.fillRectangle(320, x, 4, 10)
x= x+20
end
#strasse senkrecht rechts
dc.foreground = FXColor::Black
dc.fillRectangle(1325, 160, 45, 285)
x=160
dc.foreground = FXColor::White
while x < 460 do
dc.fillRectangle(1345, x, 4, 10)
x= x+20
end
#b��ume mitte rechts
x=1410
while x < 1800 do
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x, 245, 20, 40)
dc.foreground = FXColor::DarkGreen
dc.fillCircle(x+10, 210, 45)
x = x+75
end
#b��ume unten links
x=10
while x < 1300 do
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x, 425, 20, 40)
dc.foreground = FXColor::DarkGreen
dc.fillCircle(x+10, 390, 45)
x = x+75
end


pos = FXPoint.new(@current_pos.x, @current_pos.y)
[
[0, 0],
[@leinwand.width, 0],
[0, @leinwand.height],
[@leinwand.width, @leinwand.height]
].each do |off|
pos.x = @current_pos.x - off[0]
pos.y = @current_pos.y - off[1]
@lkw.draw(dc, pos)
end
end
end

def onKeyPressed(sender, sel, event)
if event.code == KEY_ARROW_LEFT
if @current_pos.y > 270 && @current_pos.x < 7
elsif @current_pos.y > 135 && @current_pos.y < 270
if @current_pos.x < 300
elsif @current_pos.x > 345 && @current_pos.x < 1320
else
self.move_backward
end
elsif @current_pos.y > 310 && @current_pos.x < 1320
else
self.move_backward
end
elsif event.code == KEY_ARROW_RIGHT
if @current_pos.y > 135 && @current_pos.y < 270
if @current_pos.x < 305
self.move_forward
elsif @current_pos.x > 1315 && @current_pos.x < 1330
self.move_forward
end
elsif @current_pos.y > 270 && @current_pos.y < 415 && @current_pos.x > 1330
elsif @current_pos.y > 270 && @current_pos.x > 1510
else
self.move_forward
end
elsif event.code == KEY_ARROW_UP
if @current_pos.y < 105
elsif @current_pos.y < 275 && @current_pos.y > 135
if @current_pos.x < 290
elsif @current_pos.x > 315
if @current_pos.x < 1315
elsif @current_pos.x > 1340
else
self.move_up
end
else
self.move_up
end
else
self.move_up
end
elsif event.code == KEY_ARROW_DOWN
if @current_pos.y > 300 && @current_pos.x < 1315
elsif @current_pos.y > 439
elsif @current_pos.y > 130 && @current_pos.y < 270
if @current_pos.x < 290
elsif @current_pos.x > 315
if @current_pos.x < 1315
elsif @current_pos.x > 1340
else
self.move_down
end
else
self.move_down
end
else
self.move_down
end
end
@leinwand.update
end

def move_forward
@current_pos.x = (@current_pos.x + @move_distance.x) % @leinwand.width
@current_pos.y = (@current_pos.y ) % @leinwand.height
end

def move_backward
@current_pos.x = (@current_pos.x - @move_distance.x) % @leinwand.width
@current_pos.y = (@current_pos.y ) % @leinwand.height
end

def move_up
@current_pos.x = (@current_pos.x ) % @leinwand.width
@current_pos.y = (@current_pos.y - @move_distance.y) % @leinwand.height
end

def move_down
@current_pos.x = (@current_pos.x ) % @leinwand.width
@current_pos.y = (@current_pos.y + @move_distance.y) % @leinwand.height
end

def create
super
show(PLACEMENT_SCREEN)
end
end

application = FXApp.new
mainWin = RubykidsMainWindow.new(application)
application.create
application.run


Mod-Edit: Farbanpassung und Schriftgrösse durch Code-tag ersetzt


Zuletzt geändert von bob_sheknowdas am 15 Jul 2009, 09:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 07:58 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
wo wir schonma dabei sind hätt ich noch die frage wie ich dateien (bilder/musik/videos) mit einbinden kann?

danke


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 08:05 
Offline
Lehrling
Benutzeravatar

Registriert: 22 Jun 2009, 13:55
Beiträge: 82
Wohnort: Ostthüringen
Hi,
willkommen im Forum.
Nun zu deinem Problem. Es ist eig ganz einfach zu lösen, wenn man sich schon etwas mehr mit Ruby beschäftigt hat. Grundidee ist folgendes: Dein Fahrrad (oder LKW) ist ein Objekt. Ein Objekt hat verschiedene Methoden, zum Bsp fahren (draw), und verschiedene Attribute, zum Beispiel die Farben.
Du möchtest nun die Farbe ändern, dazu ist ein globale Variable nicht notwendig, kann also rausfliegen ;-). Du musst deinem Objekt(der Klasse) LKW nur klarmachen, dass es ein von außen beeinflussbares Attribut haben soll, dazu gibts folgende Möglichkeit


1
2
3
4
5
6
7
8
9
10
11
12
13
14
class LKW
# attr_reader :abc # erlaubt das lesen
# attr_writer :xyz # erlaubt das schreiben
attr_accessor :col_Rahmen # erlaubt beides

#fahrrad initialisieren
def initialize(col_background = FXColor::Green)
@col_background = col_background
@col_Rahmen = FXColor::Green
@col_reifen = FXColor::Black
@col_felgen = FXColor::White
end
#...
end

So also standardmäßig ist es grün bietet aber dank des 'attr_accessor' die Möglichkeit die Später über 'instanz.col_Rahmen = xyz' zu ändern.

Nun musst du das nur noch in den Button integrieren. Ich hab das zum Bsp so gemacht:


1
2
3
4
5
FXButton.new(
@menuFrame,
"switch vehicle",
# ....
).connect(SEL_COMMAND){ @lkw.col_Rahmen = FXRGB(rand(255), rand(255), rand(255)) }

Connect hast du ja schon im Code verwendet solltest du dann ja kennen. Farbe wird wie gesagt zugewiesen, in meinem Fall ein Zufallswert. Ein paar Anmerkungen noch zum Schluss:
1. bei deinen :opts ist ein Leerzeichen zwischen : und opts. Weiß nicht ob das Absicht war, aber das gehört eig zusammen ;-)
2. Das Fahrrad ändert die Farbe nicht auf klick, sondern erst wenn man danach noch mal "fährt" hängt mit dem Nachzeichnen zusammen. Könnte man aber noch veranlassen ;-)
3. Schau dir deinen Code nochmal in Ruhe komplett an. Da lässt sich noch einiges "optimieren" also kürzer Schreiben und zusammenfassen. (zBsp in onLeinwandRepaint)

Hier noch ein Link zu einem sehr guten, wenn auch nicht mehr ganz aktuellen Rubybuch: [url src=http://home.vrweb.de/~juergen.katins/ruby/buch/index.html]Programming Ruby[/url] Da kann man allerhand nachschlagen und das ist das mit den 'attr_xyz' noch weiterführend erklärt.

Viel Spaß beim weiterlernen,
Kjarrigan

EDIT: Also welche Elemente FX kennt alles dazugehörige findet man in der --> [url src=http://www.fxruby.org/doc/api/]API[/url] <-- Sollte auch gleich dein Standardnachschlagewerk in Sachen FX werden ;) Da steht eig fast alles drin.
Mit Sound und Videos hab ich mich noch nicht beschäftigt. Zumindest Videos solltest du als Anfänger noch nicht anpeilen. Versuch erstmal die Grundelemente zu verstehen und anzuwenden.

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook, The Wizardry Compiled


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 08:25 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
danke, wed ma sehen ob ichs hinbekomme :)

was deine zusatzbemerkungen angeht
1. bei den opts entstehen solche :o wenn man kein leerzeichen zwischen : und o lässt (siehe dein text)
2. das war mir klar, stört aber nich wirklich - bin schon froh wenn ichs überhaupt hinbekomme
3. das is mir auch schon aufgefallen und da arbeite ich dran (hab schon gut 1/4 rauskürzen könn)

hast du auch lösungsvorschläge zu den anderen fragen?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 10:22 
Offline
ri
Benutzeravatar

Registriert: 08 Apr 2006, 17:03
Beiträge: 788
Wohnort: Berlin
übrigens:

Wenn ich dein Programm (mit Ruby 1.9) starte, bekomme ich diese Meldungen:

g.rb:7: warning: redefining Object#initialize may cause infinite loop
g.rb:146: warning: global variable `$fahrzeug' not initialized

deine Definition des initialize am Anfang des Programms ist glaube ich nicht das, was du dir vorstellst, wie es funktionieren soll.
Wenn du unbedingt eine globale Variable haben willst, dann schreib einfach $fahrzeug = ... (also ohne das def initialize)

-Thomas

_________________
"Programs must be written for people to read, and only incidentally
for machines to execute."
- H. Abelson and G. Sussman
(in "The Structure and Interpretation of Computer Programs)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 11:03 
Offline
Lehrling
Benutzeravatar

Registriert: 22 Jun 2009, 13:55
Beiträge: 82
Wohnort: Ostthüringen
Zitat:
deine Definition des initialize am Anfang des Programms ist glaube ich nicht das, was du dir vorstellst, wie es funktionieren soll.
Wenn du unbedingt eine globale Variable haben willst, dann schreib einfach $fahrzeug = ... (also ohne das def initialize)


Ist erstmal richtig, aber @bob_sheknowdas, lass das am besten ganz raus, das brauchst du nicht ;-)

Zu deine Anderen Probleme hab ich im Edit schon angesprochen ;-) Kam best zu spät. Also schau bitte nochmal ans Ende meiner Antwort

Zitat:
2. das war mir klar, stört aber nich wirklich - bin schon froh wenn ichs überhaupt hinbekomme
3. das is mir auch schon aufgefallen und da arbeite ich dran (hab schon gut 1/4 rauskürzen könn)

zu 2.) Wenn nicht, dann schreib einfach nochmal wo's nun hängt
zu 3.) Schön. Ich finde bei meinen Texten auch immer wieder was zum optimieren. Aber wenn man früh anfängt verteilt sich die nötige Zeit besser und man sitzt am Ende nicht ewig :D

Grüße,
Kjarrigan

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook, The Wizardry Compiled


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: mehrere probleme bei fxruby
BeitragVerfasst: 15 Jul 2009, 13:22 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
das mit dem farbwechsel funktioniert jetz (danke Kjarrigan), und das man das fahrrad danach erst nochma bewegen muss stört vorerst nich...
was die bilder, musik und videos angeht, dasd war nur ma so ne interessenfrage und is mir einfach nebenbei mal eingefallen, wurd ja auch schon
beantwortet (nochmals danke Kjarrigan)...
was mich jetz noch stört:
-wer das programm mal ausprobiert hat wird feststellen, das durch das ständige neuzeichnen des canvas (ausgelöst durch onLeinwandRepaint) der bildschirm flimmert, immer wenn man das fahrzeug bewegt...

ich weiß nich wie ich die bewegungen darstellen soll, ohne die leinwand jedesma neu zu zeichnen

also: wer das flimmern wegbekommt und dabei den code nich total aufn kopf stellt gewinnt meine vollste anerkennung...

hier nochma der aktuelle code, mit allen neuerungen:



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
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
require 'fox16'
require 'fox16/colors'

include Fox


class Fahrrad
attr_accessor :col_Rahmen
attr_accessor :fahrzeug
$fahrrad=1
def initialize(col_background = FXColor::Green)
@col_background = col_background
@col_Rahmen = FXColor::Green
@col_reifen = FXColor::Black
@col_felgen = FXColor::White
@fahrzeug = 1
end

def draw(dc, pos = FXPoint.new(0,0))
return if dc.nil?
if @fahrzeug ==1
#fahrrad malen
dc.foreground = @col_background
dc.fillCircle(pos.x+12, pos.y+20, 5)
dc.fillCircle(pos.x+32, pos.y+20, 5)
dc.foreground = @col_reifen
dc.fillCircle(pos.x+12, pos.y+20, 4)
dc.fillCircle(pos.x+32, pos.y+20, 4)
dc.foreground = @col_felgen
dc.fillCircle(pos.x+12, pos.y+20, 2)
dc.fillCircle(pos.x+32, pos.y+20, 2)
dc.foreground = @col_Rahmen
dc.drawLine(pos.x+11, pos.y+13, pos.x+32, pos.y+13)
dc.drawLine(pos.x+11, pos.y+13, pos.x+19, pos.y+19)
dc.drawLine(pos.x+19, pos.y+19, pos.x+32, pos.y+13)
dc.drawLine(pos.x+11, pos.y+13, pos.x+5, pos.y+19)
dc.drawLine(pos.x+19, pos.y+19, pos.x+5, pos.y+19)
dc.drawLine(pos.x+32, pos.y+8, pos.x+32, pos.y+19)
dc.drawLine(pos.x+28, pos.y+8, pos.x+32, pos.y+8)
elsif @fahrzeug ==2
#auto malen
dc.foreground = @col_Rahmen
dc.fillRectangle(pos.x+6, pos.y+11, 35, 9)
dc.fillRectangle(pos.x+6, pos.y+4, 23, 9)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(pos.x+21, pos.y+5, 7, 5)
dc.foreground = @col_background
dc.fillCircle(pos.x+12, pos.y+20, 5)
dc.fillCircle(pos.x+32, pos.y+20, 5)
dc.foreground = @col_reifen
dc.fillCircle(pos.x+12, pos.y+20, 4)
dc.fillCircle(pos.x+32, pos.y+20, 4)
dc.foreground = @col_felgen
dc.fillCircle(pos.x+12, pos.y+20, 2)
dc.fillCircle(pos.x+32, pos.y+20, 2)
end
end

end

class RubykidsMainWindow < FXMainWindow
KEY_ARROW_LEFT = 65361
KEY_ARROW_UP = 65362
KEY_ARROW_RIGHT = 65363
KEY_ARROW_DOWN = 65364
def initialize(app)
super(app, "BikeDriver 5", :opts => DECOR_ALL, :width => 1700, :height => 990)
@hauptFrame = FXHorizontalFrame.new(
self,
LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y,
:padLeft => 0,
:padRight => 0,
:padTop => 0,
:padBottom => 0
)
@leinwandFrame = FXVerticalFrame.new(
@hauptFrame,
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_X|LAYOUT_FILL_Y,
:padLeft => 20,
:padRight => 20,
:padTop => 250,
:padBottom => 240
)
FXLabel.new(
@leinwandFrame,
"Bobs Town",
:opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X
)
FXHorizontalSeparator.new(
@leinwandFrame,
SEPARATOR_GROOVE|LAYOUT_FILL_X
)
@leinwand = FXCanvas.new(
@leinwandFrame,
:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT
)
FXHorizontalSeparator.new(
@leinwandFrame,
SEPARATOR_GROOVE|LAYOUT_FILL_X
)
@leinwand.connect(SEL_PAINT, method(:onLeinwandRepaint))
@leinwand.connect(SEL_KEYPRESS, method(:onKeyPressed))

@menuFrame = FXVerticalFrame.new(
@hauptFrame,
LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_Y,
:padLeft => 20,
:padRight => 20,
:padTop => 250,
:padBottom => 250
)
FXLabel.new(
@menuFrame,
"",
:opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X
)
@menubar = FXMenuBar.new(@menuFrame, LAYOUT_SIDE_TOP|LAYOUT_FILL_X)
@filemenu = FXMenuPane.new(self)
FXMenuTitle.new(@menubar, "&Men����", nil, @filemenu)
@fahrradknopf = FXMenuCommand.new(@filemenu, "bike",nil,nil, if $fahrrad == 4
$fahrrad = 1
else $fahrrad = 4
end, 0)
@fahrradknopf.connect(SEL_COMMAND){@fahrrad.fahrzeug = 1}
@autoknopf = FXMenuCommand.new(@filemenu, "car",nil,nil, if $fahrrad == 3
$fahrrad = 1
else $fahrrad = 3
end, 0)
@autoknopf.connect(SEL_COMMAND){@fahrrad.fahrzeug = 2}
@gruenknopf = FXMenuCommand.new(@filemenu, "green vehicle",nil,nil, if $fahrrad == 2
$fahrrad = 1
else $fahrrad = 2
end, 0)
@gruenknopf.connect(SEL_COMMAND){@fahrrad.col_Rahmen = FXColor::Green}
@rotknopf = FXMenuCommand.new(@filemenu, "red vehicle",nil,nil, if $fahrrad == 2
$fahrrad = 1
else $fahrrad = 2
end, 0)
@rotknopf.connect(SEL_COMMAND){@fahrrad.col_Rahmen = FXColor::Red}
FXMenuCommand.new(@filemenu, "quit", nil, getApp(), FXApp::ID_QUIT, 0)

@current_pos = FXPoint.new(30, 135)
@move_distance = FXPoint.new(8, 8)
@col_background = FXRGB(255, 255, 255)
@fahrrad =Fahrrad.new(@col_background)
end

#zeichnungen
def onLeinwandRepaint(sender, sel, event)
FXDCWindow.new(@leinwand, event) do |dc|
dc.foreground = FXColor::LimeGreen
dc.fillRectangle(0, 0, @leinwand.width, @leinwand.height)
#h��user oben
x=10
y=35
while x < 1600 do
dc.foreground = FXColor::SlateGray
dc.fillRectangle(x, 30, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 45, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 80, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 40, y, 0)
dc.drawLine(x+55, 40, y, 0)
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x-20, 95, 5, 15)
dc.fillRectangle(x-10, 95, 5, 15)
dc.fillRectangle(x-25, 90, 25, 5)
x = x+75
y= y+75
end
#h��user mitte links
x=15
y=40
while x< 250 do
dc.foreground = FXColor::LightYellow
dc.fillRectangle(x,200, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 215, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 250, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 210, y, 170)
dc.drawLine(x+55, 210, y, 170)
dc.foreground = FXColor::Red
dc.fillRectangle(y-45, 265, 5, 15)
dc.fillRectangle(y-35, 265, 5, 15)
dc.fillRectangle(y-50, 260, 25, 5)
x= x+75
y= y+75
end
#h��user mitte mitte
x=365
y=390
while x<1300 do
dc.foreground = FXColor::SlateGray
dc.fillRectangle(x,200, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 215, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 250, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 210, y, 170)
dc.drawLine(x+55, 210, y, 170)
dc.foreground = FXColor::White
dc.fillRectangle(y+30, 265, 5, 15)
dc.fillRectangle(y+40, 265, 5, 15)
dc.fillRectangle(y+25, 260, 25, 5)
x= x+75
y= y+75
end
#h��user unten rechts
x=1390
y=1415
while x<1800 do
dc.foreground = FXColor::LightYellow
dc.fillRectangle(x,330, 50, 80)
dc.foreground = FXColor::DarkBlue
dc.fillRectangle(x+15, 345, 15, 15)
dc.foreground = FXColor::SandyBrown
dc.fillRectangle(x+15, 380, 15, 30)
dc.foreground = FXColor::Red
dc.drawLine(x-5, 340, y, 300)
dc.drawLine(x+55, 340, y, 300)
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(y+30, 395, 5, 15)
dc.fillRectangle(y+40, 395, 5, 15)
dc.fillRectangle(y+25, 390, 25, 5)
x= x+75
y= y+75
end
#strasse quer oben
dc.foreground = FXColor::Black
dc.fillRectangle(0, 120, 1700, 40)
x=5
dc.foreground = FXColor::White
while x < 1700 do
dc.fillRectangle(x, 138, 10, 4)
x= x+20
end
#strasse quer mitte
dc.foreground = FXColor::Black
dc.fillRectangle(0, 290, 1350, 40)
x=5
dc.foreground = FXColor::White
while x < 1350 do
dc.fillRectangle(x, 308, 10, 4)
x= x+20
end
#strasse quer unten
dc.foreground = FXColor::Black
dc.fillRectangle(1325, 430, 500, 40)
x=1345
dc.foreground = FXColor::White
while x < 1600 do
dc.fillRectangle(x, 448, 10, 4)
x= x+20
end
#strasse senkrecht links
dc.foreground = FXColor::Black
dc.fillRectangle(300, 160, 45, 140)
x=160
dc.foreground = FXColor::White
while x < 300 do
dc.fillRectangle(320, x, 4, 10)
x= x+20
end
#strasse senkrecht rechts
dc.foreground = FXColor::Black
dc.fillRectangle(1325, 160, 45, 285)
x=160
dc.foreground = FXColor::White
while x < 460 do
dc.fillRectangle(1345, x, 4, 10)
x= x+20
end
#b��ume mitte rechts
x=1410
while x < 1800 do
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x, 245, 20, 40)
dc.foreground = FXColor::DarkGreen
dc.fillCircle(x+10, 210, 45)
x = x+75
end
#b��ume unten links
x=10
while x < 1300 do
dc.foreground = FXColor::SaddleBrown
dc.fillRectangle(x, 425, 20, 40)
dc.foreground = FXColor::DarkGreen
dc.fillCircle(x+10, 390, 45)
x = x+75
end
#fahrzeugposition
pos = FXPoint.new(@current_pos.x, @current_pos.y)
[
[0, 0],
[@leinwand.width, 0],
[0, @leinwand.height],
[@leinwand.width, @leinwand.height]
].each do |off|
pos.x = @current_pos.x - off[0]
pos.y = @current_pos.y - off[1]
@fahrrad.draw(dc, pos)
end
end
end

def onKeyPressed(sender, sel, event)
if event.code == KEY_ARROW_LEFT
if @current_pos.y > 270 && @current_pos.x < 7
elsif @current_pos.y > 135 && @current_pos.y < 270
if @current_pos.x < 300
elsif @current_pos.x > 345 && @current_pos.x < 1320
else
self.move_backward
end
elsif @current_pos.y > 310 && @current_pos.x < 1320
else
self.move_backward
end
elsif event.code == KEY_ARROW_RIGHT
if @current_pos.y > 135 && @current_pos.y < 270
if @current_pos.x < 305
self.move_forward
elsif @current_pos.x > 1315 && @current_pos.x < 1330
self.move_forward
end
elsif @current_pos.y > 270 && @current_pos.x > 1465
elsif @current_pos.y > 270 && @current_pos.y < 415 && @current_pos.x > 1330
else
self.move_forward
end
elsif event.code == KEY_ARROW_UP
if @current_pos.y < 105
elsif @current_pos.y < 275 && @current_pos.y > 135
if @current_pos.x < 290
elsif @current_pos.x > 315
if @current_pos.x < 1315
elsif @current_pos.x > 1340
else
self.move_up
end
else
self.move_up
end
else
self.move_up
end
elsif event.code == KEY_ARROW_DOWN
if @current_pos.y > 300 && @current_pos.x < 1315
elsif @current_pos.y > 435
elsif @current_pos.y > 130 && @current_pos.y < 270
if @current_pos.x < 290
elsif @current_pos.x > 315
if @current_pos.x < 1315
elsif @current_pos.x > 1340
else
self.move_down
end
else
self.move_down
end
else
self.move_down
end
end
@leinwand.update
end

def move_forward
@current_pos.x = (@current_pos.x + @move_distance.x) % @leinwand.width
@current_pos.y = (@current_pos.y ) % @leinwand.height
end

def move_backward
@current_pos.x = (@current_pos.x - @move_distance.x) % @leinwand.width
@current_pos.y = (@current_pos.y ) % @leinwand.height
end

def move_up
@current_pos.x = (@current_pos.x ) % @leinwand.width
@current_pos.y = (@current_pos.y - @move_distance.y) % @leinwand.height
end

def move_down
@current_pos.x = (@current_pos.x ) % @leinwand.width
@current_pos.y = (@current_pos.y + @move_distance.y) % @leinwand.height
end

def create
super
show(PLACEMENT_SCREEN)
end

end

application = FXApp.new
mainWin = RubykidsMainWindow.new(application)
application.create
application.run


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron