Форум программистов, компьютерный форум CyberForum.ru

Препятствия в "Черепашке" - C++

Восстановить пароль Регистрация
 
mvgreen
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 15
15.10.2013, 21:10     Препятствия в "Черепашке" #1
Написал следующую программу, некое подобие школьной "Черепашки"
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main(){
    int j, i, x, y;
    char a, tab[31][31];
    x=0;y=0;
    for(;;){
    system("cls");
        for (j=0; j<10; j++){
            for (i=0; i<10; i++){
                if (x==i && y==j) tab[j][i]='X';
                else tab[j][i]='O';
                cout << tab [j][i];
                }
                cout << "\n";
            }
            vvod:
           a=getch();
           switch(a){
                     case 119: y--; break;
                     case 115: y++; break;
                     case 97: x--; break;
                     case 100: x++; break;
                     default: goto vvod;
                     }}
           return 0; 
        }
Хочется добавить сюда препятствия, т.е. тайлы, на которые невозможно переместиться. помогите сделать это как-нибудь элегантно, у самого получилось очень громоздко, с сильным усложнением всей схемы, и то вставил лишь одно препятствие
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2013, 21:10     Препятствия в "Черепашке"
Посмотрите здесь:

кто нибудь делал прогу на С++ "Эмулятор клавиш с промежутком времени между "нажатиями""?! C++
В одномерном массиве состоящим из "N" вещественных элементов вычислить сумму элемента массива с не четными "N" C++
При сокращении "Фамилия Имя Отчество" к "Фамилия И.О." пропадают "И.О." C++
Небольшой пример. Игра "змейка" - как в ней делают препятствия C++
Наследование классов "Заявка", "Техническое задание", "Техническое предписание" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yll3
1 / 1 / 2
Регистрация: 19.11.2012
Сообщений: 12
16.10.2013, 12:36     Препятствия в "Черепашке" #2
Цитата Сообщение от mvgreen Посмотреть сообщение
for(;;){
Для чего он нужен?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
16.10.2013, 13:22     Препятствия в "Черепашке" #3
Цитата Сообщение от yll3 Посмотреть сообщение
Для чего он нужен?
Бесконечный цикл.

Добавлено через 12 минут
Цитата Сообщение от mvgreen Посмотреть сообщение
некое подобие школьной "Черепашки"
Это что-то типа вот этого?
mvgreen
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 15
16.10.2013, 14:48  [ТС]     Препятствия в "Черепашке" #4
да,только не рисующая. мне сложно было подобрать более подходящее описание. суть в том,что 'Х' передвигается по полю при помощи клавиш WASD
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
16.10.2013, 15:26     Препятствия в "Черепашке" #5
mvgreen, заполните массив tab какими-нибудь отличительными символами, и, при нажатии на кнопку, проверяйте ячейку, в которую хотите переместиться.

C++
1
2
3
4
5
6
7
           switch(a){
                     case 119: if(!tab[x][y-1]=='6') y--; break;
                     case 115: if(!tab[x][y+1]=='6') y++; break;
                     case 97:  if(!tab[x-1][y]=='6') x--; break;
                     case 100: if(!tab[x+1][y]=='6') x++; break;
                     default: goto vvod;
                     }
Добавлено через 6 секунд
Где
C++
1
'6'
стена или яма с кислотой.
mvgreen
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 15
16.10.2013, 18:46  [ТС]     Препятствия в "Черепашке" #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
заполните массив tab какими-нибудь отличительными символами
А как это сделать? очень не дружен с символьными массивами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2013, 19:15     Препятствия в "Черепашке"
Еще ссылки по теме:

C++ Найти номер последней по порядку строки в матрице, содержащей наибольшее количество букв "ш", "щ"
Переписать в файл О все элементы файла К с заменой в них символа "0" на символ "1" и наоборот C++
Переписать в файл О все элементы файла К с заменой в них символа "0" на символ "1" и наоборот C++

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
16.10.2013, 19:15     Препятствия в "Черепашке" #7
Ну для начала у вас вообще он нигде изначально не заполняется.
Второе - он объявлен как
C++
1
tab[31][31];
То есть размер поля тридцать один на тридцать один. А обходите вы его как
C++
1
2
        for (j=0; j<10; j++){
            for (i=0; i<10; i++){
То есть только до десятого элемента. Десять на десять.

Чтобы не возникало таких проблем лучше завести отдельную переменную (или две) под размер и везде писать ее. Таким образом вы сможете изменив только в одном месте значение этой переменной, изменить ее во всей программе:
C++
1
2
3
4
const int n = 31;
tab[n][n];
       for (j=0; j<n; j++){
            for (i=0; i<n; i++){
Теперь по поводу изменения массива - рисования препятствий.
Вам нужно либо в голове представить где у вас будут стены и вручную заполнить именно эти элементы массива:
C++
1
2
3
4
5
6
tab[3][7] = '6';
tab[1][3] = '6';
tab[2][6] = '6';
tab[14][29] = '6';
tab[11][11] = '6';
tab[19][19] = '6';
либо более-менее наглядно:
C++
1
2
3
4
5
6
7
8
9
10
tab[31][31] = { {'O','O','O','O','6','6','6','O','O','O','O','O','O','6','6','6','6','6','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','O','O','O','6','O','O','O','O','O','O','6','O','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','O','O','O','6','O','O','O','O','O','O','6','O','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'6','6','6','6','O','O','6','O','O','O','O','O','O','6','O','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','6','O','O','6','O','O','O','O','O','O','6','6','6','6','6','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','6','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','6','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O'},
                {'O','O','O','6','O','O','6','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O','O'},
/*Так 31 раз*/ 
}
Добавлено через 5 минут
На большом пол наверное не совсем хорошо видно:
C++
1
2
3
4
5
tab[4][4] = { {'O','O','6','O',},
              {'6','O','6','O',},
              {'6','O','6','6',},
              {'6','O','O','O',}
}
Yandex
Объявления
16.10.2013, 19:15     Препятствия в "Черепашке"
Ответ Создать тему
Опции темы

Текущее время: 17:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru