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

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