Ich will C++ DirectX 2D lernen (mit Visual Studio 2012 Express).
Gibts da eine gute kostenlose PDF-Datei zum lesen?
Wenn nicht dann ein E-Book oder normales Buch(Wenn es geht kein normales Buch).
Kann mir da jemand helfen?
Ich will C++ DirectX 2D lernen
-
-
-
Auch wenn dieses Thema Steinalt ist. Die Problematik bleibt.
Entweder du kannst es, lernst es selbst, oder lässt es.
Meine Erfahrung ist, Millionen Leute können C, C++, VisualC, oder sonstwas, zeigens dir aber nicht...
Es gibt im Prinzip niemanden, der einem zumindestens die Grundlagen beibringen kann, dich Blutlecken zu lassen...
Ich bediene mich dann und wann an ss64.com -
Deacon: Welche Vorkenntnisse besitzt du? Batch? QBasic?
-
Eigentlich gehts dabei nicht um mich.
Ich schnippsel mir höchstens paar Sachen in Batch für mich zusammen. Für mich ist Batch sehr mächtig, grad auch, weil es sich nicht auf seine eigenen "Fähigkeiten" besinnt sondern das man eben auch andere Apps aufrufen kann.
Ich würd schon gern alle möglichen Grundlagen lernen.
Grad hab ich erklärt bekommen, warum C++ immer ein ; am Ende der Zeile haben muss.
Ich find diese ; sehr, entschuldige, "dämlich", weil du angestrengt ne Zeile schusterst, über 7 Ecken denken musst, und dann läufts nicht, weil das ; fehlt... nun hat man mir das aber mal erklärt... -
Was wo stehen muss, hängt von der Syntax der Sprache ab - als quasi von der "Grammatik", "Satz" und "Wortbau".
Es gibt von der Syntax komplett unterschiedlich aufgebaute Sprachen - objektorientierte Sprachen und nicht objektorientierte Sprachen. Beide Sprachrichtungen brauchen ganz unterschiedliche Denkansätze, um sie zu verstehen und damit effektiv arbeiten zu können.
Wenn du keine Grundlagen über objektorientierte Sprachen gelernt hast - zum Beispiel durch ein Studium - halte ich C für den Anfang, um ins Programmieren einzusteigen, für komplett daneben. Das wirst du nie verstehen.
Ich würde den Anfang mit Basic Dialekten machen, die nicht objektorientiert sind - wie gesagt, es sei denn, man hat Vorerfahrungen in objektorientiertem Programmieren. Du wirst in deinem Leben sowieso recht wenig Treiber programmieren und meisten auch keine Systemanwendungen für andere Systeme als für Windows schreiben. Warum also C?Fängst du mit einem anderen Dialekt an, der für dich besser verständlich ist, kannst du auch alles andere beim Programmieren besser verstehen. Und vielleicht besser verstehen, als jemand, der ein Studium hinter sich hat und mit C++ arbeitet.
-
Die Logik dahinter wird von mir in Batch, z.B., besser gelöst, als von den "alten", weil diese zu spezifisch denken.
Platzhalter statt absolute, z.B.
Mir hat man mal gesagt, eine Zeitsteuerung wäre seeehr schwer in Batch.
Ich habe so etwas in 20 Zeilen gelöst, mit der Umgehung von einstelligen Zahlen, und der umgehung der Oktalzahlerkennung.
Das Programmieren als solches ist eher pipifax. Objektorientiert, wo du es grade ansprichst, ist in meinen Augen nichts anderes, als Programmfunktionen aus Programmfunktionen zu erstellen. Klassen erstellen, die aus mehreren anderen bestehen.
Falls dem nicht so ist. Was wäre so schwer daran, jemanden in normalen und kurzen Sätzen zu sagen, was sich der Inventor der Objektorientierung dabei gedacht hatte, was seine Problemstellung war, und wie dieses eben dadurch gelöst wurde.
Ich persönlich sehe keine Schwierigkeit darin, es mir begreiflich zu machen.... -
Nochmals zum Verstehen...
Du hast dir vorher einen Beitrag mit einer EXE von mir angesehen - im Programmierbereich. Da habe ich was getan, was eigentlich gar nicht geht.
Da für fängt für mich das Verständis an, über das ich oben gesprochen habe. Da nämlich, wo man dazu in der Lage ist, nicht nur mit der Sprache sondern auch mit dem Betriebssystem zu spielen. Hat man die Sprache verstanden, hat man das Betriebssystem verstanden - und man ist dann dazu in der Lage, ziemlich verrückte Sachen zu tun. Was an verrückten Sachen möglich ist, sieht man dann manchmal schon beim Anschauen von Sachen und anschließendem Nachdenken.
Hat man sein Handwerkszeug nicht verstanden, wird daraus nichts. -
Objektorientiert, wo du es grade ansprichst, ist in meinen Augen nichts anderes, als Programmfunktionen aus Programmfunktionen zu erstellen.
Programmierung ist insgesammt nichts anderes als das, was du da beschreibst.
Die Denkweise ist beim objektorientierten Programmieren aber anders. Jemand, der nicht objektorientiert programmiert, denkt in Speicherbereichen und Pointern und nicht in Objekten, Methoden und Klassen. -
Ich persönlich sehe keine Schwierigkeit darin, es mir begreiflich zu machen....
Um so besser. das hörte sich erst anders an. Dann würde ich bei objektorientierten Sprachen bleiben - Java könnte für dich später interessant werden (Adroid). Da wirst du dich nicht großartig umstellen müssen.
Wie sieht es mit API Programmierung aus? Da schon C irgendwo eingearbeitet?
Ich habe im Augenblick an C noch kein großes Interesse. Das kann sich aber durchaus noch ändern. Dann habe ich wenigsten jemanden, den ich was fragen kann.Noch Vorkenntnissen habe ich wegen der Denkweise gefragt. Hängt man schon in einer nicht objektorientierten Denkweise drinn, wäre es ein Rückschritt da zu wechseln, bevor man eine nicht objektorientierte Sprache richtig kann.
-
altes 8bit assembler hab ich mal ziemlich gut gekonnt und batch kann ich mittlerweile schon ganz gut verstehen...
-
Wie gesagt - liegt dir objektorientiertes Programmieren von der Denkweise her, ist das kein Problem. Liegen dagegen schon Kenntnisse in nicht objektorientierten Sprachen vor, würde ich erst mal die richtig lernen. Man fängt sonst wieder von vorne an. Auch andersherum würde ich nicht wechseln.
Ich persönlich würde zum Beispiel niemals schwierige Sachen in C schreiben, weil ich seit 30 Jahren anders Denke, nicht objektorientiert.
Von der Syntax her ist es in der Regel einfacher, mit einem nicht objektorientierten Basicdialekt anzufangen. Das machen auch die meisten so - zumindesten die ohne Studium (oder sonstige Vorbildung im objektorientierten Bereich) und die etwas ältere Generation. Man muss sich nur wenig mit der Syntax rumschlagen (solche Sachen wie mit dem Semikolon fallen weg) und innerhalb von 10 Jahren kann man die in der Regel richtig.
Kann man eine Sprache richtig, kann man jede andere Sprache zumindestens erst mal lesen. Von da kann man dann weiter. -
Ohne das ich jetzt diesen Thread entführen will, ist hier im Forum oder von Ausserhalb irgendjemand da, der solche Grundlegenden Fragen beantworten will?
Wie gesagt, meistens hab ich bei "alten Codern" das Gefühl, das man mit Panzern und Kanonen auf Spatzen schiesst, bzw. schiessen will.
Ich bin von meiner Denke her in etwa so, ich hab ganz gern Bedingung zu Bedingung, also:
If dies == true do
( if das == true
( do jenes ++1)
)
)
Also: Wenn heute "Sonntag" ist, und heute die "Sonne" scheint, dann gehe Rasenmähen.Viele Programmierer schreiben in etwa so:
Wenn heute "Sonntag" ist, dann hole den Rasenmäher.
Prüfe, ob Rasenmäher vorhanden ist
Prüfe Rasenmäher auf Funktion
Prüfe Rasen auf mähbare höhe
Prüfe auch deine persönliche Einsatzfähigkeit
Wenn heute "Sonne" scheint, dann mähe den Rasen.Also oftmals wird mehr ausgefragt, abgefragt und sinnloserweise geschreibselt.
Ich muss, grad bei Batch, gar nicht so viele Variablen erzeugen und abfragen, wie ich benötige. Im Beispiel brauche ich nur 3. Sonne, Wochenende, Rasenmäher. Weil ich davon ausgehe, "WENN ich einen Rasenmäher habe, DANN muss der auch funktionieren... (sonst hätte ich keinen, wenn auch manchmal temporär keinen) -
So sinnlos ist das gar nicht. Wenn Rasenmäher nicht vorhanden, oder Rasenmäher kaputt, dann nachfolgende Schritte sinnlos. Das Programm würde möglicherweise einfach abstürzen. Also abfragen und Alternative "Mähen mit Sense" im Programm einbauen.
Oder um etwas konkreter zu werden, mit einer Division durch 0 kriegst Du jeden Rechner, wenn die verwendete Mathebibliothek nicht vor jeder Berechnung prüft und eine entsprechende Fehlerbehandlung vorhält. Bei Batch ist das noch recht überschaubar. Die hält einfach an (entsprechende Fehlerabfragen sind intern enthalten). Aber wie würdest Du Dich freuen, wenn Dein Office bei einer simplen Fehleingabe jedesmal abstürzt, weil da der Programmier eine Abfrage für übertrieben hielt und weg gelassen hat.Gruß Volkmar
-
Es ist insofern sinnfrei, wenn die Dinge nichts mit dem Programm zu tun haben. Ich gehe davon aus, das, wenn ich Rasenmähen auf der Wochenend-Agenda habe, das ich a) einen Rasen habe, und b) einen Rasenmäher habe. Sollte jemand in Betondschungel auf solche Ideen kommen, so wäre die Aufgabe "Rasenmähen am Wochenende" durch das Programm relativ schnell erledigt.
Ich habe z.B. ein Batch gemacht, das Inhalte von Zip-Dateien ergänzt.
Die Eingabe ist, "alte Zips", "neue Zips", "neue Inhalte" (alte=bestehende Dateien, neue= wohin neu komprimieren, neue inhalte=selbsterklärend)
Ich frage dann nicht, sind da zips? sind da Dateien? sind die "alten" womöglich neuer als die neuen? Das Programm fragt auch nicht nach, ob Dateien überschrieben werden sollen
Ich will dann auch nicht wissen, ob genug Speicher da ist, ich will dann auch nicht wissen, ob die alten Dateinamen verändert werden sollen, oder wie ich das zählen soll.
Ganz simpel:
Nimm a.zip, entpacke es nach x:\alte zips, nimm b.zip, entpacke es danach nach x:\alte zips, solange bis alle zips weg sind. gehe zu x:\alte zips und packe alles nach y:\neue zips ein.
Ich frage noch ab, obs den erstellerpfad und den quellpfad gibt, und dann ab.
Da muss ich nichts über die Zips wissen, deren inhalt grösse farbe oder geschmack. auspacken, auspacken, einpacken, und womöglich anbieten alte löschen, neue einfügen, ordner öffnen ("explorer.exe y:\neue zips"), wenn alles fertig.
EDIT:
jede dieser zusätzlichen Aufgaben (alte löschen, neue einfügen) sind einzeiler mit weniger als 30 zeichen. Ich habe auf Anfragen Batches bekommen, die Seitenlang sind. Ich habe mir daraus Ideen entnommen, und liege bei statt 150 Zeilen, bei 15. Und es funktioniert genauso....
Programme haben für mich nicht die Funktion, Eierlegende Wollmilchsau.... Programme sind bei mir alle nur für den einen, den einzigen alleinigen Zweck da.
Um zu deinem Dokument zu kommen, ich hätte gern eines, das dieses Dokument schreibt, ein anderes, das es per Email versendet, und ein drittes, das es mir ausdruckt.
Ich habe Programme, die brennen nur Audio-CDs, weil sie nichts anderes können. Ich habe Programme, die räumen die Festplatte auf... nur das, mehr können sie nicht. Ich habe Programme, die nur Dateien umbenennen. Mehr können die nicht, nichts verschieben, kopieren, löschen. Nur Name ändern, fertig.
Von daher auch mein Gedanke, man braucht eigentlich keine Wenn Regen, nicht Rasenmähen, Wenn Mittwoch, nicht Rasenmähen. Wenn Benzin alle, Rasenmähen auch nicht möglich. Ich zieh das Gedankenpferd von der anderen Seite auf. Ich gehe davon aus, das ich Sonntag Rasenmähe, und nicht, "welchen Tag haben wir heute, und können wir heute Rasenmähen?", ich frage nicht: "Lass uns Rasenmähen!! Welcher Tag ist heute?? Regnet es??", sondern ich frage: "Ist heute schönes Wetter und ist heute Sonntag??". Alles andere wäre dann spekulation. Man muss ja davon ausgehen, das der PC blind ist, und nicht sieht, was da los ist. Also so wenig irritierende Informationen wie möglich: Sonntag?? JA. Regen?? NEIN! == Rasenmähen. -
Du weißt, ob Du einen Rasen und den Rasenmäher hast. Aber der Rechner nicht. So lange Du nur für den Eigengebrauch was schreibst, ist das auch OK. Wenn die Bedingungen nicht zutreffen, startet Du das Programm nicht. Aber nun schreibe mal ein Programm für Andere. Simples Beispiel einer "vergessenen" Abfrage aus meinem eigenen Schaffen:
Eine Datenbankanwendung für Win3.1 lief bei mir wunderbar. Der User, der die haben wollte, stellte fest, das Ding stürzt konsequent ab, es geht einfach nicht. Des Rätsels Lösung: Ich wußte, daß die Datenbankengine ein vollständiges und gültiges Datum als Eingabe braucht. Der User gab aber 12.4.91 ein. Für die Datenbankengine ist das kein gültiges Datum. Es ist Sache des Programmierers, die Eingabe zu prüfen und entweder zum Jahr 1900 zuaddieren oder eine Fehlermeldung zu setzen. Also Fazit, so lange ich das Programm nutze, geht es auch einfach. Soll das Programm aber wirklich überall und bei Jedem funktionieren, muß ich alle Eventualitäten berücksichtigen.Gruß Volkmar
-
Ich verstehe dein Problem im Augenblick noch nicht.
Sind dir Codes zu kompliziert, die du im Netz findest, weil die noch allen möglichen anderen Scheiß machen?
Sind dir Codes zu kompliziert, die dir jemand als Beispielcodes postet?
Verstehst du den Sinn von Fehlerbehandlungen nicht? (Das hat Volkmar schon recht gut erklärt.)Vielleicht kannst du das noch mal klären. Wir reden sonst aneinander vorbei.
-
Ja, ergibt einen Sinn.
Deshalb habe ich ja z.B. in meiner Zeitsteurung folgendes:Code
Alles anzeigenif "%zeit:~1,1%"==":" set zeit=0%zeit:~0,8% set ho="%zeit:~0,2%" if "%zeit:~0,2%"=="08" set /a ho=8 if "%zeit:~0,2%"=="09" set /a ho=9 set mo=%zeit:~3,2% if "%zeit:~3,2%"=="08" set /a mo=8 if "%zeit:~3,2%"=="09" set /a mo=9 set ha=%time:~0,2% if "%ha:~0,1%"==" " set ha=0%ha:~1,1% if "%ha%"=="08" set /a "ha=8" if "%ha%"=="09" set /a "ha=9" set ma=%time:~3,2% if "%ma%"=="08" set /a "ma=8" if "%ma%"=="09" set /a "ma=9"
Denn es ist relativ mühsam, 8 Uhr morgens abzufragen, wenn man um 11 Uhr vormittags auch abfragen kann.
denn 8 ist eine Stelle, 11 sind zwei.
Interessant ist dabei halt die Funktion "time", die man dann von 0 bis 8 stellen zählen lassen kann. sie setzt dabei die ":" zwischen die Einheiten. Für mich gefundenes Fressen. einfach auf ":" abfragen, ne führende Null vorsetzen. beim berechnen, führende null vorhanden?? Falls ja, die folgende Zahl eine 8 oder 9 ?? Falls ja, dann führende Null zum Rechnen rausnehmen, so wie ich die vorher eingesetzt habe, nehm ich die wieder raus... (warum?? weil Batch dann denkt, es wäre eine Oktalzahl, was so ähnlich ist wie zusammgerechnetes Binärsystem) -
Ich verstehe dein Problem im Augenblick noch nicht.
Sind dir Codes zu kompliziert, die du im Netz findest, weil die noch allen möglichen anderen Scheiß machen?
Sind dir Codes zu kompliziert, die dir jemand als Beispielcodes postet?
Verstehst du den Sinn von Fehlerbehandlungen nicht? (Das hat Volkmar schon recht gut erklärt.)Vielleicht kannst du das noch mal klären. Wir reden sonst aneinander vorbei.
1. Nein, zu kompliziert prinzipiell nicht. Was man im Netz findet, wird leider nicht dokumentiert. Ich bin leider so, ich frage dich direkt, warum du %%a schreibst. warum schreibst du heute "%%a" und morgen "%a%", warum du == schreibst und nicht =. Ich weiss, das du das nicht weisst, warum. Du weisst, das es so sein muss, du weisst aber nicht, warum, und was wäre, wenn oder wenn nicht. So jedenfalls die meisten Leute... oder sie schütteln den Kopf, weil sie kaum glauben können, das man das doch nicht weiss.
Das Problem, das es nicht oder nicht simple erklärt wird, war ja auch mein erstes Posting in diesem Thread.2. Die Codes machen 75% mehr, als ich für mich brauche. Wenn ich beispielsweise jemaden habe, der einmal die Woche einen Workfolder gesichert haben will, dann schaue ich mir "robocopy /?" an. Wenn der dann noch will, das die 10 jüngsten Einträge erhalten bleiben sollen, dann schaue ich mir "dir /?" an. Ich muss nicht wissen, ist ein Folder da, ist der Rechner an, sind da Daten drin (grade hier ist eine Abfrage vollkommen Sinnfrei, denn ich nehme ja die 11. und alles ältere aus dem Ordner heraus). Ist der Folder da, nutze ihn. Ist er nicht da, erstelle ihn. Will der User selbst bestimmen, wo der Ordner sein soll, zeige ihm die Stelle im Code oder schreibe set /p "Dein Arbeitsorder??"
Fehlerbehandlungen erkenne ich wohl an. Das ist Sinnvoll, und um alle dem Umstand auftretenden Eventualitäten gerecht zu werden, sollte man auch an vieles denken. Das stimmt.
zusätzlich zu dem oberen Code, hab ich dieses:
CodeSet /a "Laufstund=%ha%-%ho%" Set /a "Laufminute=%ma%-%mo%" Set /a "Laufzeitmin=%Laufstund%*60+%Laufminute%" Set /a "Laufzeitsec=%Laufzeitmin%*60"
Dieses hier, von mir übrigens, stellt fest, wie lange der Rechner schon läuft, und schaltet dann irgendwann ab. Es schreibt dann beim Abschalten eine Datei mit den Restsekunden.
herauszufinden, wieviele Restliche Stunden, Minuten und Sekunden der Rechner laufen darf, hatte mir jemand auf mehr als 80 Zeilen vorgestellt. Ich habs hier in 19 Zeilen, inklusive Fehlerabfang (Oktalzahl).Es geht bei meinem Code darum, wie lange ein Rechner am Tag laufen darf, nicht, wann er angeschaltet wurde. Dabei wurde ein Limit von 2 Stunden pro Tag bemessen. Leider kennt shutdown /s /t nur Sekunden, also Jetzige Zeit (=time, date) aufschreiben, shutdown /t 7200. Sollte der Rechner früher runtergefahren werden, Jetzige Zeit minus Startzeit zu sekunden rechnen, Datei reinschreiben, beim nächsten Start Tag prüfen (jeder Tag neue 2 Stunden), sonst eingeschrieben restzeit = shutdown /t %restzeit%
Das jemand sowas in 150 Zeilen machen will ohne Kommentierung, ist halt das, was ich nicht nachvollziehen will.
Letztlich wäre es Sinnvoll, nur wirklich das als Code zu schreiben, das wirklich nur das, was man will macht.("Robocopy "C:\meine Daten\" "D:\Meine neuen Dateien\" /E /COPYALL)
Fertig ist die Laube... Kopiert von C nach D mit Unterverzeichnissen und allen Dateiinformationen. -
OK - jetzt habe ich dich verstanden.
Das liegt unter anderem an der Programmiersprache, die du dir da ausgesucht hast.
Die meisten lernen das im Bereich des Studiums. Die haben also ganz am Anfang erst mal die Syntax durchgekaut bis zum Gehtnichtmehr.
Kommst du da auch noch mit irgendwelchen Sachen, die vielleicht etwas komplizierter durchzuführen sind, hast dich aber noch gar nicht richtig mit der Sprache beschäftigt, bekommen die natürlich das große Kopfschütteln - denn in der Regel sind solche Fragenden Leute, die niemals eigenen Code auf die Reihe bekommen und sich am Ende alles von anderen schreiben lassen.Du bist meiner Meinung nach gleich am Anfang falsch angefangen. Ohne Vorbildung im objektorientierten Bereich und Programmierung überhaupt, mit Kenntnissen in ASM und guten Kenntnissen in Batch wäre für dich ein nicht objektorientierter Basicdialekt besser geeignet gewesen.
Mal ein Beispiel in der Sprache, mit der Volmar und ich richtig eingestiegen sind:
Mit dem Code oben hast du ein komplettes Windowsprogramm erstellt. Das Fenster lässt sich verschieben, verkleinern, vergrößern und schließen und es reagiert auf Messages.
Mach das mal mit C.Bevor man irgendetwas lernt, muss man also erst mal schauen, was man kann und was man überhaupt möchte.
Was möchtest du überhaupt? Es gibt da vielleicht einen viel effektiveren und einfacheren Weg, als den, den du da zur Zeit gehst. Weit scheint du mit C auch noch nicht zu sein. Richtig? -
Um noch mal bei Zeitsteuerung zu bleiben:
Mit fiolgendem Code hast du ein komplettes Programm mit Zeitsteuerung:Code
Alles anzeigenDeclare CheckBox%, TimeControl%, FORMAT$, HerunterfahrZeit$, AktuelleZeit$ Windowstyle 31 WindowTitle "ShutDown" Window 0,0 - 440, 140 TimeControl% = Create("TimeEdit", %HWND, "15:00" , 10, 10, 60, 30) FORMAT$="HH:mm" SENDMESSAGE(TimeControl%,$1000+5, 0, addr(Format$)) CheckBox% = Create("CheckBox", %HWND, "Rechner herunterfahren", 10, 60, 200, 30) While 1 Sleep 10 If GetCheck(CheckBox%) HerunterfahrZeit$ = GetText$(TimeControl%) HerunterfahrZeit$ = Translate$(HerunterfahrZeit$, ":", "") AktuelleZeit$ = Time$(0) AktuelleZeit$ = Translate$(AktuelleZeit$, ":", "") If AktuelleZeit$ = HerunterfahrZeit$ ExitWindows 4 endif endif EndWhile
Das Ding benötigt natürlich Adminrechte. Es fährt den Rechner zeitgesteuert herunter.
Hier ein Bild (wie gesagt, das ist der komplette Code dazu):
[Blockierte Grafik: http://www.fotos-hochladen.net/uploads/test18ioulmtvr2.jpg]Versuche das mal mit C...
Und versuche mal, durch den Code durchzusteigen, der dafür in C nötig wäre.Wie gesagt - du machst dir manche Sache vielleicht etwas zu schwer und wirst am Ende aufgeben oder nicht so weit kommen, wie du auf einem anderen Weg gekommen wärst.
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!