Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 07.03.2021
Сообщений: 7

Глупая змейка

29.06.2022, 11:25. Показов 1311. Ответов 11

Студворк — интернет-сервис помощи студентам
Пишу змейку, о погромировании знаю чуть больше чем как сделать простенький класс, но уж больно хотелось попробовать геймдев на вкус.
Показывает вот такое
Unhandled exception at 0x00007FF6A187295F in znake.exe: 0xC0000005: Access violation writing location 0x00007FF207EE57C4.
по отношению к символу верхней границы карты.
Что сделать чтобы было


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
#include <iostream>
#include <windows.h>
#include "map_obj.cpp"
 
char map[mapsize][mapsize];
 
void draw(char draw_map[mapsize][mapsize]);
 
 
int main() {
    using std::cout;
    //V first time map filling V 
    for (int y = mapsize; y > 0; y--) {       
        for (int x = 0; x < mapsize; x++) {
            map[x][y] = ' ';
            cout << map[x][y];  
        }
    cout << "\n";
    } 
 
    map_obj upper_border;
    upper_border.set_symbol('#');
    upper_border.set_coords(21, 0, 21, 21);
    
    
    upper_border.put_obj(map);
    
 
    
 
    //snake in progress
    while (true) {                      
        cout << "\n";
 
        draw(map);
        
        
        cout << "\n\n\n\n\n\n\n\n";
 
        Sleep(1000);
    }
 
void draw(char draw_map[][mapsize]) {  
    using std::cout;
 
    for (int y = mapsize; y > 0; y--) {
        for (int x = 0; x < mapsize; x++) {
            cout << draw_map[x][y];
        }
        cout << "\n";
    }
}
}
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
#include "mapsize_const.cpp"
 
 
class map_obj {
private:
    char symbol;
public:
    int coords[4]; //startx starty endx endy
    
 
    char get_symbol() {
        
        return symbol;
    
    }
 
 
    void set_coords(int xstart, int ystart, int xend, int yend) {
 
        int coords[] = { xstart,ystart,xend,yend };
    }
    void set_symbol(char obj_symbol) {
 
        symbol = obj_symbol;
 
    }
    
    //placing object on map 
 
    
    void put_obj(char put_obj_map[][mapsize]) {
        for (int y = coords[2]; y < coords[3]+1; y++) {
 
 
            for (int x = coords[0]; x < coords[1]+1; x++) {
 
 
                put_obj_map[x][y] = symbol;
            }
        }
    } 
    
};
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.06.2022, 11:25
Ответы с готовыми решениями:

Глупая просьба...
Нужна блок-схема приведенного ниже кода. Кто сделает - подгоню семизнак! #include &lt;iostream.h&gt; #include &lt;conio.h&gt; ...

Глупая ошибка
Кто может подсказать что не так? Выдает ошибки: 59 expected unqualified-id before '{' token 68 expected '}' at end of input ...

Глупая сортировка массива
Идея состоит в том, что бы идти по массиву справа на лево и искать меньший элемент чем предыдущий, и если таковой нашёлся - поменять их...

11
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.06.2022, 11:29
Лучший ответ Сообщение было отмечено ch-chaynik как решение

Решение

Цитата Сообщение от ch-chaynik Посмотреть сообщение
C++
1
2
3
4
5
char map[mapsize][mapsize];
//...
    for (int y = mapsize; y > 0; y--) {       
        for (int x = 0; x < mapsize; x++) {
            map[x][y] = ' ';
Выход за пределы массива на первой же итерации.
0
0 / 0 / 0
Регистрация: 07.03.2021
Сообщений: 7
29.06.2022, 11:33  [ТС]
ничего он никуда не выходит, mapsize = 22. И это константа
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.06.2022, 11:36
Цитата Сообщение от ch-chaynik Посмотреть сообщение
ничего он никуда не выходит, mapsize = 22. И это константа
И какой индекс имеет последний элемент массива?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.06.2022, 11:37
Цитата Сообщение от ch-chaynik Посмотреть сообщение
глупая змейка
Графические игры делаем на канве/окне(или похожих контекстах), тогда все будет по другому, и результат, и картинка и опыт.
0
0 / 0 / 0
Регистрация: 07.03.2021
Сообщений: 7
29.06.2022, 11:39  [ТС]
mapsize_const.cpp
C++
1
const int mapsize = 22;
Добавлено через 1 минуту
21 только вот он до 22 не доходит там же строгое >0 да и вообще если я символ напрямую указываю все работает
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.06.2022, 11:40
Цитата Сообщение от ch-chaynik Посмотреть сообщение
21 только вот он до 22 не доходит
Давайте посмотрим на первую итерацию
C++
1
2
3
    for (int y = 22; y > 0; y--) { //mapsize = 22   
        for (int x = 0; x < 22; x++) {
            map[0][22] = ' ';//y == mapsize oops!
1
0 / 0 / 0
Регистрация: 07.03.2021
Сообщений: 7
29.06.2022, 11:47  [ТС]
Ну пока как есть пишем а там посмотрим

Добавлено через 3 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Давайте посмотрим на первую итерацию
вообще странно почему тогда все работает
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
29.06.2022, 11:54
Цитата Сообщение от ch-chaynik Посмотреть сообщение
вообще странно почему тогда все работает
Цитата Сообщение от ch-chaynik Посмотреть сообщение
Unhandled exception at 0x00007FF6A187295F in znake.exe: 0xC0000005: Access violation writing location 0x00007FF207EE57C4.
Так работает или не работает?
0
0 / 0 / 0
Регистрация: 07.03.2021
Сообщений: 7
29.06.2022, 11:57  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Так работает или не работает?
заккоментировал я вызов метода границы верхней и он выводит мне пустую карту, хотя должен ругаться на выход за пределы массива
0
7 / 4 / 2
Регистрация: 10.06.2022
Сообщений: 49
30.06.2022, 22:02
Цитата Сообщение от ch-chaynik Посмотреть сообщение
#include <windows.h>
Разве не легче использовать Qt?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.07.2022, 08:24
Цитата Сообщение от ch-chaynik Посмотреть сообщение
заккоментировал я вызов метода границы верхней и он выводит мне пустую карту
Это не удивительно.

Цитата Сообщение от ch-chaynik Посмотреть сообщение
хотя должен ругаться на выход за пределы массива
Нет, не должен. В таких языках как С и С++ компилируемость программы и отсутствие видимых ошибок при выполнении не гарантирует, что в программе их нет.

Для организации циклов "с конца" есть классический прием:
C++
1
2
3
4
5
6
    for (int y = mapsize; y-- > 0; ) {
        for (int x = 0; x < mapsize; x++) {
            cout << draw_map[x][y];
        }
        cout << "\n";
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2022, 08:24
Помогаю со студенческими работами здесь

Застрял в цикле. Глупая сортировка матрицы
Было дано задание. Отсортировать строки матрицы по сумме их элементов. Написал такую программу, основанную на методе &quot;глупой...

Глупая ошибка, но до сих пор неисправленная ошибка: ";"
Никак не получается исправить глупую ошибку связанную с постановкой &quot;;&quot;. Вроде ошибка простая, но тем не менее никак не могу её исправить....

змейка с++
ребят,вот наработки,не могу придумать нормальный алгоритм перемещения змейки,точнее перемещение,когда она будет увеличиваться... ведь ей...

Змейка
Решил написать собственный аналог змейки. Создал костяк программы, и у меня возникло три вопроса. 1. Змейка отказывается двигаться...

Змейка
Надо заполнить массив нулями по змейке как на рисунке. Не могу придумать как заполнять нулями по строкам( Вот код : #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru