# Hardware/Spiele programmieren



## Warrior7777 (1. Jun 2012)

Hallo miteinander

ich hab da eine kleine Frage: Wenn man Hardware programmieren will (z. B. eine Tastatur, Fernsteuerung etc.), kann man dafür C++ nehmen? Ich überlege mir im Moment, diese Sprache zu lernen, weil ich Spiele programmieren will. In Java ist das (jedenfalls so wie ich mich jetzt anstelle) ziemlich schwierig.
Ich weiss übrigens, dass man mit Java ME auch gewisse Hardware programmieren kann. Dafür müsste aber eine VM auf dem Gerät laufen, was so gut wie nicht machbar ist, wenn man die Hardware selbst baut, oder (damit will ich nämlich evt. auch anfangen)?

Danke für Eure Antworten! Ich freue mich schon darauf!


----------



## Atze (1. Jun 2012)

also programmieren kannst du nur software, höchstens treiber für hardware.

und gut, dass es kaum java-spiele gibt


----------



## Cola_Colin (1. Jun 2012)

Warrior7777 hat gesagt.:


> Ich überlege mir im Moment, diese Sprache zu lernen, weil ich Spiele programmieren will.



Wenn du schon Java kannst und kein AAA 3D-Ding machen willst -was sowieso nie fertig würde-, dann würde ich keinen Grund sehen nicht auch bei Java zu bleiben für die Entwicklung von Spielen.
Zugriff auf Tastatur und co kriegst du auch mit Java


----------



## Network (2. Jun 2012)

Warrior7777 hat gesagt.:


> Hallo miteinander
> 
> ich hab da eine kleine Frage: Wenn man Hardware programmieren will (z. B. eine Tastatur, Fernsteuerung etc.), kann man dafür C++ nehmen? Ich überlege mir im Moment, diese Sprache zu lernen, weil ich Spiele programmieren will. In Java ist das (jedenfalls so wie ich mich jetzt anstelle) ziemlich schwierig.
> Ich weiss übrigens, dass man mit Java ME auch gewisse Hardware programmieren kann. Dafür müsste aber eine VM auf dem Gerät laufen, was so gut wie nicht machbar ist, wenn man die Hardware selbst baut, oder (damit will ich nämlich evt. auch anfangen)?
> ...



Ich bin von Scripts zu C# zu Java zu C++ zu Java gewechselt.
C++ und Java gleichen sich auf den ersten Blick aufs i-Tüpfelchen genau.
Auf den zweiten Blick merkt man dann jedoch die enormen Unterschiede.

Du wirst dann auf Bereiche treffen, wie Bspw. die Speicherverwaltung wo ich persöhnlich teilweise verzweifelt bin. Bei Java wiegt man sich in unbewusster Sicherheit und Einfachheit. Was in Wirklichkeit hinter den meisten Programmen steckt erfährt man dann wenn man in C(++) programmiert.
Aber es gibt auch so kleine Unterschiede die manchmal einem wirklich auf die nerven gehen. Ich weiss nicht ob es nur bei C# war oder auch bei C++ (Hirn lass nicht nach), aber z.B. so tolle Sachen wie "String"s gibt es nicht, soweit ich mich erinnern kann. Sondern nur Verweise von einem Buchstaben auf den nächsten.

Es war nicht Teil des Fragestellers sondern eine der Antworten: 3D gehört weder zu C++ noch zu Java. Was hinter einem Spiel steckt, sind die Berechnungen, die Logik, die Mechanik. Und hier braucht sich Java in Sachen Geschwindigkeit nicht zu verstecken.
Die Anzeige regelt schlussendlich die Grafikkarte.
Sowohl DirectX als auch OpenGL sind für Java zugänglich.

Den Hardwarebereich kann ich dir leider nicht beantworten. Solche Möglichkeiten konnte ich zwar schonmal beobachten, der Aufwand der dahinter steckte war mir jedoch verborgen geblieben.

Gruß
Net


----------



## Gast2 (2. Jun 2012)

Network hat gesagt.:


> C++ und Java gleichen sich auf den ersten Blick aufs i-Tüpfelchen genau.
> Auf den zweiten Blick merkt man dann jedoch die enormen Unterschiede.


???:L - sorry - aber C++ verwendet Header-Dateien, das sieht man schon auf den ersten Blick



> Du wirst dann auf Bereiche treffen, wie Bspw. die Speicherverwaltung wo ich persöhnlich teilweise verzweifelt bin.


Den Speicher den Du Dir vom System holst, musst auch wieder freigeben - einfache Grundregel.



> Bei Java wiegt man sich in unbewusster Sicherheit und Einfachheit.


Da kannst Du noch C# und diverse andere Sprachen hinzufügen. Man kann sich schön in die Brennesseln setzen wenn man glaubt Java (inkl. .NET) gibt immer alles automatisch frei - kurzer Querverweis Window (Java Platform SE 6)



> Aber es gibt auch so kleine Unterschiede die manchmal einem wirklich auf die nerven gehen. Ich weiss nicht ob es nur bei C# war oder auch bei C++ (Hirn lass nicht nach), aber z.B. so tolle Sachen wie "String"s gibt es nicht, soweit ich mich erinnern kann. Sondern nur Verweise von einem Buchstaben auf den nächsten.


ich weis ja nicht welche Programmiersprachen Du kennst, aber alle mir bekanten Sprachen haben eine String-Klasse. Und da wird nicht von einen Buchstaben auf den nächsten verwiesen. Die hängen nämlich alle hintereinander und sind keine verkettet Listen - auch bei C. Den Unterschied zwischen C und den anderen OOP-Sprachen ist die Kennung der Länge. C verwendet '\0' am Ende - der Rest hat ein entsprechenden Member dafür.


----------



## Gast2 (2. Jun 2012)

Warrior7777 hat gesagt.:


> In Java ist das (jedenfalls so wie ich mich jetzt anstelle) ziemlich schwierig.


öhm - Minecraft ? Ansonsten mal ${Suchmaschine} - gibt genügend Spiele in Java ist also nicht so schwierig.

Ansonsten ist die Hardware des Rechners für Dich untinteressant - außer Du willst Treiber für diese HW programmieren (dann ist C/C++ oder was anderes Natives nötig). Das Betriebssystem reicht die entsprechenden Geräte über die Betriebssystem-API durch - ist also für Dich völlig Transparent und somit total uninteressant. Wenn Du einen Tastendruck abfragen willst, dann bietet Dir Java auch entsprechende Methoden dafür.

Außnahme bildet hier nich übliche Hardware - dafür gibt es aber vom Herstelle meistens selber eine API. Die brauchst Du nur in Java einbinden.


----------



## Warrior7777 (2. Jun 2012)

Danke für die vielen Antworten!  Hier im Forum sind alle so hilfsbereit
Ok ich hab mich falsch augedrückt, sorry. Ich bin einer dieser Leute, die gerne mit Buch lernen (Augen ermüden am Bildschirm zu schnell). Ich habe einfach festgestellt, dass fast alle deutschen Bücher über Spieleprogrammierung für C++/Objective C geschrieben sind.
(Ja, ich hab von "Killergame programming in Java" gehört, will aber nicht über 1000 Seiten in Englisch lesen...)
Wegen der Sache mit der Hardware: Ich hab keine Ahnung, wie elektrische Impulse in "Programme"/Binärcode/Information umgewandelt werden, finde dieses Gebiet aber sehr interessant. Ich fände es auch sehr lustig, z. B. eine eigene Fernbedienung zu bauen. Ich weiss, dass das natürlich sehr schwierig ist und dass man viel Ahnung über Hardwarebau dafür braucht. Was mich zur nächsten Frage treibt: Kennt jemand ein gutes Buch dazu? Ich finde dieses Gebiet der Informatik sehr spannend... Hab leider keine Ahnung, wie man anfängt, sich in so etwas einzulesen/ -arbeiten.


----------



## turtle (2. Jun 2012)

Schau Dir doch mal Arduino an.


----------



## Network (2. Jun 2012)

mogel hat gesagt.:


> ???:L - sorry - aber C++ verwendet Header-Dateien, das sieht man schon auf den ersten Blick


Wer schaut den bitteschön auf den Quelltext und sagt "Oh schau mal Header-Dateien!"?



mogel hat gesagt.:


> Den Speicher den Du Dir vom System holst, musst auch wieder freigeben - einfache Grundregel.


Und hilft einem überhaupt nicht bei den verschiedenen Speicherarten (Heap bsp.) weiter. Überhaupt sich darum kümmern zu müssen, ist doch das "schlimme" wenn man von Java (wieder) auf C wechselt. Extra Arbeit ist immer negativ und lästig, besonderst wenn man sie vorher nicht machen musste. 



mogel hat gesagt.:


> ich weis ja nicht welche Programmiersprachen Du kennst, aber alle mir bekanten Sprachen haben eine String-Klasse. Und da wird nicht von einen Buchstaben auf den nächsten verwiesen. Die hängen nämlich alle hintereinander und sind keine verkettet Listen - auch bei C. Den Unterschied zwischen C und den anderen OOP-Sprachen ist die Kennung der Länge. C verwendet '\0' am Ende - der Rest hat ein entsprechenden Member dafür.


Ich habe bei C# noch nie einen String gesehen. Ein Linkverweis wäre an der Stelle sehr schön.


----------



## andiv (2. Jun 2012)

Network hat gesagt.:


> Ich habe bei C# noch nie einen String gesehen. Ein Linkverweis wäre an der Stelle sehr schön.



string (C#)


----------



## Verarbeitung (3. Jun 2012)

Network hat gesagt.:


> Ich bin von Scripts zu C# zu Java zu C++ zu Java gewechselt.
> C++ und Java gleichen sich auf den ersten Blick aufs i-Tüpfelchen genau.





Network hat gesagt.:


> Ich habe bei C# noch nie einen String gesehen. Ein Linkverweis wäre an der Stelle sehr schön.


Du kannst offenbar weder Java, noch C++ noch C#, warum postest du in diesem thread ???:L


----------



## Network (3. Jun 2012)

andiv hat gesagt.:


> string (C#)



[Warrior7777 den Absatz kannst du überspringen ]
Da muss ich mich wohl entschuldigen. Bei meinem Lehrgang für C# bei der Programmierung von Microcontrolern wurde meine Frage nach Strings verneint und auf char*s verwiesen. Das hatte ich dann so übernommen gehabt und ehrlich gesagt bei meiner Suche nach C# Strings habe ich auch nur char*s gefunden.
Entweder war die Antwort eine Falschaussage gewesen oder es betraf nur den Firmeneigenen Compiler bzw. Entwicklungsumgebung.
Aber das gehört schon alles nicht mehr zum Topic. 
Btw. kein Grund gleich unfreundlich zu werden, das einzige was man ganz genau im Leben weiss, ist dass man nichts weiss. Man lernt nunmal nie aus .

[Der Absatz ist für dich ]
--> Warum druckst du dir online Tutorials nicht aus? Ich mache das sehr oft und lese sie dann Abends gemütlich irgendwo oder auf dem Weg irgendwohin.

Außerdem was genau interessiert dich denn an der Spielentwicklung?
Es ist immer ein guter Anfang erstmal ein kleines Spiel zu schreiben um den Klassenaufbau kennenzulernen und verschiedene Mechaniken und Lösungen um dann auf größere Gebiete zu wechseln.

Das mit den englischen Tuts stimmt natürlich. Im deutschen Bücher-Bereich findet man leider nicht viel.
Meine Kenntnisse über Spiele habe ich manchmal aber auch aus Büchern für C++. Das Prinzip bleibt das gleiche und ist oft 1zu1 übertragbar. Aber man muss sich daran gewöhnen.

Hinter der Spielmechanik selbst versteckt sich aber wirklich nicht viel. Sie unterscheidet sich zur GUI, dass du nurnoch eine Zeichenklasse verwendest und innerhalb eines Zeitintervalls immer wieder alles neuberechnest und neuzeichnest.


----------



## pro2 (3. Jun 2012)

Network hat gesagt.:


> [Warrior7777 den Absatz kannst du überspringen ]
> Da muss ich mich wohl entschuldigen. Bei meinem Lehrgang für C# bei der Programmierung von Microcontrolern wurde meine Frage nach Strings verneint und auf char*s verwiesen. Das hatte ich dann so übernommen gehabt und ehrlich gesagt bei meiner Suche nach C# Strings habe ich auch nur char*s gefunden.
> Entweder war die Antwort eine Falschaussage gewesen oder es betraf nur den Firmeneigenen Compiler bzw. Entwicklungsumgebung.
> Aber das gehört schon alles nicht mehr zum Topic.
> Btw. kein Grund gleich unfreundlich zu werden, das einzige was man ganz genau im Leben weiss, ist dass man nichts weiss. Man lernt nunmal nie aus .



Meine Güte, so unfreundlich war jetzt hier auch keiner. Aber bist du sicher, dass du einen µC-Lehrgang in C# gemacht hast und nicht C++ meinst?! Und die Verwendung von char Pointern in C# ist jetzt auch nicht wirklich soo üblich. Aber es kann sein, dass darauf auf Grund des Speicherverbrauchs verwiesen wurde. Und wenn du nach "C# String" bei Google suchst, wirst du mit Ergebnissen dazu nur fast zu überrumpelt. Gleiches gilt übrigens für "C++ String". 
Übrigens C# und Java gleichen sich wirklich fast und da kann man den Quellcode 1 zu 1 teilweise kopieren, aber bei C++ ist das nicht wirklich so.


----------



## Gast2 (3. Jun 2012)

Warrior7777 hat gesagt.:


> Ich habe einfach festgestellt, dass fast alle deutschen Bücher über Spieleprogrammierung für C++/Objective C geschrieben sind.


Es ist egal welche Sprache da verwendet wird. Extrahiere da einfach die Grundlagen wie es vom Prinzip her funktioniert, danach ist es einfach das in andere Sprachen um zusetzen. Hier für 3D interessant - sogar in mehreren Sprachen NeHe Productions - Everything OpenGL



> Wegen der Sache mit der Hardware: Ich hab keine Ahnung, wie elektrische Impulse in "Programme"/Binärcode/Information umgewandelt werden, finde dieses Gebiet aber sehr interessant.


Ich habe da auch keine Ahnung, hatte es aber kurz im Studium. Im Moment setze ich dafür Hardware von anderen ein (Quancom, Advantech, ...)



> Ich fände es auch sehr lustig, z. B. eine eigene Fernbedienung zu bauen. Ich weiss, dass das natürlich sehr schwierig ist und dass man viel Ahnung über Hardwarebau dafür braucht. Was mich zur nächsten Frage treibt: Kennt jemand ein gutes Buch dazu? Ich finde dieses Gebiet der Informatik sehr spannend... Hab leider keine Ahnung, wie man anfängt, sich in so etwas einzulesen/ -arbeiten.


Da ist das Java-Forum eher ungünstig gewählt, auch wenn es welche gibt die Ahnung davon haben und hier rumschwirren. Da musst Du eher in entsprechendere Foren wechseln (z.B. News - Mikrocontroller.net). Dort wirst Du auch eher mit C bzw. Assembler konfrontiert als mit Java.



Network hat gesagt.:


> Wer schaut den bitteschön auf den Quelltext und sagt "Oh schau mal Header-Dateien!"?


Öhm ich (bin nicht der Einzige), weil es wichtig ist zur Lösung der Aufgabe.




> Und hilft einem überhaupt nicht bei den verschiedenen Speicherarten (Heap bsp.) weiter.


Was ist an der Grundregel so schwer zu verstehen ???:L "Was Du holst, das gibst Du wieder frei". Da ist noch nicht mal von Stack oder Heap die Rede.



> Überhaupt sich darum kümmern zu müssen, ist doch das "schlimme" wenn man von Java (wieder) auf C wechselt.


den Link mit Dispose hatte ich ja schon gepostet - musst Dich also auch in Java um diverse Dinge kümmern (die es offiziell nicht gibt)



> Extra Arbeit ist immer negativ und lästig, besonderst wenn man sie vorher nicht machen musste.


mach es gleich Richtig, dann must Du es später nicht nachbessern


----------



## schlingel (3. Jun 2012)

char* in C#?

Würdest du mir bitte ein Stückchen von dem Code posten? Ich weiß das es netduino gibt, aber dort verwendet man auch Strings. 

Prinzipiell glaube ich, dass du gerade C++ und C# verwechelst, denn C# ist - genau wie Java - ein System das auf einer VM aufbaut. Heißt halt CLR und nicht JavaVM.



> Was ist an der Grundregel so schwer zu verstehen  "Was Du holst, das gibst Du wieder frei". Da ist noch nicht mal von Stack oder Heap die Rede.


Naja, da hängt dann aber doch viel daran. Warum kann ich keine Pointer auf Variablen in Funktionen verwenden? Eh "logisch", weil lokale Variablen auf dem Stack liegen und mit dem Stack-Frame nach dem Aufruf abgebaut werden. Warum funktioniert das mit den Daten die am Heap liegen? Naja, weil das ein anderer Speicherbereich ist. Warum funktioniert die Funktion wenn ich ihr einen Pointer übergebe und sie mit Pointer-Parameter definiere aber nicht wenn ich sie mit Referenztyp definiere? Aso, weil der Compiler automatisch Referenztypen dereferenziert. Die übergebene Pointer-Variable kann ich zurückgeben, aha? Eh logisch, es wird die Adresse kopiert und der Ursprung der Adresse lag zwar auf dem Stack aber sie zeigt auf den Heap.

Lauter kleine "logische" Fakten sind schon viel auf einmal für einen Anfänger. So simpel die Grundregel auch ist, es hängt sehr viel Wissen daran und Stack und Heap gehören da nun einmal dazu.

Edit:/
Arduino kann ich nur sekundieren. Das ist eine einfache Plattform die genau für so etwas gedacht ist: Leute mit wenig HW-Ahnung dazu zu bekommen coole Dinge zu bauen und entwickeln.


----------



## Warrior7777 (3. Jun 2012)

Ok danke für die guten Antworten!  Lassen wir jetzt bitte die Diskussion über C#...
Danke für den Tipp mit Arduino, aber mir wäre es lieber, wenn ich auch wirklich verstehe, wie die Hardware funktioniert und das ganze "richtig" programmieren könnte. Kennt jemand ein gutes (deutsches) Buch zu diesem Thema?
Ich habe bereits vor ein paar Wochen begonnen, ein Spiel zu programmieren. Dort komm ich aber ohne Buch (also größtenteils mit eigenen Ideen) nicht allzu weit. Ich hab dazu auch schon einen Thread eröffnet, ich stell den Link später noch hier rein. Deswegen wollte ich mir ein Buch kaufen. Ich bin mir bewusst, dass ich wahrscheinlich die beiden schwierigsten Themen der Informatik ausgesucht habe, aber das interessiert mich einfach sehr!  Nochmals danke für Euer Interesse und Eure tollen Antworten!


----------



## bgfn (9. Jun 2012)

schlingel hat gesagt.:


> Prinzipiell glaube ich, dass du gerade C++ und C# verwechelst



Und du C mit C++. In C++ werden auch keine char-Arrays verwendet, sondern std::string


----------



## tuxedo (20. Jun 2012)

@Warrior7777

Mein wichtigster und aufrichtig ernst gemeinter Tipp in dieser Diskussion: Lerne erst englisch... Viele gute Bücher gibt's nur in englisch. Viele Dokus und Tutorials gibt's nur ein englisch. Software-Entwicklung ist in den allermeisten Fällen eine internationale Sache. Und da spricht man natürlich Englisch. Ohne wirst du nicht allzuweit kommen.


----------

