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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
цешник
0 / 0 / 0
Регистрация: 21.08.2007
Сообщений: 13
#1

Передвижение обьекта - C++

30.08.2007, 11:42. Просмотров 2274. Ответов 1
Метки нет (Все метки)

Нужно написать программу передвижения обьекта.Программа показывает поле
XXXXX
XIOOX
XOOOX
XOOOX
XOOOX
XOOOX
XXXXX
I-обьект
O-точка на которую может переместиться обьект
X-стена
Используемые кнопки:стрелки:вправо,влево,вверх,вниз
Каждая стрелка перемещает обьект на один O и соответсвенно направлению стрелки
Вот что я пишу
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
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
 
int main()
{
char l[5],m[5],n[5],b,o,e,h,i;
l[1]='o';
l[2]='o';
l[3]='o';
l[4]='o';
l[5]='o';
m[1]='o';
m[2]='o';
m[3]='o';
m[4]='o';
m[5]='o';
n[1]='o';
n[2]='o';
n[3]='o';
n[4]='o';
n[5]='o';
cout<<"XXXXX"<<endl;
for(e=0;e<5;e++)cout<<"X"<<l[5]<<m[5]<<n[5]<<"X"<<endl;
cout<<"XXXXX"<<endl;
l[1]='i'=l[e];
switch()
{
case WM_KEYDOWN:if(i<5){'i'=l[e+1];}
case WM_KEYUP:if(i>1){'i'=i[e-1];}
case WM_KEYRIGHT:if('i'==l[e]){'i'=m[e];}
case WM_KEYRIGHT:if('i'==m[e]){'i'=n[e];}
case WM_KEYLEFT:if('i'==n[e]){'i'=m[e];}
case WM_KEYLEFT:if('i'==m[e]){'i'=l[e];}
}
Проверьте пожалуйста,что у меня там неправильно.Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2007, 11:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передвижение обьекта (C++):

Исключительный доступ обьекта к полям другого обьекта avr/c++ - C++
исключительный доступ обьекта к полям другого обьекта avr/c++ добрый день есть два обьекта Data &amp; Math - Data - элемент...

Передвижение курсора в c++ - C++
Здравствуйте, Я начал писать небольшую программу которая должна выполнять заданный алгоритм действий. Суть в чем: 1)Ищем например...

Передвижение объекта - C++
Подскажите плиз Вводятся 3 числа. A, B, N. A - движение вперед, B - движение назад, N - количество дней. Задача: объект находится в...

Передвижение по строке - C++
Здравствуйте, есть такая проблемка: Вот например есть строка: char* string = &quot;Text=Text2&quot;; Чтобы пробежаться по символам и найти знак...

Передвижение курсора - C++
Необходимо осуществить передвижение курсора с возможностью приостановки и возобновления.Как сделать например если нажать клавишу влево...

Передвижение стрелками - C++
Как переключаться между элементами списка в консоли с помощью стрелок? И если кто знает подскажите где можно обучиться делать оконные...

1
bor.is
0 / 0 / 1
Регистрация: 29.08.2007
Сообщений: 9
30.08.2007, 14:07 #2
ну во-первых если ты создаёшь массив l[5] то у него будут элементы с индексами { 0, 1, 2, 3, 4 } - элементов 5, но индексы с нуля, а не { 1, 2, 3, 4, 5 }
во вторых зачем так мучатся с одномерными массивами - создай двумерный и вообще лучше сделать чтобы карта читалась с файла - удобнее намного

потом интересная строка
Код
l[1]='i'=l[e];
она будет выполняться так
Код
l[1]=('i'=l[e]);
тоесть сначала литере 'i' будет попытка присвоить то что по индексу e в массиве l - думаю здесь определённо будет будет какая-то ошибка при компиляции
я вообще по этой строке не представляю что автор хотел сделать )

ещё одно замечание в блоке switch после каждого case нужно делать break;
вот попробуй
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
 
int main () {
   int i = 2; // 0..5
   switch (i) {
      case 0 : { 
         printf ("catch case 0, i equal %d\n", i);
      };
      case 1 : {
         printf ("catch case 1, i equal %d\n", i);
      };
      case 2 : {
         printf ("catch case 2, i equal %d\n", i);
      };
      case 3 : {
         printf ("catch case 3, i equal %d\n", i);
      };
      case 4 : {
         printf ("catch case 4, i equal %d\n", i);
      };
   };
   return 0;
};
выполняй с разными i и погляди на результат, чтобы избежать этого в конце каждого case нужно ставить break;
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
#include <cstdio>
 
int main () {
   int i = 2; // 0..5
   switch (i) {
      case 0 : { 
         printf ("catch case 0, i equal %d\n", i);
         break;
      };
      case 1 : {
         printf ("catch case 1, i equal %d\n", i);
         break;
      };
      case 2 : {
         printf ("catch case 2, i equal %d\n", i);
         break;
      };
      case 3 : {
         printf ("catch case 3, i equal %d\n", i);
         break;
      };
      case 4 : {
         printf ("catch case 4, i equal %d\n", i);
         break;
      };
   };
   return 0;
};
вот теперь всё в порядке

с кода в case я вообще прозревал, вообщем вот как я это себе представляю
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <cstdio>
 
const int maxy = 10, maxx = 10;
 
char a[maxx][maxy]; // field
int x, y; // field limits
 
int Ix, Iy; // coordinats of I
 
void makei (const int x, const int y) {
   Ix = x;
   Iy = y;
   a[x][y] = 'I';
};
 
void print () {
   int ix, iy; // help variables;
   iy = 0;
   do {
      ix = 0;
      do {
         putchar (a[ix][iy]);
      } while (++ix != x);
      putchar ('\n');
   } while (++iy != y);
};
 
void reading () {
   FILE *in = fopen ("sol.in", "r"); // change "sol.in" to your file name
   fscanf (in, "%d%d\n", &x, &y);
   int ix, iy = 0; // help variables;   
   iy = 0;
   do {
      ix = 0;
      do {
         a[ix][iy] = fgetc(in);
      } while (++ix != x);
      fgetc (in); // drop end of line
   } while (++iy != y);
};
 
void move () {
   char ch;
   /*
    * e - exit
    * w - up
    * s - down
    * a - left
    * d - right
    */
   printf ("e-exit, w-up, s-down, a-left, d-right; command: ");
   while (ch = getchar(), ch != 'e') {
      getchar();
      switch (ch) {
         case 'w' : {
            if ( (Iy != 0) && (a[Ix][Iy - 1] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[Ix][--Iy] = 'I';
            };
            break;
         };
         case 's' : {
            if ( (Iy != (y - 1)) && (a[Ix][Iy + 1] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[Ix][++Iy] = 'I';
            };
            break;       
         };
         case 'a' : {
            if ( (x != 0) && (a[Ix - 1][Iy] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[--Ix][Iy] = 'I';
            };
            break;
         };
         case 'd' : {
            if ( (x != (x - 1)) && (a[Ix + 1][Iy] != 'X') ) {
               a[Ix][Iy] = 'O';
               a[++Ix][Iy] = 'I';
            };
            break;
         };
      };
      print ();
      printf ("e-exit, w-up, s-down, a-left, d-right; command: ");
   };
};
 
int main () {
   reading ();
   makei (1, 1);
   move ();
   return 0;
};
с помощью makei устанавливай точку I там, где тебе необходимо (помни про индексы с нуля)
создай файл формата: x, y, поле
замени "sol.in" на первой строке в reading () на свой файл, я использовал такой
Код
5 7
XXXXX
XOOOX
XOOOX
XOOOX
XOOOX
XOOOX
XXXXX
выполни в консоли и нажимай e для выхода, w для передвижения вверх, s вниз, a влево, d вправо, после каждой команды жми enter
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2007, 14:07
Привет! Вот еще темы с ответами:

Передвижение шарика - C++
Нужно заставить шар двигаться и менять направление, когда достигает стенки экрана. Пытался сделать векторное движение ничего не получилось....

Передвижение по строчке - C++
Проблема такова: есть строчка: char* text = &quot;text1 text2&quot;; Я ищу первый пробел: char* ch; ch = strchr(text, ' '); Потом...

Передвижение по стрелочкам в консоли. - C++
Всем привет!!!Помогите пожалуйста сделать передвижение с помощью стрелочек по списку...(в консоли....)

Передвижение графических объектов - C++
Перемещать треугольник по диагонали с заданным шагом и задержкой в полторы секунды


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru