Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

11

19.07.2007, 00:29

Also dein Code oben ist noch nich so recht Anwendungstauglich ;)
Da du 4* _getche() hintereinander hast wirst du Probleme dabei haben rauszufinden, was der Nutzer wirklich will^^
Übrigens solltest du mal lieber _getch() statt _getche() verwenden, denn ich kann mir nicht vorstellen, dass es in diesem Fall gewünscht ist, dass der Tastendruck im Consolenfenster angezeigt wird ;)

Schau dir mal folgenden Code an:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
// angenommen der Header für die extra Funktionen aus der FAQ heißt console.h

#include <console.h>

int main()
{
  player hero; // player sollte mindestens Position und Zeichen des Helden beinhalten und initialisieren

  char userselection=0; // wird später mit _getch() verwendet

  bool run=true;
  Console::cursor(0);
  std::cout << Console::manip_gotoxy(hero.x, hero.y) << hero.sign;
  while (run)
  {
    userselection=_getch();
    if (userselection=='q' || userselection=='Q') // Quit

    {
      run=false;
    }
    std::cout << Console::manip_gotoxy(hero.x, hero.y) << ' '; // Alte Playerposition leer zeichnen

    if (userselection=='w' || userselection=='W') // Up

    {
     hero.y -=1;
    }
    if (userselection=='s' || userselection=='S') // Down

    {
      hero.y +=1;
    }
    if (userselection=='a' || userselection=='A') // Left

    {
      hero.x -=1;
    }
    if (userselection=='d' || userselection=='D') // Right

    {
      hero.x +=1;
    }
    std::cout << Console::manip_gotoxy(hero.x, hero.y) << hero.sign; // neue Pos. zeichnen (sign == Playerzeichen)

  }
  return 0;
}


// €dit:
Das Console::manip_gotoxy hab ich nicht direkt aus der FAQ sondern dabei beziehe ich mich auf meinen Code aus dem Thread, der mit der FAQ verlinkt ist. Gemäß FAQ müsste das Player zeichnen in 2 Schritten gehen:

C-/C++-Quelltext

1
2
Console::gotoxy(player.x, player.y);
std::cout << player.sign;


€dit2: (fehlerbehebung)
player durch hero ersetzt
Console:: hinzugefügt

€dit3:
Console::cursor(0) hinzugefügt, damits besser ausschaut und den Playre am Start erstma zeichnen lassen.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

12

19.07.2007, 00:48

Okay hab es jetzt so

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include<windows.h>
#include<conio.h>
#include<process.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
#include <process.h>
#include <wchar.h>
#include "console.h"

using namespace std;

class player
{
    public :

    int x;
    int y;

};

void gotoxy(int x, int y)
{
   COORD coord;
   coord.X = x;
   coord.Y = y;
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}


int main()
{
  player hero; // player sollte mindestens Position und Zeichen des Helden beinhalten und initialisieren

  char userselection=0; // wird später mit _getch() verwendet

  bool run=true;
  while (run)
  {
    userselection=_getch();
    if (userselection=='q' || userselection=='Q') // Quit

    {
      run=false;
    }
     cout << manip_gotoxy(hero.x, hero.y) << ' '; // Alte Playerposition leer zeichnen

    if (userselection=='w' || userselection=='W') // Up

    {
      hero.y -=1;
      gotoxy(hero.x, hero.y);
      cout<<char(4)<<endl;
    }
    if (userselection=='s' || userselection=='S') // Down

    {
      hero.y +=1;
      gotoxy(hero.x, hero.y);
      cout<<char(4)<<endl;
    }
    if (userselection=='a' || userselection=='A') // Left

    {
      hero.x -=1;
      gotoxy(hero.x, hero.y);
      cout<<char(4)<<endl;
    }
    if (userselection=='d' || userselection=='D') // Right

    {
      hero.x +=1;
      gotoxy(hero.x, hero.y);
      cout<<char(4)<<endl;
    }
    cout << manip_gotoxy(hero.x, hero.y) <<char(4)<<endl; // neue Pos. zeichnen (sign == Playerzeichen)

  }

}


Nur er mekkert weil er manip_gotoxy nicht kennt :/
und bei gotoxy ( void ) die funktion von oben bin ich mir bei der bezeichnung nicht sicher :/

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

13

19.07.2007, 01:14

Um mit manip_gotoxy zu arbeiten musst du Console.h / .cpp nach dem letzten Beitrag im folgenden Thread gestalten:

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=6965&postdays=0&postorder=asc&start=15

Außerdem befinden sich diese Sachen alle im Namespace Console... du müsstest also entweder per using namespace Console; den Namespaceinhalt bekannt geben oder bei jeder Funktionsverwendung aus dieser Sammlung direkt Console::__funktion__ schreiben - wobei __funktion__ natürlich je nachdem was du willst ersetzt werden muss.

Dein eigenes gotoxy scheint im Grunde zu gehen, musst halt überlegen, ob du es verwendest. in der Console-Sammlung ist auch eine gotoxy Funktion dabei, die ja im Grunde genauso arbeitet.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

14

19.07.2007, 08:37

Du zeichnest deinen Heldencharakter zu oft. So oft ist nicht notwendig.
@D13_Dreinig

R3sident3vil

Treue Seele

Beiträge: 177

Wohnort: 1010010

Beruf: Selbstständig

  • Private Nachricht senden

15

19.07.2007, 09:30

@grek40. Ich frage mich wodurch soll dann die __funktion__ ersetzt werden?
Kaum ist Linux wieder da, schon gehts meinem Rechner wunderbar, denn Linux ist die beste Medezin.

Olischewsky Arts

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

16

19.07.2007, 09:37

Wieso schaust du nich einfach selbst nach? :roll:

C-/C++-Quelltext

1
2
3
4
5
6
7
Console::gotoxy()
Console::attribute()
Console::cursor()
Console::displaysize()
Console::buffersize()
Console::title()
Console::cls()
@D13_Dreinig

R3sident3vil

Treue Seele

Beiträge: 177

Wohnort: 1010010

Beruf: Selbstständig

  • Private Nachricht senden

17

19.07.2007, 11:47

Weiß auch nicht ;) .
Kaum ist Linux wieder da, schon gehts meinem Rechner wunderbar, denn Linux ist die beste Medezin.

Olischewsky Arts

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

18

04.08.2007, 07:02

So nun gibt es neuigkeiten =) xD

Aber ich habe wieder eine frage , das laufen funktioniert nun, nur wie kann ich es anstellen das wenn das X zu der Freien stelle geht eine neue Map geladen wird ?

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

19

04.08.2007, 12:41

Zitat von »"Toa"«


Aber ich habe wieder eine frage , das laufen funktioniert nun, nur wie kann ich es anstellen das wenn das X zu der Freien stelle geht eine neue Map geladen wird ?

C-/C++-Quelltext

1
2
3
4
if (x==__freie_Stelle_x__ && y==__freie_Stelle_y__)
{
  // lade neue Map, setzt x und y auf die neue startpos., setz __freie_Stelle_x__ und __freie_Stelle_y__ auf die neue endpos. und spiel weiter ;)

}

__freie_Stelle_x/y__ is natürlich nen bescheuerter Name, den du durch sinnvollere Variablen ersetzen solltest ;)

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

20

04.08.2007, 15:39

woher kennt er dann das sie frei ist also das hier __freie_Stelle_x__ ?

Werbeanzeige