• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Aufgabenstellung] Programmierwettbewerb Nr 4

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.677
PS: Hast du dir nen Zeitplan gesteckt, bis wann du abgeben willst?
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #103
Einen?



I've lost that coding' feelin'
Whoa, that coding' feelin'
I've lost that coding' feelin'
Now it's gone, gone, gone, woh

Keyboard, Keyboard, Keyboard, Keyboard
I beg you please, please, please, please
I need your love, need your love
I need your love, I need your love
So bring it on back, so bring it on back
Bring it on back, bring it on back

Bring back that coding' feelin'
Whoa, that coding' feelin'
Bring back that coding' feelin'
'Cause it's gone, gone, gone
And I can't go on, woh

Bring back that coding' feelin'
Whoa, that coding' feelin'
Bring back that coding' feelin'
'Cause it's gone, gone, gone

Eigentlich nur noch ein Abend, aber ich habe da eine echte Schreibblockade. "Das Schreiben wird als qualvoll empfunden. Häufig treten schon beim Gedanken an die Anfertigung der Arbeit oder beim Anblick des Bildschirms körperliche Symptome wie Unwohlsein oder Nervosität auf und es werden Vermeidungshandlungen wie Aufräumen, Putzen etc. ausgeführt."
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
Dazu fällt mir ein motivierenderer Song ein:

Now these points of data make a beautiful line
And we're out of Beta, we're releasing on time.
So I'm GLaD I got burned, think of all the things we learned!
For the people who are still alive!

Wer den Song kennt, darf sich einen Keks freuen, eins der besten Spiele der letzten Jahre gespielt zu haben :)
 

Kenobi van Gin

Brillenschlange

Registriert
14 Juli 2013
Beiträge
3.620
Ort
.\
Definitiv! Habs eben erst nochmal durchgespielt :D
Nun wieder der zweite Teil. Den habe ich auch tatsächlich noch nicht durch. Ich bin gespannt.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #108
Nach ein wenig Urlaub konnte ich die Abneigung gegen Freizeitprogrammierung überwinden.
Ich muß mich da auch nochmal bei allen entschuldigen, vor allem, wo ich selber im Vorfeld so einen Wind über die Abliefermoral gemacht habe.
Aber das war keine einfache Unlust, das war schon eine körperliche Abneigung, die mich da blockiert hat.

Hat dann auch die Woche noch ein wenig gedauert, weil ich alles noch mal auf den Kopf stellen mußte.
Ich war ja zu 95% fertig, habe dann aber bei den ersten Tests gemerkt, daß das nicht spielbar war. Das ruckelte nur.
Ich hatte alles so schön objektorientiert und schön die Logik von der Visualisierung getrennt, aber Windows Forms ist für Formulare, nicht für Spiele.
Ich hatte gedacht, ich habe Klassen, wo ich dann verschieden Bilder übereinanderlege und die dann an die Form übergebe, aber das funktioniert nicht zufriedenstellend.
ich habe das dann mit Threading probiert, aber das knallt und wenn man das synchronisiert, was ich dann gemacht habe, dann hat man den Vorteil des Multithreadings verschenkt.

Jetzt ist der Code nicht mehr so schön und ich male direkt auf dem Graphik-Objekt der Form, aber ist wenigstens flüssig.
Die Schriftanzeigen konnte ich auch nicht verwende, das paßt zeitlich nicht mit der Aktualisierung der Graphik, daher mußte die Schrift auch über die Graphik erstellt werden.

Anhang anzeigen 54800Anhang anzeigen 54801

(Bei LunarLander.z01.zip das '.zip' entfernen,( Packetdatei, konnte ohne Dateiendung nicht geladen werden) und dann LunarLander.zip entpacken)
[video=picflash;Form104IVJHW5.08IVJHW5.201918_06_38_38IVJHW5.webm]https://www.picflash.org/picture.php?key=IVJHW5&action=show[/video]

[video=picflash;Form104GZ7SBR.08GZ7SBR.201918_08_00_00GZ7SBR.webm]https://www.picflash.org/picture.php?key=GZ7SBR&action=show[/video]

[video=picflash;Form1049PJ3U5.089PJ3U5.201918_08_41_419PJ3U5.webm]https://www.picflash.org/picture.php?key=9PJ3U5&action=show[/video]

Anhang anzeigen 55179
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.677
Ich traue meinen Augen nicht, der Kapitn hat was abgegeben und ich habs nicht gesehen? :o

Bei einer sicheren Landung fehlt eigentlich nur noch ein Trollface... aber schön anzusehen, wobei mir nicht ganz klar ist, was dieses "Radar" darstellt, Wind(stärke)?

Und ich finds gut, dass du den inneren Schweinehund überwunden hast. :T
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #110
Ja. Das soll eine Windrose sein. Gibt die Richtung und die Stärke an. Ist noch der Erstentwurf. Könnte schöner sein aber macht was es soll.

Wieso Trollface? Was stimmt mit dem Astronauten nicht?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.677
Ach so... cool. Irgendwie aber schon 10 mal besser als in meiner Umsetzung... (Pfeil).

Dann hätten wir wohl alle, die die was abgeben wollten, abgegeben? :)
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
347
Moin.

Ich hatte ja leider nur mal so nen Zwischenstand gepostet und dann nix mehr von mir hören lassen. Hab meinen Quellcode wieder gefunden... auf meinem Arbeitslaptop - sehr untypisch. Na jedenfalls, hier ist ein Video vom damaligen Endprodukt (hab jetzt nix weiter dran gemacht)

https://vimeo.com/376013549

Und hier der Quellcode (das boardeigene Code-Tag unterstützt kein Lisp-Highlighting :dozey:)
[src=bash]
(defpackage lunar
(:use :trivial-gamekit)
(:export #:start))

;; Load gamekit (for developing only)
;; (ql:quickload :trivial-gamekit)

(defun get-time-stamp ()
(/ (get-internal-real-time)
internal-time-units-per-second))

;; state type of the game
(defstruct state x-v y-v y-a x-pos y-pos angle up? rotate-left? rotate-right? fuel)

;; initial state value
(defparameter initial-state (make-state :x-v 0 :y-v 0 :y-a 0 :x-pos 350 :y-pos 500
:angle 0 :up? nil :rotate-left? nil :rotate-right? nil
:fuel 1000))

;; globals
(defparameter *s* initial-state)
(defparameter *pause* nil)
(defparameter *status* :play)
(defparameter *canvas-width* 800)
(defparameter *canvas-height* 600)
(defparameter *a* 0.2)
(defparameter *thrust-a* -0.5)
(defparameter *lander-width* 40)
(defparameter *lander-height* 40)

;; landing zone, consists of a start and end x-pos
(defstruct landing-zone start end)
(defun random-landing-zone (width)
(let* ((half (/ width 2))
(middle (+ half (random (- *canvas-width* width)))))
(make-landing-zone :start (- middle half)
:end (+ middle half))))
(defparameter *landing-zone* (random-landing-zone 70))

(gamekit:defgame lunar-lander () ()
(:viewport-width *canvas-width*)
(:viewport-height *canvas-height*)
(:viewport-title "Lunar Lander"))

(gamekit:define-image :lander "lander.png")

(defun initialize ()
(setf *pause* t)
(setf *status* :play)
(setf *s* initial-state)
(setf *landing-zone* (random-landing-zone 70)))

;; functions to determine new values
(defun new-x-pos (x-pos v)
(cond
((> x-pos (+ 40 *canvas-width*)) -40)
((< x-pos -40) (+ 40 *canvas-width*))
(t (+ x-pos v))))

(defun new-v (a old-v)
(+ old-v (* 0.04 a)))

(defun new-y-a (s)
(if (state-up? s)
(+ *a* *thrust-a*)
*a*))

(defun new-y-pos (y-pos v)
(- y-pos v))

(defun new-y-v (a angle old-v)
(+ old-v (* (cos angle) 0.04 a)))

(defun new-x-v (a angle old-v)
(+ old-v (* (sin angle) 0.04 a)))

(defun new-angle (s)
(let* ((old (state-angle s))
(right? (state-rotate-right? s))
(left? (state-rotate-left? s)))
(cond
((and left? right?) old)
((and right? (> old -1.4))
(- old 0.04))
((and left? (< old 1.4))
(+ old 0.04))
(t old))))

(defun lander-left-pos (x-pos)
(- x-pos (/ *lander-width* 2)))

(defun lander-right-pos (x-pos)
(+ x-pos (/ *lander-width* 2)))

;; win condition helping functions
(defun lander-on-landing-zone? (x-pos landing-zone)
(let ((left (lander-left-pos x-pos))
(right (lander-right-pos x-pos)))
(and (> left (landing-zone-start landing-zone))
(< right (landing-zone-end landing-zone)))))

(defun won? (y-v angle)
(and (lander-on-landing-zone? (state-x-pos *s*) *landing-zone*)
(< y-v 0.4)
(< angle 0.08)))

(defun on-ground? (y-pos)
(< y-pos 10))

;; gets invoked on every time tick
(defun update-state ()
(cond
((< (state-fuel *s*) 0)
(setf *status* :lose))

;; win condition
((and (on-ground? (state-y-pos *s*))
(won? (state-y-v *s*) (state-angle *s*)))
(setf *status* :win))

;; lose condition
((on-ground? (state-y-pos *s*))
(setf *status* :lose))

;; Not on ground and enough fuel
(t
(setf *s* (make-state :x-v (new-x-v (if (state-up? *s*)
*thrust-a* 0)
(state-angle *s*)
(state-x-v *s*))
:y-v (new-y-v (state-y-a *s*)
(state-angle *s*)
(state-y-v *s*))
:y-a (new-y-a *s*)
:x-pos (new-x-pos (state-x-pos *s*) (state-x-v *s*))
:y-pos (new-y-pos (state-y-pos *s*) (state-y-v *s*))
:up? (state-up? *s*)
:rotate-left? (state-rotate-left? *s*)
:rotate-right? (state-rotate-right? *s*)
:angle (new-angle *s*)
:fuel (if (state-up? *s*)
(- (state-fuel *s*) 1)
(state-fuel *s*)))))))

(defun key-bindings ()
(gamekit:bind-button :p :pressed
(lambda () nil))
(gamekit:bind-button :p :released
(lambda () (setf *pause* (not *pause*))))
(gamekit:bind-button :up :pressed
(lambda () (setf (state-up? *s*) t)))
(gamekit:bind-button :up :released
(lambda () (setf (state-up? *s*) nil)))
(gamekit:bind-button :left :pressed
(lambda () (setf (state-rotate-left? *s*) t)))

(gamekit:bind-button :left :released
(lambda () (setf (state-rotate-left? *s*) nil)))

(gamekit:bind-button :right :pressed
(lambda () (setf (state-rotate-right? *s*) t)))

(gamekit:bind-button :right :released
(lambda () (setf (state-rotate-right? *s*) nil)))

(gamekit:bind-button :r :pressed
(lambda ()
(initialize))))

(defun draw-img (img x-pos y-pos width height scaling rot-deg)
(gamekit:with-pushed-canvas ()
(gamekit:translate-canvas x-pos y-pos)
(gamekit:rotate-canvas rot-deg)
(gamekit:scale-canvas scaling scaling)
(gamekit:draw-image (gamekit:vec2 (/ width -2) (/ height -2)) img)))

(defun draw-landing-zone (landing-zone)
(gamekit:draw-line (gamekit:vec2 (landing-zone-start landing-zone)
0)
(gamekit:vec2 (landing-zone-end landing-zone)
0)
(gamekit:vec4 1 1 1 1)
:thickness 3))

(defun draw-header ()
(gamekit:draw-text "Lunar Lander" (gamekit:vec2 300 570) :fill-color (gamekit:vec4 1 1 1 1)))

(defun draw-stats ()
(gamekit:with-pushed-canvas ()
(gamekit:scale-canvas 0.75 0.75)
(gamekit:draw-text (format nil "State: ~a" *status*) (gamekit:vec2 0 700)
:fill-color (gamekit:vec4 1 1 1 1))
(gamekit:draw-text (format nil "Pause: ~a" *pause*) (gamekit:vec2 0 670)
:fill-color (gamekit:vec4 1 1 1 1))
(gamekit:draw-text (format nil "Angle: ~2,2@F" (state-angle *s*)) (gamekit:vec2 0 640)
:fill-color (gamekit:vec4 1 1 1 1))
(gamekit:draw-text (format nil "y-velocity: ~2,2@F" (* 10 (floor (* (state-y-v *s*) 10)))) (gamekit:vec2 0 610)
:fill-color (gamekit:vec4 1 1 1 1))
(gamekit:draw-text (format nil "FUEL: ~a" (state-fuel *s*)) (gamekit:vec2 0 580)
:fill-color (gamekit:vec4 1 1 1 11))))

(defmethod gamekit:draw ((this lunar-lander))
(gamekit:draw-rect (gamekit:vec2 0 0) (- *canvas-width* 1) (- *canvas-height* 1)
:fill-paint (gamekit:vec4 0 0 0 1)
:stroke-paint (gamekit:vec4 0 0 0 1))
(draw-img :lander (state-x-pos *s*) (state-y-pos *s*) *lander-width* *lander-height* 0.5 (state-angle *s*))
(draw-landing-zone *landing-zone*)
(draw-header)
(draw-stats))

;; tick function
(defmethod gamekit:act ((this lunar-lander))
(if *pause*
nil
(update-state)))

(defun start ()
(gamekit:start 'lunar-lander :autoscaled nil)
(key-bindings))

(start)

[/src]
Und hier mit Code-Highlighting https://www.codepile.net/pile/yjyr6aXg.

Leider hab ich das unter Windows nicht zum Kompilieren gekriegt, deshalb nur Code und Video.
 
Oben