Професионална програма
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
JohnDoe256 avatar JohnDoe256 2 Точки

Имаш ли възможност да качиш кода в rar/zip файл?.Че ми е малко трудно да го copy paste-na.
Иначе ако правилно съм разбрал въпроса ти без да съм разцъкал кода бих съветвал един switch който взима кординатите на героя  ти и проверява на какво поле се намира и задейства combat systemata ти.
switch(player[x][x])
case '%'
 battle_mode(enemy_type)
break;
..........
default:
//do nothing
Ако не те интересува какъв точно ще бъде enemyto можеш да имаш масив от тип enemy, и генерираш врага чрез рандом индекс на този масив.


 

0
14/06/2020 13:40:22
MartinBG avatar MartinBG 2887 Точки

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 2887 Точки

@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