Ein paar fragen ;-)
-
So ich habe fertig :p
zumindest funktioniert es ansatzweise
daher hier mal nen link zum Sourcecode(für VisualStudio2003 )
http://skippy.uttx.net/downloads/OneMillion.rar
89,4kb mitamt der auführbaren exe dateiWenn jemand nen bissl Zeit währe es schön sich das ganze mal anzuschauen und verbesserungsvorschläge zu geben (wichtig ist auch habe ich fehlerbehandlung irgendwo vergessen?)
falls fragen zum optischen kommen geplant ist eigentlich ein bissl mit Fontgröße und Farbe rumzuspielen und nen Bitmap als hintegrund
weiterhin soll noch zusätzlich nen Endlosmodus und nen kleiner 4Personen Netzwerkmodus hineinkommen
-
öh... bring es erstmal dazu zu laufen... av...
aja... dein Stil ist... naja

Zum UI... jo mach ne Bmp als Bg... evt. halt auch Regions... also Skinning... dann solltest de aufpassen... musst dann die OnCtrlColor überschreiben... damit die Statics durchsichtig sind

-
@(D)Evil
also bei mir läufts(währe schön wenn de mir sagst was falsch läuft)
zum Stil ist halt das erste mal das ich ne Klasse geschireben habe is noch net so perfekt und so gut bin ich im Programmieren noch nicht.
Und weil ich weis das des noch net so perfekt läuft frage ich ja hier die "Profis".z.b.
SetNextQuizState() und DisplayNextQuestion()
muss ich nochmal überarbeiten
Weiterhin hab ich grad festgestellt das in LoadQuestions() ein fehler drin ist sollte keine datei vorhanden sein schmiert mein Programm ab
-
Sry. k lag wirklich daran das die Datei nicht da war

Soll ich dirs mal korrigieren?! Und verbessern?!

Aja was mal so direkt auffält... warum machst du den StringArray Public?!
-
Aja... evt. solltest du das mal ändern.. es würde sich warscheinlich eher empfehlen je Frage eine Strukt anzulegen... also in etwa:
struct Question__ { char cQuestion[256]; unsigned int nID; bool bUsed; }* HQUESTION;... Dann solltest du bUser beim laden auf false setzen und wenn die Frage dann gestellt wurde auf true... so das de verhinderst das Fragen doppel vorkommen...
Sonnst gib mal diene eMail Addresse dann schick ich dirs mal

-
Das mit dem StringArray war nen Ausrutscher da hab ich mist gebaut keine Ahnung was ich da vorhatte irgendwie dachte ich wohl das ich auch von aussen irgendwie drauf zugreifen wollte.
wird erstmal schnell behoben
zum fehler mit der Datei muss ich sagen ich hatte das aus nem Forum so übernommen dachte es funktioniert. Aber wie man sieht funktioierts doch nicht perfekt
-
So erstmal angemeldet
das mit dem struct werd ich mir nochmal anschauen.
ich wolts einfach so machen das ich jede beantwortete frage rauslösche und dann eben die Variable mit der anzahl der fragen um eins verringere.
wollte mir halt die zusätzlichen Variablen Sparen. hätte dann aber den Nachteil das ich für jedes neuen Quiz das ganze Array neuladen müssen.
Also ist ein Struct wohl die bessere Wahl
ich weiss auch das Char besser währe hatte aber String genommen damit ich keine begrenzung in der Länge der frage + antworten habe, nehme aber wohlwissend den größeren Speicherverbrauch im Ram in kauf.
jo email skipy@gmx.de
-
Hehe... so ist raus... hab dir kurz noch dazu geschrieben was de machen kannst um nen bissel das UI aufzubessern
Hubs... kannst die Membervariable CStringArray übrigends löschen 
-
Du solltest vieleicht bevor Du die Datei lädst mit GetModulHandle den Pfad zur exe ermitteln und von dort aus relativ deine Quizdatei laden, sonst wirst Du immer wieder mal Probleme bekommen. Achso und es fehlen eindeutig noch Buttons für die Antworten

Edit: Wenn sich jemand mal mein Freizeitprojekt anschauen will

http://p4.forumforfree.com/hier-klicken-vp170-curlingclub.html#170
-
@connan beides notiert

mit den buttons bin ich noch am überlegen erstmal sore ich dafür das man auch mit tasten 1-4 und a-d das ding bedienen kann.dann muss noch ein kleines Problem mit dem hintergrundbild beseitigt werden.
nachher bastle ich aber erstmal den 50/50Joker rein und nen §fehler modus wollt ich auch noch rein bekommen da such ich grad wie man das mit den Bitmap (zum darstellen des Kreuzez pro fehler am besten macht)
dein Projekt sieht gut aus auf jedenfall Optisch um längen besser als meins
-
mit dem Hintergrund hab ich dir ja geschrieben wie de das am einfachsten machst
das Kreuz... kommt drauf an wo de es hin haben willst... ich vermute mal so am oberen rand eines buttons? Dann einfach mit GetClientRect das rect von dem button holen und dann em ehesten einfach mit gdi ein image draufmalen 
-
@(D)Evil yep deine Methode hatte ich auch genommen nur wurde der text nicht gelöscht sondern immer nur "überschrieben" also einmal Invalidate(1); aufgerufen wenn man den text ändert und schon hat mans maleur jedesmal ein leichtes flickern.
und nee die 3 kreuze sollen einfach unten im Programm hinterlegt werden bin zwar noch am überlegen ob ich sie erst inaktiv darstelle(gegraut) und dann durch farbige ersetze oder ob ich sie "aus dem nichts " einblende
-
öhm wenn dann Invalidate(); nicht die 1 da rein ,)
-
So hab dat ding erstmal geupdatet
http://skippy.uttx.net/downloads/OneMillion.rar
nun 109kbHinzugefügt wurden:
-Bitmap als Hintergrund
-Farbige Buttons (habe die Klasse CRoundButton2 von Codeproject.com verwendet)
-Fifty Fifty Joker (funktion selbst sieht aber Bescheiden aus)
-erstmal nen vorläufiges Icon und LogoWas noch kommen soll:
-Noch ein paar Optische Spielereien mit den buttons
-Dialog für die Einstellungen
-Klasse für SplashScreen?
-Laden der Fragen in eignen Threat auslagern?
-3Unterschiedliche Schwierigkeitstufen für die Fragen? je ne eigene Datei
- möglichkeit endlich mit tastatur zu Spielen
sonst noch jemand ein paar Ideen auf Lager?
Eine frage hätte ich noch wie kann man zur Laufzeit des Programmes das Bild eines Picture Controls ändern? find das leider irgendwie nicht
-
PictureCtrl ?! Naja...
Referenzen
CStatic::SetBitmap
CWnd::Invalidateaja:
for(int i = 0; i<=8; ++i)...
for(unsigned int i = 0; i < 9; ++i)Weißt du auch warum ++i und nicht i++ ?! usw ?!

Ne public membervariable ist meistens auch sehr unsauber... also bsw dein CStatic m_Frage... wenn de da von außen drauf zugreifen willst... Getter.. Setter
Was soll dieses Denglish ?! bsw. IsAnswerKorrekt(...)
Hmm noch was... BOOL != bool !!! BOOL ist als int definiert.. d.h. verbraucht mehr byte!
-
so hab mal wieder nen kleines Problem
LRESULT CALLBACK COneMillionDlg::WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { switch(uMessage) { case WM_KEYDOWN: { switch(wParam) { case 'A': case '1': OnStnClickedAntwA(); break; case 'B': case '2': OnStnClickedAntwB(); break; case 'C': case '3': OnStnClickedAntwC(); break; case 'D': case '4': OnStnClickedAntwD(); break; }; return 0; } default: return CDialog::DefWindowProc(hWnd, uMessage, wParam, lParam); }; return 0; }warum bekomme ich folgenden fehler
: error C2660: 'CWnd::DefWindowProcA' : function does not take 4 arguments
und was ist falsch an der funktion
-
Boa warum sollte man dir was sagen wenn du es eh wieder nicht umsetzt?! Das ist ja abartig... du hast keinerlei Fehlerbehandlung wenn die Fragen Datei nicht existiert nix! arg -.- Man neeee
So das ist das letzte was ich dir noch helfe... deine Fragen sind so stupide.
Guckst du vllt auch mal in die MSDN Library?! CWnd::DefWindowProc
Arg jetzt denkt sich der kleine Bubal... ohh wie kann das denn?! Jo ganz einfach... CDialog ist von CWnd abgeleitet! UI! Und was stellen wir fest ... Wobei ich garnicht wissen will was das geben soll was du da fummelst.. -.-
[edit]Ahh jo jetzt weiß ich was das werden soll... CWnd::OnChar
CWnd::OnKeyDown
Wenn de jetzt noch überlegst was ich oben geschrieben hab... AHH... stimmt ja.. CDialog ist von CWnd abgeleitet! Boa goil da kann ich die Funktion ja überschreiben! WAHNSINN!!![/edit]
-
@(D)Evil
wollt mal schnelle deine Textchen beantworten(hoffe du hast heut bessere Laune)

for(int i = 0; i<=8; ++i)korrigiert
public membervariable CStatic m_Frage
korrigiert ist jetzt protected
Denglish
alte Angewohnheit da ich früher meisst nur Opensource Anwendungen angepasst habe hatte ich meisst meine variabeln u Funktionen in Deutsch angegeben um sie besser unterscheiden zu können. Wird also stück für stück mal nebenbei gefixt
BOOL != bool
habe das erstmal umgeändert bool true und false sind jetzt kleingeschrieben
aber ne frage hätte ich dazu was ist denn der genaue unterschied weil a selbst bei einem mit dem Assistenten erstellte anwendung schon BOOL verwendet wird anstatt bool. Und ich habe es zumindest so gelernt das bool true und false defines sind die den Code optisch besser lesbar machen sollen aber logisch keine veränderung im verhalten des Compiliers bewirken.
WndProc
zu dem Blödsinn sach ich mal am besten nichts hatte bei Google ei bissl rumgesucht aber halt nach WM_KEYDOWN ud fand halt nur lösungen über WndProc nach deinem Post und dem Stichpunkt
kann ich die Funktion ja überschreiben!
hab ich dann Spaßenshalber nochmal nach ON_WM_KEYDOWN
gegoogelt und siehe da man fand dann auch die richtige Lösung (dachte ich jedenfalls)
Stellte dann nach ratlosen rumsuchen und benutzen von Spy++ fest das ich in
meinem Schei.. Programm gar keine WM_KEYDOWN Messages bekomme sondern nur WM_SYSKEYDOWNBoa warum sollte man dir was sagen wenn du es eh wieder nicht umsetzt?! Das ist ja abartig... du hast keinerlei Fehlerbehandlung wenn die Fragen Datei nicht existiert nix! arg -.- Man neeee
zum Anfang ich hoffe mal du meinst damit nicht deine Sinnlose änderung
catch(CFileException* e)geändert zu
catch(CFileException* pException)Ich den Source zu der funktion auch über Google gefunden angeblich ja funktionsfähig. mittlerweile hab ich das aber geändert zwar nicht so sauber wies vorher war mit catch sondern billig über if open = 0 aber es funktioniert
bool CQuiz::LoadQuestions() { CStdioFile file; int Anzahl = 0; CFileException FileExc; if(file.Open("Questions.txt", CFile::modeRead | CFile::typeText, &FileExc) == 0 ) { FileExc.ReportError(); //file.Close(); return false; } else { CString strLine; // Datei zeilenweise auslesen while (file.ReadString(strLine) > 0) { Questions.Add(strLine); Anzahl++; } strLine.Format("%d", Anzahl); NumberOfQuestions = Anzahl; AfxMessageBox(strLine); } file.Close(); return true; }fehlt halt noch nen bissl was in der Richtung datei kann nicht geladen werden mal nachher schauen entweder 10 fragen ins array laden oder nen dialog öffnen über dem man dann per internet ne standard datei laden kann (oder vielleicht soagr per auswahl??) bin mir da noch nicht ganz Schlüssig
-
was soll
for(int i = 0; i<=8; ++i)schon wieder?! erklär ersteinmal warum ++i und nicht i++ ... ich glaub nähmlich das du das so nach belieben machst...
for(unsigned int i = 0; i < 9; ++i)wäre die 100% saubere Lösung...
BOOL ist ein Windowstype. Bzw. BOOL ist in den Windows Headern als int definiert... was du sehr leicht herrausfinden kannst, wenn du mal nen rechtsklick darauf machst und dann auf "Gehe zur Definition.." klickst..
Was das heißt, solltest du wissen ;)Überlegen wir einfach mal:
+-Datentype--+--Bytes--+--Mögliche Werte------------+ | bool | 1 | true; false | | int | 4 | -2147483648 - +2147483647 | +------------+---------+----------------------------+
-
@(D)Evil
schon wieder?! erklär ersteinmal warum ++i und nicht i++ ... ich glaub nähmlich das du das so nach belieben machst...
erstens hab ich nur Zitiert was du angekreidet hast geändert habe ich das nach deinem vorschlag zum ++i heisst das es vor beginn der Schleife schon adiert wird, i++ hingegen erst nach dem Schleifen durchlauf
→ in meinem fall könnte ich auch schreiben
for(unsigned int i = 1; i < 9; i++)zum BOOL dachte ich halt das bool genauso ein normal int ist.
Wobei ich dann nicht verstehe warum die bei MS dann sowas machen die müssten das dann doch am besten wissen