Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 14:04   #1
mikailhome
 
Регистрация: 03.12.2017
Сообщений: 5
По умолчанию Помогите с таблицами "tab[x][y]" на С.

Доброго времени суток.

Задача сделать консольную игру где персонаж(perso) собирает монетки на карте(map). Для этого я сделал две таблицы, и вроде мой персонаж передвигается по карте но никак не взаимодействует с монентами.
Код:
int golden_coin(int perso[2], int map[20][20]){
	int COINS = 0;
	int i, j ;
	for (i = 0 ; i < 20 ; i = i + 1) { //инициализация монет
		for (j = 0; j < 20;j = j + 1){
			map[18][2] = 5 ;
                        map[10][3] = 5 ;
                        map[4][4] = 5 ;
                        map[15][8] = 5 ;
                        map[6][9] = 5 ;
			map[3][12] = 5 ;
                        map[11][12] = 5 ;
                        map[14][15] = 5 ;
                        map[7][17] = 5 ;
                        map[1][18] = 5 ;
			if(map[i][j]==5){ //если на какой то позиции значение=5
				if (perso[0]==i && perso[1]==j){//и там есть перс
					map[i][j] = 0 ;//5 меняется на 0
					COINS= COINS++ ;//+1 монета
				}
			}
		}
	}
	return COINS;
}
Демонстрация на скринах.
Когда на встаю на монетку, счетчик не увиличивается на +1, а когда я ухожу с монеты значeние 5 не меняется на 0.
Кто разбирается, помогите! :О
Изображения
Тип файла: png 1.PNG (18.2 Кб, 138 просмотров)
Тип файла: png 2.PNG (20.5 Кб, 141 просмотров)
Тип файла: png 3.PNG (22.2 Кб, 132 просмотров)

Последний раз редактировалось mikailhome; 10.12.2017 в 14:25.
mikailhome вне форума Ответить с цитированием
Старый 10.12.2017, 14:18   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
COINS= COINS++ ;//+1 монета
Вы явно не понимаете как это работает. Упрощенно и отбросив особенности, то будет что-то типа
Код:
temp = COINS;
COINS++;
COINS = temp;
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 14:24   #3
mikailhome
 
Регистрация: 03.12.2017
Сообщений: 5
По умолчанию

Спасибо что ответили.

Я исправил код, но это не помогло
mikailhome вне форума Ответить с цитированием
Старый 10.12.2017, 14:38   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Как исправили?
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 14:41   #5
mikailhome
 
Регистрация: 03.12.2017
Сообщений: 5
По умолчанию

Код:
int goldenCoins(int perso[2], int map[20][20]){
	int COINS = 0, temp;
	int i, j ;
	for (i = 0 ; i < 20 ; i = i + 1) {
		for (j = 0; j < 20;j = j + 1){
			map[18][2] = 5 ;map[10][3] = 5 ;map[4][4] = 5 ;map[15][8] = 5 ;map[6][9] = 5 ;
			map[3][12] = 5 ;map[11][12] = 5 ;map[14][15] = 5 ;map[7][17] = 5 ;map[1][18] = 5 ;
			if (perso[2]==map[i][j]){
				if (map[i][j]==5){
					map[i][j] = 0 ;
					temp = COINS;
					COINS++ ;
					COINS = temp ;
				}
			}
		}
	}
	return PIECES;
}
Примерно так
mikailhome вне форума Ответить с цитированием
Старый 10.12.2017, 14:50   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Вы даже не пытаетесь думать? Я вам написал, как написанная вами строчка работает и она работает неправильно, а вы тупо скопировали. Ну возьмите конкретную цифру 1 и подставьте вместо COINS, посмотрите. что будет в конце.

Когда, все-таки надоест тупить просто напишите инкремент.
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 17:59   #7
mikailhome
 
Регистрация: 03.12.2017
Сообщений: 5
По умолчанию

Я психанул и почти полностью переписал код.
В итоге получилось что-то такое:
Код:
int recup_piece (int perso[2], int carte[20][20]){
	int PIECES = 0;
	if (perso[0] == 18 && perso[1] == 2){
		if(carte[18][2] == 5){
			PIECES=PIECES + 1;
			carte[18][2] = 0;
		}
	}
	if(carte[10][3] == 5){
		if (perso[0] == 10 && perso[1] == 3){
			carte[10][3] = 0;
			PIECES = PIECES +1;		
		}
	}
	if (perso[0] == 4 && perso[1] == 4){
		if(carte[4][4] == 5){
			PIECES = PIECES + 1;
			carte[4][4] = 0;
		}
	}	
	if (perso[0] == 15 && perso[1] == 8){
		if (carte[15][8] == 5){
			PIECES = PIECES + 1;
			carte[15][8] = 0;
		}
	}	
	if (perso[0] == 6 && perso[1] == 9){
		if(carte[6][9] == 5){
			PIECES = PIECES + 1;
			carte[6][9] = 0;
		}
	}	
	if (perso[0] == 3 && perso[1] == 12){
		if(carte[3][12] == 5){
			PIECES = PIECES + 1;
			carte[3][12] = 0;
		}
	}	
	if (perso[0] == 11 && perso[1] == 12){
		if(carte[11][12] == 5){
			PIECES = PIECES + 1;
			carte[11][12] = 0;
		}
	}	
	if (perso[0] == 14 && perso[1] == 15){
		if(carte[14][15] == 5){
			PIECES = PIECES + 1;
			carte[14][15] = 0;
		}
	}	
	if (perso[0] == 7 && perso[1] == 17){
		if(carte[7][17] == 5){
			PIECES = PIECES + 1;
			carte[7][17] = 0;
		}
	}	
	if (perso[0] == 1 && perso[1] == 18){
		if(carte[1][18] == 5){
			PIECES = PIECES + 1;
			carte[1][18] = 0;
		}
	}
	return PIECES;
}
И еще я изменил main и все заработало.
Код:

int main (){
	int carte[20][20];
	int perso[2];
	init_carte(perso, carte);
	int PIECES_DOR = 0;
	while(1){
	int PIECES = recup_piece (perso, carte);
	PIECES_DOR = PIECES_DOR + PIECES;
	printf("Pieces d'Or: 	%d\n", PIECES_DOR);
	affiche_carte(perso, carte);
	deplacement(perso, carte);

	}
	return 0;
}
Спасибо за совет, иногда рассчитывая на чужую помошь совершенно забываешь думать своей головой.
mikailhome вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23