Проблема с записью и получением канала (я думаю)Linux

Ответить
Anonymous
 Проблема с записью и получением канала (я думаю)

Сообщение Anonymous »

Я программирую на языке C (среда Linux) видеоигру под названием Plants vs Frogger, по сути Crossy Road, но с лягушкой и некоторыми стреляющими растениями + несколькими крокодилами, которые плавают в центральной части карты. Мне нужно пройти эту игру, используя процессы, в которых я использую каналы для связи между различными частями программы.
У меня возникла проблема при попытке вставить процессы-крокодилы... мой проект состоит из нескольких частей, у нас есть main, где я вспоминаю основные процессы и функцию управления, где я управляю всеми процессами + функции, которые управляют вещами индивидуально (например, движениями).. моя идея создания этих крокодилов заключалась в том, чтобы создать массив процессов и через for заполнить этот массив , у каждого из этих крокодилов есть характеристики: y, направление, скорость и статус (хороший и плохой крокодил). Эти характеристики вставлены в структуру персонажа, которую я также использую для других «игровых персонажей», таких как лягушка и растения. Поэтому я вставил вилку под названием «река» в основную, где я вызываю функцию «functionRiver», в которой я создаю процессы-крокодилы внутри и заполняю их с помощью матрицы, эта матрица будет [8][3]? 8 — это потоки моей реки, а 3 — это: y, направление и скорость, которые затем будут переданы в следующую функцию: funcCrocodile (она вызывается каждый раз, когда в for создается процесс крокодила), где я управляю движениями крокодила с помощью while(1) и присвойте эти значения матрицы символьной структуре. Труба используется в начале функции крокодила и в конце я пишу позицию до и после движений. В функции управления потом через две функции, одну на удаление и одну на печать и идентификацию по id (параметр структуры символа) я понимаю, что это символ-крокодил и происходит удаление или позиция обновляется и потом печатается. Обнаруженная мной ошибка — это обнаружено повреждение стека, поэтому я предполагаю, что передаю что-то, что не могу передать... теперь я загружу часть код: основная часть, две функции река и крокодил + часть функции управления. Заранее благодарю всех, кто может мне помочь, и заранее уточняю, что мой код работал отлично до включения крокодилов.
При необходимости могу выслать и весь проект.
(комментарии и названия написаны на итальянском языке, при необходимости переведу все на английский).

Код: Выделить всё

int main() {

int fineGioco;

int maxX = 0;

int maxY = 0;

WINDOW *schermataGioco;

/*

if(LINES 0){

gettimeofday(&timer, NULL);
diffTempo= (timer.tv_sec - tempoInizio.tv_sec);
tempoGiocoRimasto = MAX_SECONDS-(timer.tv_sec-tempoRimasto.tv_sec);

wattron(schermataGioco,COLOR_PAIR (17));
mvwprintw(schermataGioco,LINES-2,10,"Tempo manche:%d",diffTempo);
mvwprintw(schermataGioco,LINES-2,COLS/2,"Tempo rimasto:%d",tempoGiocoRimasto);
mvwprintw(schermataGioco,LINES - 2, COLS - 21, "Vite rana: %d", viteRana);
wattroff(schermataGioco,COLOR_PAIR (17));

read(pipe, &p, sizeof(p));

/*
for(int i=0;i stacking smash detected
mvwprintw(schermataGioco,10+i, 10+i, "coccodrillo:%d ha coordinate x:%d e y:%d",i,coccodrilli[i].x,coccodrilli[i].y);//Lo stampa
wrefresh(schermataGioco);
sleep(1);
}
*/
if(p.id == rana.id){
cancellaRanaOrPiante(schermataGioco,rana);
rana.y = p.y;
rana.x = p.x;
stampaRanaOrPiante(schermataGioco,rana);

}else if (p.id == 2 || p.id == 3 || p.id == 4){

cancellaRanaOrPiante(schermataGioco,piante[p.id-PIANTA1]);
piante[p.id-PIANTA1]=p;
stampaRanaOrPiante(schermataGioco,piante[p.id-PIANTA1]);
}else if (p.id == 5 || p.id == 6 || p.id == 7 ) {

//Controllo che colore deve essere impostato al passaggio del proiettile in base alle coordinate
if(proiettiliRana[(p.id-PR1)].y >= 5 && proiettiliRana[(p.id-PR1)].y < LINES-5 ){
wattron(schermataGioco,COLOR_PAIR(18));
mvwaddch(schermataGioco,proiettiliRana[(p.id-PR1)].y, proiettiliRana[(p.id-PR1)].x, ' '| COLOR_PAIR(18));
wattroff(schermataGioco, COLOR_PAIR(18));
}else{

wattron(schermataGioco,COLOR_PAIR(19));
mvwaddch(schermataGioco,proiettiliRana[(p.id-PR1)].y, proiettiliRana[(p.id-PR1)].x, ' '| COLOR_PAIR(19));
wattroff(schermataGioco, COLOR_PAIR(19));

}
proiettiliRana[(p.id-PR1)]=p;
wattron(schermataGioco,COLOR_PAIR(21));
mvwaddch(schermataGioco,proiettiliRana[(p.id-PR1)].y, proiettiliRana[(p.id-PR1)].x,'|'| COLOR_PAIR(21));
wattroff(schermataGioco, COLOR_PAIR(21));
}else if (p.id >= PROIETTILEPIANTA1 && p.id = 5 && proiettiliPiante[(p.id-PROIETTILEPIANTA1)].y < LINES-5 ){
wattron(schermataGioco,COLOR_PAIR(18));
mvwaddch(schermataGioco,proiettiliPiante[(p.id-PROIETTILEPIANTA1)].y, proiettiliPiante[(p.id-PROIETTILEPIANTA1)].x, ' '|    COLOR_PAIR(18));
wattroff(schermataGioco, COLOR_PAIR(18));
}else{

wattron(schermataGioco,COLOR_PAIR(19));
mvwaddch(schermataGioco,proiettiliPiante[(p.id-PROIETTILEPIANTA1)].y, proiettiliPiante[(p.id-PROIETTILEPIANTA1)].x, ' '|    COLOR_PAIR(19));
wattroff(schermataGioco, COLOR_PAIR(19));

}

wattron(schermataGioco,COLOR_PAIR(21));
proiettiliPiante[(p.id-PROIETTILEPIANTA1)]=p;
mvwaddch(schermataGioco,proiettiliPiante[(p.id-PROIETTILEPIANTA1)].y, proiettiliPiante[(p.id-PROIETTILEPIANTA1)].x,'|'| COLOR_PAIR(21));
wattroff(schermataGioco,COLOR_PAIR(21));

}else if (p.id >= COCCO1 && p.id 

Подробнее здесь: [url]https://stackoverflow.com/questions/78415313/pipe-writing-and-receiving-problemi-think[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»