


При запуске этого кода, с компом случается п*здЕц
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define clean system("cls");
int main()
{
setlocale(LC_ALL, "Russian");
char map[10][11];
int i;
int px=8,py=8;
int pox,poy;
char key;
char menu;
printf("Меню:\n1. Играть\n2. Выйти\n");
printf("Выбор: ");
menu = getch();
if (menu == '1') {
clean;
do
{
sprintf(map[0], "##########");
sprintf(map[1], "# ");
sprintf(map[2], "# ### #");
sprintf(map[3], "# # #");
sprintf(map[4], "# ### #");
sprintf(map[5], "# # #");
sprintf(map[6], "# #### #");
sprintf(map[7], "# ####");
sprintf(map[8], "# #");
sprintf(map[9], "##########");
map[py][px] = "0";
for (i=0;i<10;i++)
{
printf("%s\n",map[i]);
}
printf("x = %d, y = %d",px,py);
pox = px;
poy = py;
key = getch();
if (key == 'w') py--;
if (key == 's') py++;
if (key == 'a') px--;
if (key == 'd') px++;
//ограничение стен
if (map[py][px] == '#')
{
px = pox;
py = poy;
}
clean;
}
while (key != 'e');
}
else return 0;
return 0;
}
В общем я делал текстовую игру на СИ.
Суть игры в том, что есть текстовый лабиринт и его нужно пройти (я не доделал его, это ещё альфа). Игрок отмечен в лабиринте "0"
И при изменении кода, у меня вместо 0 движется другие символы. Сейчас если вы запустите код, там вместо "0" будет ":"
Это первое.
А второе (это пипец просто!), когда я оставил игру запущенным (я сам не заметил этого) и спокойно делал другие дела на компе, на меня посмотрела грустная рожа (синий экран крч).
С компом всё в порядке, я через него и пишу. Я думаю это из-за моей программы, так как Си может хорошо взаимодействовать с железом. И я думаю что где то я в коде зарукожопил и где то неправильно распределил ОЗУ. Я вообще новичок в Си и много чего я мог допустить. Мне один пацан вообще говорил, что stdlib.h иногда бывает не нужным (этот пацан в ответах мейл ру как раз таки был).
Крч, помогите питонисту)))
map - это массив символов
map[py][px] = "0"; // а здесь вы пытаетесь засунуть в него целую строку.
Так как строка "0" - это по сути адрес (32 или 64-бита), то вместо символа 0 туда попадает рандомный кусок этого адреса, который может трактоваться как символ : или любой другой. Символ 0 записыывается так - '0'
Кстати, на современном компиляторе типа VS2022 у вас это бы просто не удалось скомпилировать, а текст ошибок намекнул бы на то, что именно делаете не так
map[py][px] = '0'; // например, на то, что здесь будет выход за границы массива
>синий экран ... Я думаю это из-за моей программы ...взаимодействовать с железом
Прикладные программы в Windows изолированы от какой-либо работы с железом и синий экран вызвать не могут (разве что через вызов метода NtRaiseHardError с правами админа) , синий экран мог возникнуть только если у вас Win98 или неисправное железо/кривые драйвера.
>stdlib.h иногда бывает не нужным
Если не используете - значит не нужный. Если вызываете system() - значит, нужен и придётся инклудить.