mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Asteroids auf AVR Scope-Clock


Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich wollt hier mal meinen Asteroids-Clone auf AVR vorstellen, 
programmiert in GNU-C auf einem ATmega168.

Ganz fertig ist's noch nicht, aber man kann schon gut erkennen, wie's 
werden soll. Mit FPGA-Implementierungen kann ein AVR natürlich nicht 
mithalten, aber nach anfänglicher Skepsis, ob das überhaupt sinvoll 
umsetzbar ist, war ich dann doch überrascht, wie viel mit einem AVR geht 
:-)

Youtube-Video "Asteroids Game on AVR Scope Clock"

Grüß

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Mit FPGA-Implementierungen kann ein AVR natürlich nicht mithalten 
...

Gefällt mir dein Projekt. Gibt es eine Seite auf der ich mehr erfahren 
kann?

Das Orginal lief auf einem 6502 (?) - da sollte ein ATMega doch gut 
mithalten können.

Autor: Volker R. (pcl86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da sag ich doch auch: wo gibt´s mehr?

Zumal ich hier noch eine DG7-16 ´rumliegen habe...
Gruß
Volker

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

saucool - würdest du uns den Source-Code zur Verfügung stellen?

Dankeschön

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Das Orginal lief auf einem 6502 (?) - da sollte ein ATMega doch gut
> mithalten können.
Dem 6502 stand auch noch ein Vektorprozessor in Form eines TTL-Grabes 
zur Seite.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Gefällt mir dein Projekt. Gibt es eine Seite auf der ich mehr erfahren
> kann?

Ab und an mach ich nen Snapshot auf (Link ganz unten)
   http://www.gjlay.de/pub/morpheus
Mit der Version geht allerdings kein Build. Dazu einfach ein touch foo.c 
oder foo.c ausm Makefile rauswerfen.

Falls sich wer dafür interessiert und Fragen sind, kann ich versuchen 
die Quellen besser zu dokumentieren wo Verständnisprobleme sind. Dadurch 
wird vielleicht auch bei mir der Knoten im Kopf kleiner ;-)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
... oder direkt den Snapshot

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich muss schon sagen. Hut ab. Toll.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.

Momentan ballert das Ufo (U) ziellos in die Gegend und ich frag mich 
gerade, wie man es (in einem höheren Level) anstellen kann, daß es in 
etwa in die Richtung des Raumschiffs (A) schiesst.

Die Richtung, in der der Schuss s geht, soll also
sein, während die Geschwindigkeit v vorgegeben ist:

Die Lösung
scheidet leider aus, weil man dazu erstens dividieren muss und zweitens 
ne Quadratwurzel zu berechnen hat.

Jemand ne Idee wie es ohne Division und ohne Wurzel geht?

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, hab auch das gelöst, ist eigentlich ganz naheliegend. Zunächst wählt 
man einen zufälligen Einheitsvektor s und verwendt
Ist nun a*s > 0 und bildet s mit a einen Winkel kleiner als phi_0 dann 
ist das gleichbedeutend mit:

Ist diese Ungleichung erfüllt, dann zeigt s ungefähr in die Richtung von 
a mit einer maximalen Winkelabweichung von phi_0. Um das zu testen 
braucht man weder Division noch Wurzel. Die cos-Konstante ist nur vom 
Level abhängig und kann fest vorberechnet werden.

Ist die Ungleichung nicht erfüllt, wird im nächsten Frame des Spiels 
einfach ein neuer Kandidat für s bestimmt und getestet, solange bis 
einer gefunden ist.

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cooles Projekt :) Kannst du auch die Helligkeit der Röhre steuern? Beim 
originalen Asteroids wird afaik der "Schuss" absichtlich überstrahlt 
gezeichnet.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luk4s K. schrieb:
> Kannst du auch die Helligkeit der Röhre steuern?

Nö, nur per Poti einstellen.

Es gäbe die Möglichkeit, nen Schuss mehrfach zu zeichnen, wodurch er 
dann heller erscheint.

Momentan wird die Helligkeit softwaremässig durch die Anzahl der 
Pixel/Frame bestimmt, ist momentan glaub auf 1400 festgelegt. Hat ein 
Frame weniger Punkte, dann wird die Zeit vergammelt. Dadurch wird 
vermieden, daß Franmes, die weniger Punkte haben, heller erscheinen als 
Frames mit vielen Punkten.

Beim Start von Asteroids geht die Helligkeit anfangs etwas zurück, so 
daß hier wohl mehr als 1400 Pixel gepinselt werden; wieviel es ungefähr 
sind, weiß ich aber net.

Bei Snake wird die Spielfeld-Umrandung gezeichnet, indem der e-Strahl im 
Abstand von 4 Pixel gesetzt wird ohne ihn dazwischen auszutasten. 
Dadurch werden die wesentlichen Spielelemente Snake+Futter+Score 
hervorgehoben. Hauptsächlich hat das aber den Zweck, nicht so viele 
Pixel zeichnen zu müssen, denn wenn ein Frame länger als ca. 1/35 
Sekunde braucht, fängt die Röhre (bzw. der GJ-Schirm) an zu flackern. 
Mit den 1400 Pixel/Frame und den 48000 Pixel/Sekunde ergeben sich ca. 35 
angezeigte Frames/Sekunde (berechnet werden teilweise mehr oder auch 
weniger, denn die Frame-Anzeige läuft asynchron zur Frame-Berechnung)

Die Möglichkeiten, nen "frei fliegenden" e-Strahl zu  nutzen, um 
dunklere oder rasterlose Linien zu zeichnen, sind aber recht 
eingeschränkt, denn dabei bewegt sich der Strahl weder in einer geraden 
Linie noch mit konstanter Geschwindigkeit von A nach B. In einem 
Testbild kann das aber recht aufschlussreich sein.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne lustige Version von Snake ist übrigens hier zu sehen. Allerdings ist 
das Display recht teuer und auch ziemlich sperrig...

Youtube-Video "Playing Snake on a Building"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.