Projekt Idee gesucht [momentan: 3D 4-Gewinnt]
-
Hi!
Weil mir jetzt wieder langweilig ist...Ich suche ein einfach zu realisierendes Projekt. Nur für mich, kann gerne größer sein, muss aber durch einen Mann erstellbar sein.
(Bis ich mir meinen Roboter gekauft und gelötet habe und ihm verfallen bin (und selbst dann habe ich noch viel zu viel Zeit) )
Ich habe also viel Zeit dafür. Sollte aber etwas simples sein, sodass ich es professioneller lösen kann. Es soll also schon etwas anspruchsvolles werden.
Projekt-Ideen Vorschläge
Bereiche:
- Desktop-Anwendung
- 2/3-D Spiel
Komplexität:
- Nicht zu kompliziert. Sollte etwas simples sein.
- Es geht darum, ernsthafte Software zu entwickeln. Soll also nicht 100% fun sein, sondern die Software muss auch einen Usability-Prozentsatz beinhalten.
- Nein, wenn ihr mir Spiele vorschlagt dann werden Sie ordentlich mit einer 2/3-D- und Sound-Engine gemacht, und nicht in der Konsole (mit Sounds ala
Beep()
oder der '\a'-Escape-Sequenz ).
Plattformunabhängige Software
Ich kann bisher nur für Windows entwickeln. Schön wäre es, wenn ich demnächst entweder auf Ubuntu etwas kompilieren könnte (dürfte gehen), leider ist das wahrscheinlich nur für (Qt's)Desktopanwendungen möglich (da Ogre zum Teil auf DirectX aufbaut und bestimmte, evt. öfter benutzte GrafikFX nur unter Direct3D verfügbar sind (von ganz banalen sachen wie den Theta-Winkel eines Spotlights bis zum erstellen eines Renderwindows (gut, das ist vielleicht nicht sehr kompliziert zu ändern, aber Code müsste umgeschrieben werden und das will ich möglichst vermeiden)).
Bitte Vorschläge
-
Ich merk gerade, ich widerspreche mir selbst.
Mit "groß" meine ich, es kann gerne vielseitig (viele Optionen, usw.) werden; aber simpel bedeutet, es darf an sich nichts komplexes sein (wie eine Raytracer-Engine oder so).
-
Ein Raytracer ist "an sich" überhaupt nicht komplex. Die einfachste Ausführung besteht im Prinzip aus einer Funktion die nen Schnittpunkt Gerade/Dreieck berechnen kann, und einer weiteren für die Helligkeitsberechnung (anhand von Punkt, Normale, Richtung zur Kamera und Position der Lichtquelle).
Dafür kann man massiv viel Zeit und Aufwand in "Quality of Implementation" stecken, z.B. diverse Optimierungen & Features.
Also mein Vorschlag: schreib nen Raytracer
2. Vorschlag (weil ich mir die Tage gerade mal sowas gewünscht hätte): ein "Smart-Standby" Programm.
Heisst ich will meine Standby-Einstellung nicht umstellen (=Standby deaktivieren), wenn den PC mal irgendwas machen lasse was länger dauert. Weil ich dann nämlich immer vergesse zurückzustellen wenn die länger dauernde Sache fertig ist.
OK, manche Programme verhindern den Standby von sich aus so lange sie was sinnvolles machen, aber andere nicht. HDD formatieren unter Windows 7 z.B. verhindert den Standby nicht. Viele ältere Anwendungen machen es auch nicht.In so einem Fall will ich das "Smart Standby" Programm starten, und das soll dann einfach gucken ob der PC gerade irgendwas tut was so aussieht als könnte es sinnvoll sein. D.h. das Programm sollte die CPU Auslastung überwachen, und wenn z.B. Auslastung >= 1/4 Core dann soll der Standby temporär verhindert werden. Genau so gehören dann IO Counter überwacht, also z.B. während eine Festplatte über einen bestimmten Zeitraum mehr als 1/4 der Zeit beschäftigt ist ebenso standby verhindern.
Ggf. auch noch weitere Dinge, kommt drauf an was sich halt leicht und "non-intrusive" überwachen lässt.
Und für Dinge die sich nicht über diverse Performance-Counter/... feststellen lassen einfach einen Timer, d.h. man sollte einstellen können "kein Standby für die nächsten N Minuten/Stunden". Und das soll dann genau 1x gelten bis der Timer abgelaufen ist.
Das ganze natürlich ohne dass dabei zwischenzeitlich die Standby-Einstellungen umprogrammiert werden.
Das ist grundsätzlich auch recht simpel, kann man aber auch viel Zeit investieren um es "ordentlich" zu machen.
-
hustbaer schrieb:
2. Vorschlag (weil ich mir die Tage gerade mal sowas gewünscht hätte): ein "Smart-Standby" Programm.
Heisst ich will meine Standby-Einstellung nicht umstellen (=Standby deaktivieren), wenn den PC mal irgendwas machen lasse was länger dauert. Weil ich dann nämlich immer vergesse zurückzustellen wenn die länger dauernde Sache fertig ist.
OK, manche Programme verhindern den Standby von sich aus so lange sie was sinnvolles machen, aber andere nicht. HDD formatieren unter Windows 7 z.B. verhindert den Standby nicht. Viele ältere Anwendungen machen es auch nicht.In so einem Fall will ich das "Smart Standby" Programm starten, und das soll dann einfach gucken ob der PC gerade irgendwas tut was so aussieht als könnte es sinnvoll sein. D.h. das Programm sollte die CPU Auslastung überwachen, und wenn z.B. Auslastung >= 1/4 Core dann soll der Standby temporär verhindert werden. Genau so gehören dann IO Counter überwacht, also z.B. während eine Festplatte über einen bestimmten Zeitraum mehr als 1/4 der Zeit beschäftigt ist ebenso standby verhindern.
Ggf. auch noch weitere Dinge, kommt drauf an was sich halt leicht und "non-intrusive" überwachen lässt.
Und für Dinge die sich nicht über diverse Counter/... feststellen lassen einfach einen Counter, d.h. man sollte einstellen können "kein Standby für die nächsten N Minuten/Stunden". Und das soll dann genau 1x gelten bis der Timer abgelaufen ist.
Das ganze natürlich ohne dass dabei zwischenzeitlich die Standby-Einstellungen umprogrammiert werden.
Das ist grundsätzlich auch recht simpel, kann man aber auch viel Zeit investieren um es "ordentlich" zu machen.
Eigentlich eine schöne Idee. Nur: dafür braucht man die WinAPI, um Standby zu beherrschen.
Ich google mal die Funktionen, und schau mir an was geht. Dann konzipiere ich mal die GUI, wie das Programm intern arbeitet, welche Klassen usw.
Bitte weitere Vorschläge.
-
Also wie gesagt, Smart Standby ist recht schwierig. Ich denke, man muss da in die Registry eingreifen... mal sehen...
-
Die WinAPI wirst du dafür massiv brauchen. Standby Verhindern ist grundsätzlich ziemlich einfach, da gibt's eigenen Funktionen mittels derer man das dem OS mitteilen kann.
Dann müsste das Programm aber natürlich noch diverse Werte vom System ermitteln, eben wie stark die CPU gerade ausgelastet ist, wie viel IO in der letzten Zeit auf den Festplatten gemacht wurde etc. Und da wird man auch viel WinAPI dazu brauchen.
-
hustbaer schrieb:
Dann müsste das Programm aber natürlich noch diverse Werte vom System ermitteln, eben wie stark die CPU gerade ausgelastet ist, wie viel IO in der letzten Zeit auf den Festplatten gemacht wurde etc. Und da wird man auch viel WinAPI dazu brauchen.
Dafür gibt es SICHER Libs. Ich denke sogar, alles von dir genannte wird bereits von Qt abgedeckt.
-
-
-
Edit: THX, hat mich weiter gebracht
-
Anderer Vorschlag: (was ich mir immer mal gewünscht habe)
Ein 2D-Strategiespiel à la Warcraft 2, allerdings mit Schwerpunkt auf der KI. Mich hat es bei diesen Spielen immer gestört, dass die KI nur dumpf kleine Trupps zusammenstellt, um damit frontal anzugreifen.
Also eher eine KI, die abwägt, ob ein Großangriff erfolgreich sein kann oder ob man besser z.B. das eigene Lager schützt. KI, die z.B. Ressourcenwege gezielt attakiert usw.
Aber vielleicht ist das auch schon zu umfangreich.
-
Ich hätte übrigens das ein wenig intelligenter gemacht und dem Benutzer eine Liste anzeigt mit Prozessen die relevant sein können, wovon er die entschiedenen markiert.
Heuristiken:
- Programme, welche die Hardware belasten sind gerade gestartet (ggf. nur Elternknoten anzeigen)
- andernfalls Programm deutlich mehr verbrauch als durchschnitt (Statistik - Varianz)[ich weiß - ist schwammig formuliert] Man kann sich ja anzeigen lassen wie viel gerade verbraucht wurde und wie viel bislang verbraucht wurde.
- Wenn die markierten Programme alle beendet sind oder seitx
Sekunden nichts mehr tun, dann wird deaktiviere Smart Standby.
- ...
-
So würde schonmal ein GANZ GROBER ANFANG aussehen, was Smart Standby angeht (getestet):
#define _WIN32_WINNT 0x0502 #include <Windows.h> #include <iostream> #include <chrono> #include <conio.h> template< class Clock > class timer { typename Clock::time_point start; public: timer() : start( Clock::now() ) {} typename Clock::duration elapsed() const { return Clock::now() - start; } double seconds() const { return elapsed().count() * ((double)Clock::period::num / Clock::period::den); } double minutes() const { return seconds() / 60; } double hours() const { return seconds() / 3600; } }; int main() { size_t h, m, s; std::cout << "For how long shouldn't be the Computer go into standby-mode?\n" R"(Type in "hours [space] minutes [space] seconds [ENTER]")" << '\n'; std::cin >> h >> m >> s; h *= 3600; m *= 60; std::cout << "\nPress anykey to start.\n"; getch(); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10); std::cout << "Press anykey to abort.\n"; timer<std::chrono::steady_clock> t; while(t.seconds() <= (h + m + s) and !kbhit()) SetThreadExecutionState(ES_SYSTEM_REQUIRED); std::cout << "Done. The computer can now be set into standby mode by the system.\n"; system("pause"); }
Da das sowieso nur für Windows geht - kann ich auch alles Plattformspezifische verwenden. Aber geht gezeigtes auch auf Windows XP usw.? Ich kenn mich mit der WINAPI null aus...
Was das Warcraft-Remake angeht: spinnste? Das ist definitiv zu schwer. Ich will etwas eher kleines, das ich in ca. einem Monat oder so zur final Version bringen kann Ich bin doch nur ein wanna-be, soviel Möglichkeiten hab' ich nicht
Das mit dem Prozesse auswählen ist eine Idee, die ich auch schon hatte - nur da müsste ich mich RICHTIG intensiv mit der WinAPI auseinandersetzen, und das war eigentlich nicht mein Ziel.
-
Obwohl, wenn ich mir diesen Scheißdreck mal ansehe, frag ich mich ob das überhaupt noch jemand spielt
-
Ouh, geschafft! Ganz alleine :stolz: :stolz: :stolz:
Also, ich iteriere also durch die Prozesse:#define _WIN32_WINNT 0x0502 #include <windows.h> #include <TlHelp32.h> #include <iostream> int main() { PROCESSENTRY32 prE; prE.dwSize = sizeof (PROCESSENTRY32); auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if( Process32First(snapshot, &prE) ) std::cout << prE.szExeFile << '\n'; while( Process32Next(snapshot, &prE ) ) std::cout << prE.szExeFile << '\n'; }
Das pack ich in eine Funktion die einen Container mit den Namen zurückgibt.
Der User wählt einen Prozess aus; wenn der Prozess nicht mehr in der zurückgegebenen Liste (also nicht der Typ des Containers, neh ) ist, wird stand-smart-by (mein Name für die Software, falls ich das wirklich durchziehe) abgebrochen.
-
Sone schrieb:
Was das Warcraft-Remake angeht: spinnste? Das ist definitiv zu schwer. Ich will etwas eher kleines, das ich in ca. einem Monat oder so zur final Version bringen kann Ich bin doch nur ein wanna-be, soviel Möglichkeiten hab' ich nicht
ja sorry, dachte mir schon, dass das wohl etwas zu überdimensioniert ist. Warcraft 2 war nur ein Beispiel. Das lief noch unter DOS, hat zu seiner Zeit aber viel Spaß gemacht, vor allem per Nullmodem-Kabel gegen menschliche Mitspieler.
-
Sone schrieb:
Was das Warcraft-Remake angeht: spinnste? Das ist definitiv zu schwer. Ich will etwas eher kleines, das ich in ca. einem Monat oder so zur final Version bringen kann Ich bin doch nur ein wanna-be, soviel Möglichkeiten hab' ich nicht
ja sorry, dachte mir schon, dass das wohl etwas zu überdimensioniert ist. Warcraft 2 war nur ein Beispiel. Das lief noch unter DOS, hat zu seiner Zeit aber viel Spaß gemacht, vor allem per Nullmodem-Kabel gegen menschliche Mitspieler.
-
Mann, ich finde kein Tutorial zu SIGAR! Wobei es eigentlich das ist was ich für die CPU-Auslastung usw. brauche (habe keinen Weg in WinAPI gefunden).
Edit: Doch, es geht mit WinAPI. Brauche SIGAR nicht mehr.
-
Wenn du Probleme hast, kannst du dir vielleicht das Tool hier anschauen:
http://www.computerbase.de/forum/showthread.php?t=770730
Übrigens sollte es genau das machen, was hustbaer wollte.
-
FreakY<3Cpp schrieb:
Wenn du Probleme hast, kannst du dir vielleicht das Tool hier anschauen:
http://www.computerbase.de/forum/showthread.php?t=770730
Übrigens sollte es genau das machen, was hustbaer wollte.Ach Schreck! Was ich machen will gibt es schon!
Jetzt ist alles wieder offen, also nach wie vor Spiele und Desktop-Anwendungen kommen in Frage, bitte Vorschläge!