Einfaches Textadventure in C++

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

Einfaches Textadventure in C++

Beitrag von matze79 »

Hi,
ich bastel momentan ein wenig in C++ und zwar an einen einfachen Textadventure:

Code: Alles auswählen

#include <iostream>
#include <string>

using namespace std;

int main(){
string eingabe;
int x,y;
x=5;
y=5;

while(1){

cout << "Postion: " << x << "," << y  << " which direction ? >";
getline(cin,eingabe);

if ( eingabe == "north" ) {
cout << "heading north\n"; 
x = x++;
}
else if ( eingabe == "south" ) {
cout << "heading south\n";
x = x--;
}
else if ( eingabe == "west" ) {
cout << "heading west\n";
y = y--;
}
else if ( eingabe == "east" ) {
cout << "heading east\n";
y = y++;
}
else if ( eingabe == "help" ) {
cout << "valid commands: east, west, south, north\n"; 
}

else {
cout << "input error\n"; }

}
}
Nun möchte ich eine Art Karte einbinden in etwa so:
das müsste dann quasi mit int map[5][5] funktionieren.

Code: Alles auswählen

         y
   1 1 1 1 1 1                   1 = Wand
   1 0 0 2 0 1                   2 = Baum
 x 1 0 0 0 0 1                   3 = Wasser
   1 3 0 4 0 1                   4 = Schlüssel
   1 1 1 1 1 1
Nur steh ich grad irgendwie auf den Schlauch wie ich mit meinen x,y kordinaten nun den Wert aus der jeweiligen zeile/spalte auslese.
Evtl. gibts auch einen besseren Weg.
Bin noch ganz am Anfang mit C++.
Früher hab ich mit Quick Basic paar Sachen gemacht und schon mal mit Turbo C rumgespielt aber das ist schon lange her.

Gruss Matze
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Einfaches Textadventure in C++

Beitrag von Dosenware »

matze79 hat geschrieben: Nur steh ich grad irgendwie auf den Schlauch wie ich mit meinen x,y kordinaten nun den Wert aus der jeweiligen zeile/spalte auslese.
Willst du den Bildschirmspeicher auslesen?
Scrollt deine Karte?

in jedem Fall würde ich das Array vom Bildschirmspeicher trennen, dem Spieler startkoordinaten verpassen und diese je nach richtungswahl inc/decrementieren.

eine Scrollende Karte ließe sich dann einfach realisieren indem du den Bereich Spielerpos_XY-2 bis Spielerpos_XY+2 deines Maparrays nach jedem Schritt ausliest und an einer festen Stelle (z.b. X=70-75; Y=20-25) anzeigst.

Oder ist die C Syntax das Problem?
http://home.fhtw-berlin.de/~junghans/cr ... rrays.html ganz unten.

map[1] würde nach deinem Bleistift 100201 ergeben
map[1][1] ergibt 0
map[1][3] ergibt 2
Julian
Windows 3.11-Benutzer
Beiträge: 6
Registriert: Di 4. Dez 2012, 22:53

Re: Einfaches Textadventure in C++

Beitrag von Julian »

C ist bei mir schon ein paar Semester her, C++ konnte ich noch nie. Ich würde das so machen (ungetestet und wahrscheinlich so nicht übersetzbar)

Code: Alles auswählen

[...]
void loadMap(int [][5]map)
{
/* Map aus Datei laden oder hardcoded map schreiben */
for(int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
map[i][j] = 2; /* 5x5 Map mit Bäumen füllen */
}
}
}

int main()
{
string eingabe;
int x = 5,y = 5;
int[5][5] map;
loadMap(map);
/* Eingabe auslesen, auswerten und ggf. ein Feld weiter rücken */
[...]
switch (map[x][y])
{
case 1:
//mach was
break;
case 2:
//mach was
break;
case 3:
//mach was
return;
case 4:
//mach was
break;
case default:
//sollte nicht eintreten
break;
}
}
Wenn es dir allerdings um das Adevnture und nicht um die Engine bei der Sache geht, könntest du dir z.B. mal ZIL anschauen. Ansonsten wirst du früher oder später nicht drumrum kommen einen echten parser schreiben zu müssen.

Gruß Julian
//edit: ich bin hier nur auf den Syntax eingegangen. Dosenware hat recht, die Fragestellung ist nicht ganz eindeutig.
Benutzeravatar
matze79
DOS-Gott
Beiträge: 7910
Registriert: So 9. Sep 2012, 20:48

Re: Einfaches Textadventure in C++

Beitrag von matze79 »

Ich mach mir vorerst eigentlich gar keine Gedanken über Grafik, Scrolling, Sound und solche Dinge
vieleicht kennt ja jemand das kleine Spiel adventure oder roque wollte mal versuchen etwas in der Richtung zu programmieren, einfach und simpel, nur Text basiert.

Ich muss nun halt meine x,y Koordinaten auf das array anwenden um festzustellen, ist ein Zug möglich ? ist dort eine Wand ? und so weiter :)

Nur da ich kaum eine Ahnung von C++ habe wird das wohl erstmal andauern bis alles so wird wie ich will.
Bis der Aha-Effekt eintritt, so geht das.

Nebenbei möchte ich erreichen das ich das Programm letztendlich auch auf Windows, Linux, BSD, Dos übersetzen kann.

Sobald alles mal im Textmode laueft kann man sich ja Gedanken über Grafik machen.
Aber momentan hängts noch an den einfachsten Sachen.

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: Einfaches Textadventure in C++

Beitrag von matze79 »

So, soweit hat alles geklappt :) Danke.

Jetzt versuch ich mich mal mit ncurses bzw pdcurses.

Gruss Matze
https://www.shadowcircuit.de - Die kleine Community rund um Retro Computing
https://www.retroianer.de
Antworten