Моля, за съдействие с ооп в 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;
}
Излиза картата но умножена х 32 надолу
нещо като :
и така до края.
@EstervinaArias
В theMap.cpp опитайте с:
Получи се. Много благодаря.
Правя Чарактер и Враг като абстрактни класове, които различните по вид персонажи, ще ги наследяват.
въпрос 1:Как ще става избора на герой?
въпрос 2: Въпрос 2: как ще направя така, че на картата да се падат различни противници
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(); }
Някаква идея, защо този код не иска да отваря функциите? опитах още няколко варианта и дотам.Така изваден от контекста, няма кой-знае какво да се каже по кода.
Ако не върши това, което очаквате, значи нито една от проверките не е валидна,
Най-добре го дебъгнете.
Така е. Проблемът беше съвсем друг. Обектът от клас герой, не беше свързан чрез рефервнция и дефакто х-са и у-ка му не нарастваха по стойност. От там не се активираха и функциите. След като реших проблема, възникна друг. Функциите се стартираха без изобщо да бъде изпълнена проверката. Не успях да залича съвсем този.
@EstervinaArias
Debug ще даде отговор на въпроса какво и защо не сработва
Демек стъпка по стъпка ли?