Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

Hi,

ich programmier grade mal wieder ein bisschen,
nun wartet getchar ja immer auf einen Tastendruck, weiss jemand wie ich da einen Timeout reinbringe ?
Momentan geht das Programm naemlich nur weiter, wenn der Benutzer auch den Charakter/Vehicle bewegt.

Code: Alles auswählen

ch=getchar():
switch(ch){
case 'd':
 y++;
 break;
case 'a':
 y--;
 break;
case... und so weiter
}
char.jpg
char.jpg (26.78 KiB) 8049 mal betrachtet
Das @ Zeichen ist momentan der Charakter/Fahrzeug.
Hab mir noch keine Gedanken zum Spielinhalt gemacht.
Ich probiere momentan einfach rum.

Gruss Matze
Zuletzt geändert von matze79 am Mo 10. Feb 2014, 20:21, insgesamt 2-mal geändert.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: C/C++ Timeout fuer getchar

Beitrag von matze79 »

Fuer getch funktionierts so:

Code: Alles auswählen

noecho();         // don't show keypress
cbreak();         // don't interrupt for user input
timeout(500);  // wait 500ms for keypress
Jetzt muss ich noch rausfinden wie"s mit getchar geht.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, das ein oder andere Probl

Beitrag von matze79 »

char.jpg
char.jpg (37.96 KiB) 8020 mal betrachtet
So heute bisschen erweitert, ein Array wird mit Zufallszahlen gefuellt, dies enthaelt Koordinaten fuer die A Baueme :)
Die Baume werden dann mit For Schleifen gezeichnet und pdcurses move und printw.
Kollision fuer die Baueme fehlt noch.

Ausserdem hab ich alles so eingerichtet das verschiedene Terminalgroessen unterstuetzt werden, wie man am kleineren Fenster sieht.

Ich nutze nun ein paar Globale Variablen/Arrays und hab das Programm in mehre Dateien ausgelagert functions.c fuer Funktionen, Hauptprogramm move_a_char.c, globals.h fuer Globale Variablen und so weiter.
Mein erster Versuch mit mehren Dateien.
Gnu Make wollte ich neben bei auch gleich mal lernen.

Momentan lauefts unter Windows, Linux und MS-Dos (ab 386er, DJGPP).

Hab nach wie vor ein Problem, irgendwie muss man doch mehre Tastendruecke gleichzeitig auswerden koennen ?
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 613
Registriert: So 17. Okt 2010, 14:40

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von wobo »

matze79 hat geschrieben:Hi,

ich programmier grade mal wieder ein bisschen,
nun wartet getchar ja immer auf einen Tastendruck, weiss jemand wie ich da einen Timeout reinbringe ?
Momentan geht das Programm naemlich nur weiter, wenn der Benutzer auch den Charakter/Vehicle bewegt.
[...]
Mit kbHit() ?

Code: Alles auswählen

if (kbhit())
{
ch=getchar():
switch(ch)
	{
	case 'd':
	 y++;
	 break;
	case 'a':
	 y--;
	 break;
	case... und so weiter
	}
}
PS: Dein Game sieht cool aus. Ich habe sofort gesehen, dass die grünen A einen dichten finsteren und gefährlichen Nadelwald darstellen, durch das sich der Hero (klassisch als @, was schon bei NetHack anno 1985 so war) erst noch durch kämpfen muss. Musst also nix erklären, ist alles selbst erklärend :-) Will ich dann mal spielen, wenn's fertig ist ^^
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

http://www.file-upload.net/download-860 ... r.zip.html

Eine aktuell lauffaehige Version, jetzt mit hell und dunkelgruenen Bauemen und Kollision (nicht ganz perfekt..)
Komischerweise funktionierts nicht 100% wenn Baueme nebeneinander stehen.
Ich gleiche die Koordinaten der Baueme mit denen des Spielers ab mit einer Forschleife.
Trifft der Spieler einen Baum werden seine Koordinaten auf den alten Wert angepasst.
Muss noch rauskriegen wie ich einen gleichmaessigen Programmablauf hinkriege.
Eine Art Timing dass das Programm auf jeden Rechner gleich schnell laueft.
Momentan mache ich das noch mit getch und timeout.. das ist nicht wirklich das Wahre.

Muss mir ueberlegen wie ich Gegner gestalten kann. So das sie sich halbwegs vernuenftig verhalten.
Die Function fuer die Farben hab ich etwas ueberarbeitet, so das ich nun 2 Stufen habe Hell und Dunkel (A_BOLD in pdcurses)

kbhit mag nicht im Moment, schau mir das spaeter noch mal an.

PS: Umlaute gibts hier nicht, UK Tastatur.

Edit: Ein kleiner Bug hat sich eingeschlichen, es koennen rote Baueme auftauchen, ist nur ein Tipp Fehler im Zufallsteil der entscheidet ob ein Baum hell oder Dunkel ist.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
wobo
DOS-Guru
Beiträge: 613
Registriert: So 17. Okt 2010, 14:40

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von wobo »

Ich hab´s gerade ausgestestet: Stimmt manchmal klappt die Kollisisionsabfrage mit den Bäumen noch nicht - vielleicht ist das aber auch ein Feature und Hero kann auf Bäume klettern?

Gegner bitte auch noch machen. Und Falltüren und Schatztruhen. Und Burgen.

Die Dos-Version ließ sich nicht per ESC abbrechen, die Win32-Version dagegen schon.

Wann geht´s weiter ;-) ?
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

Download: main.exe

Nur win32 im Moment, da ich etwas Zeitmangel habe :) muss nochmals djgpp einrichten und bin noch nicht dazugekommen.
Immerhin hab ich jetzt schon mal einen Gegner, der nichts kann, collisionsabfrage ist etwas verbessert.
Lebensbalken wird bei Gegner Kontakt reduziert.

Anfaengerversuche :) in QuickBasic waere ich wohl schon weiter und haette bereits Sprites.

Gruss Matze
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

So hab mein Thinkpad fertig mit djpgg,

hier mal der neueste Screenshot:
hero.jpg
hero.jpg (51.01 KiB) 7872 mal betrachtet
Das @ ist der Player, das E der Feind.
Der kann nichts, und ist nur bei Beruehrung schaedlich.

Und download der Dos Version:
hero.zip

Beenden mit 'Q, Steuerung: W A S D
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Brueggi

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von Brueggi »

Ich habe mich nun entschlossen, auch mal erste Schritte in C zu wagen. Du bist ziemlich weit im vergleich zu mir - mann, was hab ich gestern gegrübelt, wie man Zeichenketten ausgibt... Dauernd Fehler... :-D
Dateianhänge
Mein erstes C-Programm am Mac :-D
Mein erstes C-Programm am Mac :-D
SOURCE.JPG (39.58 KiB) 7707 mal betrachtet
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

Kein 68k ASM ? :)

Ich poste demnaechst mal den Source von dem was ich bisher habe.
Ich will wenn ich Lust hab alles neuschreiben, da einiges etwas umstaendlich geworden ist.
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Brueggi

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von Brueggi »

Erstmal C lernen. :-D
Habe schon probiert mit

asm
{
}

auch Assembler zu schreiben. Zumindest hat er es anstandslos kompiliert. Wäre schön, wenn du deine "Lektionen", die Du lernen musstest, hier mal zu veröffentlichen. Das ist absolutes Neuland :-D
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

Es ist allerdings nicht der beste Source, Viel Spass.
Am sinnvollsten ist im Moment ein kompletter Rewrite :)

source.zip

Gruss Matze
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von matze79 »

Waere toll wenn ich auch etwas Feedback/Verbesserungsvorschlaege bekommen koennte :)
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
darktrym
LAN Manager
Beiträge: 207
Registriert: So 5. Jan 2014, 10:59
Wohnort: -D-

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von darktrym »

Keine Ahnung was du hören willst, kenne nicht die Richtung wohin dein Programm gehen soll, deshalb etwas zum Code. Vielleicht als Inspiration, schau dir mal Apogee Kroz an(ist in TP geschrieben).

Kommentare meinerseits:
Makefile:
rm ist kein Windows Befehl, entweder machst du pro Architektur eine Makefile oder verwendet den dafür vorgesehen Befehl(make -f Makefile.win bzw. del)
Optimierungem sind wenn es kein besonderen Grund gibt nicht sinnvoll.
Explizite Auflisten der Objektdateien wird bei steigender Anzahl ungünstig, guck mal in Wikipedia vielleicht findest du was.

Formatierung(sicher viel kosmetischer Natur) und kleine Dinge:
Leerzeichen zwischen include und Bezeichner.
Einrückungen sind nicht konsistent.
Nur global sichtbares kommt in eckige Klammern, sonst in doppelte Hochkommas, einige Compiler werden sich sicher darüber beschweren.
Reduzier dein globales Wissen, wird ohnehin nicht gebraucht in dem Umfang.
enemy(): Ich bin sicher einige Fälle schließen sich gegenseitig aus, kein Grund das abermals zu überprüfen. Gilt auch für main().
enemy_position: Konstante Ausdrücke bitte auch als solche markieren wie "150".
Gibts einen besonderen Grund warum du da kein Prä-/Postinkrement verwendet hast? Generell ist Präinkrement vorzuziehen.
Wenn du später nochmals dran arbeiten willst könnten (Doxygen-)Kommentare nie schaden, wenigstens in den Header Dateien. Es ist guter Stil die Kommentare obenhalb des zu schreibenden Codes zu setzen, um nicht über die 79/80 Zeichen pro Zeile zu kommen. Eine Leerzeile am Ende jeder Datei.
Du kannst auch mal ein void als Funktionsargument nutzen, wenn's keine Parameter braucht und Variablen zum Schutz einer weiteren Inkludierung ist es geläufiger den Dateinamen in Großbuchstaben mit Unterstrich statt Komma zu versehen. Kann bei globals.h auch nicht schaden.
Wenn initcolor so ein Muster hat, kann man auch gleich eine Schleife nutzen und die Paare in den Header verlagern. Waldcollision ist kein dt. Wort, selbst als Neologismus mit Rechtschreibfehler.
Räum mal deine main() auf: Grafikinit., Spielinit. Gameloop. Deine Gameloop kann auch mit break verlassen werden, dann hats auch einen schönen Platz für Aufräumen und das exit() kann entfernt werden. Dein return 0 ist zwar sinnlos, schadet aber nicht, schöner schauts mit einem return EXIT_SUCCESS aus.

PS: Getestet auf Windows 7.
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: Spieleprojekt in C / PDCurses, Probleme?! (Logbuch)

Beitrag von DOSferatu »

Ich habe schon einige Spiele programmiert - und mache so etwas auch immer noch.
Falls jemand z.B. Interesse hat, wie man mehrere Tasten gleichzeitig abfragen kann (und auch "komische" Tasten benutzen), könnte ich z.B. helfen. (Ich erwähne das, weil dies hier u.a. thematisiert wurde).

Mich freut es jedesmal, wenn ich sehe, daß es außer mir auch noch andere Leute gibt, sich sich privat mit Spieleprogrammierung beschäftigen.
Antworten