Loading...
EstervinaArias avatar EstervinaArias 4 Точки

Моля, за съдействие с ооп в C++

Здравейте,
Моля, за съдействие. 

-как да свържа обект от класа Character със символа "@" от картата .

при:

const int Character::getX(void)const {
	return x;
}

const int Character::getY(void)const {
	return y;
}

Излиза ми грешка "Unhandled exeption thrown: read access violation. this was nullptr."

- Как да направя няколко различни типа врагове: с текстови файл, списък... съответно пак да ги обвържа със символ "%" или да са различни символи разположени по картата.
Целта е героят да може да стъпва върху врага и да започва битка, която се провежда текстово.

 

Ето го и целия код

//class Map.h

#pragma once
#include <windows.h>
#include <stdlib.h>
#include "Character.h"

//#include "Player.h"

class theMap
{

private:
   
    bool game_running = true;
    Character* ch;
    int x=1;
    int y=1;

    char map[32][84] = {


    "################################################################################",
    "#@                                                   ____                      #",
    "#        { }* { }  { }                    ___       <____>                     #",
    "#     { }//{ }//{ }// { }    ++++++++++  <___>                                 #",
    "#    *//{ }//{ }//*{ }//{ } % /   /   |+++++++++++    | |                   +++#",
    "#  { }- F O R E S T            / /    /       /  |++++++++          ++++++++|  #",
    "#  // *{ } *{ } * { }* { }//    /     D O C K            |++++++++++|          #",
    "#   { }//{ }// { }//{ }//            %          /      /                       #",
    "#   // * // * *// * //     %___/___________~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#",
    "#     { }   { }   { }     % |M           T|                                    #",
    "#     //    //    //     %  |  A      E   |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#",
    "#                       %        R  K     |           %                        #",
    "#               %      %    |_____________|         %            %             #",
    "#                %                            /// ////// ////       %          #",
    "#                 %                           |-| |----| |--|          %       #",
    "#                  %                          | | |    | |  |       %          #",
    "#  ^^  ^^  ^^  ^^   %                         | | |    | |  |               %  #",
    "# /=/ /=/ /=/ /=/    %                    % ^^^^^^^^^^^^^^^^^^^^               #",
    "#   V I L A G E       %                  %  |------------------|               #",
    "#     ^^  ^^  ^^  ^^   %                %   |                  |               #",
    "#    /=/ /=/ /=/ /=/    %              %         P A L A C E   |               #",
    "#                                         |======================     %        #",
    "#                                             %                                #",
    "#                   ______________________|__________     %                    #",
    "#              %   [ ______________________________ ]__   __                   #",
    "#                      | |                  | |             <=============>    #",
    "#         %           %                                ______             |    #",
    "#               [ (      %    A R E N A              ) ]    | A R M O R Y |    #",
    "#                [ (   | |                  | |     ) ]     |             |    #",
    "#                 [ (______________________________) ]      <=============>    #",
    "#                  [________________________________]                          #",
    "################################################################################"

  };


public:
    theMap() {}
   
    theMap(int x, int y, Character * ch) {
        this->x = x;
        this->y = y;
        this->ch = ch;
    }
    ~theMap() {}
    
    void moveChar();
    void fullscreen();
          
};

//class Map.cpp
#include "theMap.h"
#include "Character.h"
#include <iostream>
#include <windows.h>
#include <stdlib.h>
//#include <exeption>

using std::endl;		using std::cout;
using std::string;





void theMap::moveChar() {

    while (game_running = true) {

        system("cls");

        for (int i = 0; i < 32; i++) {
            for (int j = 0;j < 84;j++) {
                
                    cout << map[i] << endl;
                    if (j == ch->getX() && i == ch->getY()){
                       map[i][j] = '@';
                            cout << map[j] << endl;
                        
                }
            }
        }
        cout << "\n\n\nPress Escape to exit the game.\n\n\n";
        system("pause");


        if (GetAsyncKeyState(VK_DOWN)) {
            int y2 = y + 1;
          
            if (map[y2][x] == ' ') {
                map[y][x] = ' ';
                y++;
                map[y][x] = '@';
                if (map[5][18]) {
                    cout << "Wewkom to the FOREST";
                }
            }
        }
        if (GetAsyncKeyState(VK_UP)) {
            int y1 = y - 1;
            if (map[y1][x] == ' ') {
                map[y][x] = ' ';
                y--;
                map[y][x] = '@';
            }
        }
        if (GetAsyncKeyState(VK_LEFT)) {
            int x2 = x - 1;
            if (map[y][x2] == ' ') {
                map[y][x] = ' ';
                x--;
                map[y][x] = '@';
                if (map[y][x] = '@' == map[5][25]) {
                    system("pause");
                    cout << "Wellcome to the FOREST";
                }
            }
        }
        if (GetAsyncKeyState(VK_RIGHT)) {
            int x1 = x + 1;
            if (map[y][x1] == ' ') {
                map[y][x] = ' ';
                x++;
                map[y][x] = '@';
            }
        }

        if (GetAsyncKeyState(VK_ESCAPE)) {
            cout << "\n\n\nThank you for the game!\n\n\n";
            exit(3);
        }
    }
}
void theMap::fullscreen()
{
    keybd_event(VK_MENU, 0x38, 0, 0);
    keybd_event(VK_RETURN, 0x1c, 0, 0);
    keybd_event(VK_RETURN, 0x1c, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_MENU, 0x38, KEYEVENTF_KEYUP, 0);


}




//class Character.h

#pragma once
#include <string>
#include <iostream>

using std::string;


class Character
{
private:
	string m_name;
	int m_level, m_hp, m_strenght, m_intelligence,m_money;
	int x =1;
	int	y =1;

public:

	Character();
	Character(string name, int level, int hp, int strenght, int intelligence, int money, int x1, int y1);
	void SetCharacter(int x, int y);
	const int getX(void)const;
	const int getY(void)const;

	/*void attack();
	void defend();
	void levelUp();*/


};

//class Character.cpp

#include "Character.h"
#include<iostream>
#include <windows.h>
#include <stdlib.h>

Character::Character() {

	
		m_name = "Witcher";
		m_level = 1;
		m_hp = 100;
		m_strenght = 10;
		m_intelligence = 10;
		m_money = 140;
		x = 1;
		y = 1;
	}
Character::Character(string name, int level, int hp, int strenght, int intelligence, int money, int x, int y)
{
	m_name = name;
	m_level = level;
	m_hp = hp;
	m_strenght = strenght;
	m_intelligence = intelligence;
	m_money = money;
	this-> x=x;
	this-> y=x;
}

void Character:: SetCharacter(int x, int y) {
	this->x = x;
	this->y = x;
}
const int Character::getX(void)const {
	return x;
}

const int Character::getY(void)const {
	return y;
}

//class Enemy.h

#pragma once
#include <iostream>


class Enemy
{
private:
	 



};

//class Enemy.cpp

#include "Enemy.h"

Main


#include "theMap.h"
#include <iostream>

int main()
{
	theMap m;
	m.fullscreen();
	m.moveChar();
	
return 0;

}

 

0
C++ Programming
MartinBG avatar MartinBG 4803 Точки

Course_Project_06.cpp

int main()
{
	theMap m;
	m.fullscreen();
	m.moveChar();
	
return 0;

}

Създавеате инстанция на theMap класа използвайки дефолтният му конструктор, който не инициализира полето Character* ch.

В резултат ch e nullptr и ще хвърля exception при всеки опит да се работи с него.

Използвайте пълния конструктор на theMap

    theMap(int x, int y, Character * ch) {
        this->x = x;
        this->y = y;
        this->ch = ch;
    }

за инициализация на обекта в main(), като му подадете и инстанция на Character:

int main()
{
    Character* ch = new Character("name", 0, 1, 2, 3, 4, 0, 0); 
	theMap m {1, 1, ch};
	m.fullscreen();
	m.moveChar();
	
    return 0;

}

 

0
EstervinaArias avatar EstervinaArias 4 Точки

Излиза картата но умножена х 32 надолу 

нещо като :


################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
################################################################################
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#@                                                   ____                      #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #
#        { }* { }  { }                    ___       <____>                     #



и така до края.

0
MartinBG avatar MartinBG 4803 Точки

@EstervinaArias

В theMap.cpp опитайте с:

void theMap::moveChar() {

  while (game_running = true) {

    system("cls");
 
    for (int i = 0; i < 32; i++) {
      for (int j = 0;j < 84;j++) {
        if (j == ch->getX() && i == ch->getY()){
          cout << '@';
        } else {
          cout << map[i][j];
        }
      }
      cout << endl;
    }

    cout << "\n\n\nPress Escape to exit the game.\n\n\n";
    system("pause");

 //....

 

0
EstervinaArias avatar EstervinaArias 4 Точки

Получи се. Много благодаря.
 


 

1
26/06/2020 12:50:22
EstervinaArias avatar EstervinaArias 4 Точки

Правя Чарактер и Враг като абстрактни класове, които различните по вид персонажи, ще ги наследяват.
въпрос 1:Как ще става избора на герой?
въпрос 2: Въпрос 2: как ще направя така, че на картата да се падат различни противници

0
EstervinaArias avatar EstervinaArias 4 Точки

if (ht->getX() == e->getEX()&&ht->getY()==e->getEY()) { ht->Attack(); e->EAttack(); } else if (ht->getX() == e1->getEX() && ht->getY() == e1->getEY()) { ht->Attack(); } else if (ht->getX() == e2->getEX() && ht->getY() == e2->getEY()) { ht->Attack(); } else if (ht->getX() == e3->getEX() && ht->getY() == e3->getEY()) { ht->Attack(); }

Някаква идея, защо този код не иска да отваря функциите? опитах още няколко варианта и дотам.
0
26/06/2020 13:02:37
MartinBG avatar MartinBG 4803 Точки

Така изваден от контекста, няма кой-знае какво да се каже по кода.

Ако не върши това, което очаквате, значи нито една от проверките не е валидна,

Най-добре го дебъгнете.

0
26/06/2020 16:07:38
EstervinaArias avatar EstervinaArias 4 Точки

Така е. Проблемът беше съвсем друг. Обектът от клас герой, не беше свързан чрез рефервнция и дефакто х-са и у-ка му не нарастваха по стойност. От там не се активираха и функциите. След като реших проблема, възникна друг. Функциите се стартираха без изобщо да бъде изпълнена проверката. Не успях да залича съвсем този. 

1
MartinBG avatar MartinBG 4803 Точки

@EstervinaArias

Debug ще даде отговор на въпроса какво и защо не сработва wink

0
EstervinaArias avatar EstervinaArias 4 Точки

Демек стъпка по стъпка ли? 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.