Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Шифрование и дешифровка файла с AES 256 https://www.cyberforum.ru/ cpp-beginners/ thread2491429.html
Доброго времени суток, дорогие телепаты. Заранее оговорюсь: я в криптографии совсем зеленый, поэтому сильно не пинайте. Существует ли простой способ шифровки-расшифровки архива (в частности .rar или...
C++ Подключение заголовочных файлов
Как работает подключение заголовчных файлов в Линукс во время компиляции? К примеру имею свой собственный заголовочный файл test.h и подключил его в main.cpp #include "test.h", теперь чтобы...
C++ Повторное подключение хэдеров https://www.cyberforum.ru/ cpp-beginners/ thread2491411.html
Здравствуйте! Тяжело объяснить проблему, но я попробую. Например, в главном исходном файле я подключаю iostream для ввода/вывода. Далее создаю свой хэдер: пишу определение класса, пишу в нём...
C++ Ошибка в редакторе кода https://www.cyberforum.ru/ cpp-beginners/ thread2491403.html
В VS Code при такой инициализации массива char filename = "array created"; выдает такую ошибку : "a value of type "const char " cannot be used to initialize an entity of type "char "",при том...
Локальное Соревнование! По защите информации C++
Добрый день уважаемые пользователи форму! В данной теме хочу предложить провести локальное соревнование С целью оценки и прокачки своих навыков, и просто приятным провождением времени) Две...
C++ Перестановки без повторений https://www.cyberforum.ru/ cpp-beginners/ thread2491327.html
привет помогите пожалуйста найти файлик в котором бы были все перестановки из 5 элементов. мне нужно проверить правильно ли я написал программу. буду сверять все перестановки для этого
C++ Импортировать видео с записью езды https://www.cyberforum.ru/ cpp-beginners/ thread2491323.html
Нужна помощь в написании автопилота, сам программист на Python. На гитхабе нашёл 2 репозитория с библиотеками OBL_Slam2 и pilotguru-master. Нужно импортировать видео с записью езды для создания...
C++ Действия в глобальной области
Здравствуйте! Скажите, пожалуйста, почему в глобальной области нельзя работать также, как в локальной (в той же функции main)? Уточняю. 1) Почему нельзя сначала определить глобальную переменную,...
C++ Перегрузка операции + с преобразованием объектов одного класса в объекты другого класса https://www.cyberforum.ru/ cpp-beginners/ thread2491299.html
Доброго времени суток! Изучаю ООП, при выполнении следующего задания возникли сложности: Создать класс Polar для хранения полярных координат (радиус, угол). Перегрузить операцию + для объектов...
C++ Создать имитационную модель "остановка маршрутных такси" Создать имитационную модель "остановка маршрутных такси". Необходимо вводить следующую информацию: среднее время между появлениями пассажиров на остановке в разное время суток, среднее время между... https://www.cyberforum.ru/ cpp-beginners/ thread2491252.html
C++ Вывести в виде таблицы значения функции заданной графически
Помогите пожалуйста разобраться с лабой Вычислить и вывести на экран или в файл в виде таблицы значения функции, заданной графически, на интервале от Xнач до Xкон с шагом dx. Интервал и шаг задать...
C++ Определение количества элементов массива, равных заданному https://www.cyberforum.ru/ cpp-beginners/ thread2491231.html
Требуется определить в заданном массиве количество элементов, равных искомому числу. Входные данные В первой строке вводится одно натуральное число N, не превосходящее 10^5: количество чисел в...
0 / 0 / 0
Регистрация: 02.08.2019
Сообщений: 17
0

Проблема с картой в Mario - C++ - Ответ 13772926

15.08.2019, 19:04. Показов 1263. Ответов 4
Метки (Все метки)

Делаю копию Марио на C++ SFML!!! Но когда добавляю в Map.h новую строку, чтобы увеличить высоту карты, программа вылетает

main.cpp:
C++
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include <SFML/Graphics.hpp>
#include "View.h"
#include "Map.h"
#include <windows.h>
 
using namespace sf;
 
 
class Player{
public:
    enum {stay, left, right, up, jump} state;
 
    bool isMove, onGround;
    float x, y, dx, dy, speed, moveTimer, currentFrame;
    int w, h, health;
    String name;
    Texture texture;
    Sprite sprite;
    Keyboard::Key lastKeyPressed=Keyboard::Left;
    Player(Image &image, String Name, float X, float Y, int W, int H){
        x=X; y=Y; w=W; h=H; name=Name; moveTimer=0; health=100;
        state=stay;
        isMove=false; onGround=false;
        currentFrame=0;
        texture.loadFromImage(image);
        sprite.setTexture(texture);
        sprite.setTextureRect(IntRect(0, 0, w, h));
        sprite.setOrigin(w/2, h/2);
    }
 
    void control(){
 
            if(Keyboard::isKeyPressed(Keyboard::Left)){
                lastKeyPressed=Keyboard::Left;
                state=left; speed=0.1;
            }
            if(Keyboard::isKeyPressed(Keyboard::Right)){
                lastKeyPressed=Keyboard::Right;
                state=right; speed=0.1;
            }
            if(Keyboard::isKeyPressed(Keyboard::Up) && onGround){
                state=jump; dy=-0.25; onGround=false;
 
 
            }
 
    }
 
    void checkCollisionWithMap(float Dx, float Dy){
        for(int i = y/16; i<(y+h)/16; i++){
            for(int j = x/16; j<(x+w)/16; j++){
                if(TileMap[i][j]=='0' || TileMap[i][j]=='b' || TileMap[i][j]=='?'){
                    if(Dy>0){
                        y=i*16-h; dy=0; onGround=true;
                    }
                    if(Dy<0){
                        y=i*16+16; dy=0;
                    }
                    if(Dx>0){
                        x=j*16-w;
                    }
                    if(Dx<0){
                        x=j*16+16;
                    }
                }else{onGround=false;}
                if(x<0){
                    x=0;
                }if(y<0){
                    y=0;
                }
            }
        }
    }
 
    void update(float time){
        if(currentFrame>3)currentFrame-=3;
        control();
        switch(state){
            case stay:
                if(lastKeyPressed==Keyboard::Left){
                    sprite.setTextureRect(IntRect(16, 0, -16, 16));
                }
                if(lastKeyPressed==Keyboard::Right){
                    sprite.setTextureRect(IntRect(0, 0, 16, 16));
                }
                currentFrame=0;
            break;
            case left:
                currentFrame+=0.006*time;
                if(onGround)
                    sprite.setTextureRect(IntRect(16*int(currentFrame)+32, 0, -16, 16));
                    dx=-speed;
                    break;
            case right:
                currentFrame+=0.006*time;
                if(onGround)
                    sprite.setTextureRect(IntRect(16*int(currentFrame)+16, 0, 16, 16));
                    dx=speed;
                    break;
            case up: break;
            case jump:
                if(lastKeyPressed==Keyboard::Right){
                    sprite.setTextureRect(IntRect(80, 0, 16, 16));
                }
                if(lastKeyPressed==Keyboard::Left){
                    sprite.setTextureRect(IntRect(96, 0, -16, 16));
                }
                break;
        }
 
        x+=dx*time;
        checkCollisionWithMap(dx, 0);
        y+=dy*time;
        checkCollisionWithMap(0, dy);
        if(!isMove){
            speed=0;
        }
        sprite.setPosition(x+w/2, y+h/2);
        setPlayerCoordinateForView(x, y);
        dy = dy + 0.0005*time;
        if(dx==0 && onGround){
            state=stay;
        }
 
    }
 
 
};
int main(){
    err().rdbuf(NULL);
    RenderWindow window(VideoMode(640, 480), "Mario");
    window.setFramerateLimit(60);
    view.reset(FloatRect(0, 0, 640, 480));
    view.setSize(320, 240);
 
    Image playerImage;
    playerImage.loadFromFile("images/player.png");
    Player mario(playerImage, "Mario", 32, 144, 16, 16);
 
    Image tileImage;
    tileImage.loadFromFile("images/world.png");
 
    Texture tileTexture;
    tileTexture.loadFromImage(tileImage);
 
    Sprite s_map;
    s_map.setTexture(tileTexture);
 
    Clock clock;
    bool stopTime=true;
    while(window.isOpen()){
        float time = clock.getElapsedTime().asMicroseconds();
 
        if(Keyboard::isKeyPressed(Keyboard::Pause)){
            stopTime=!stopTime;
        }
        clock.restart();
        if(stopTime){
            time=0;
        }else{
            time/=800;
        }
 
 
        Event event;
        while(window.pollEvent(event)){
            if(event.type==event.Closed){
                window.close();
            }
        }
 
 
        mario.update(time);
        window.clear();
        window.setView(view);
        for(int i=0; i<HEIGHT_MAP; i++){
            for(int j = 0; j<WIDTH_MAP; j++){
                if(TileMap[i][j]=='0'){s_map.setTextureRect(IntRect(0, 0, 16, 16));}
                if(TileMap[i][j]=='b'){s_map.setTextureRect(IntRect(384, 0, 16, 16));}
                if(TileMap[i][j]=='?'){s_map.setTextureRect(IntRect(16, 0, 16, 16));}
                if(TileMap[i][j]==' '){s_map.setTextureRect(IntRect(48, 336, 16, 16));}
 
 
                s_map.setPosition(j*16, i*16);
                window.draw(s_map);
            }
        }
        window.draw(mario.sprite);
        window.display();
    }
}
map.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <SFML/Graphics.hpp>
 
const int HEIGHT_MAP=13;
const int WIDTH_MAP=100;
 
sf::String TileMap[HEIGHT_MAP]={
"                                                                                                    ",//Добавил эту строчку, увеличил HEIGHT_MAP на 1 и вылетает
"                                                                                                    ",
"                                                                                                    ",
"                                                                                                    ",
"                                                                                                    ",
"                                                                                                    ",
"                                                                                                    ",
"                                                                                                    ",
"                ?    b?b?b                                                                          ",
"                                                                                                    ",
"                                                                                                    ",
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
};
view.h:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <SFML/Graphics.hpp>
using namespace sf;
 
sf::View view;
 
void setPlayerCoordinateForView(float x, float y){
    float tempX=x, tempY=y;
    if(x<160) tempX=160;
    if(y>72) tempY=72;
    view.setCenter(tempX, tempY);
}


Вернуться к обсуждению:
Проблема с картой в Mario C++
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2019, 19:04
Готовые ответы и решения:

Проблема с картой памяти
Здравствуйте, форумчане. Возникла такая проблема: карта памяти перестала открываться телефоном, при...

Проблема с картой памяти
Ребята привет.У меня проблема : купил фотик,некоторое время пользовался без проблем,потом хотел...

Проблема со звуковой картой
Купил себе звуковую карту Creative Sound Blaster Z, установил, но проблема в том, что нету звука,...

Проблема с картой памяти microSdHc
В телефоне стоит карта памяти microSDHC 4Гига, комп карту вообще не видит. В Администрировании,...

4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2019, 19:04

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проблема с картой памяти Micro SD
Добрый день! Я произвела форматирование карты памяти Micro SD 2 Gb на телефоне. Потом пыталась...

Проблема с встроенной звуковой картой
Подавал в микрофонный вход сигнал с выхода комбо-усилителя (проще говоря, колонка для...

Bing Maps проблема с картой
Всем привет! Не пойму где проблема? я использую в WPF Bing карту уже который день по среди карту...

Asus P8H77-V LE проблема с сетевой картой
Доброго дня. Есть материнка Asus P8H77-V LE, в ней была произведена замена ЦПУ с i5 3330 на i7...

Lenovo g570 проблема с интегрированной картой
Друзья, так как накрылась дискретная карта, хотел забить на нее и перейти на интегрированную. Но...

Проблема со звуковой картой, не получается вывести звук на 2 канала.
У меня такая проблема. В одной диджейской проге (трактор) можно вывести звук на 2 канала. В сетупе...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.