Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
цешник
0 / 0 / 0
Регистрация: 21.08.2007
Сообщений: 13
1

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

30.08.2007, 11:42. Просмотров 2379. Ответов 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
Ответы с готовыми решениями:

Исключительный доступ обьекта к полям другого обьекта avr/c++
исключительный доступ обьекта к полям другого обьекта avr/c++ добрый день ...

Передвижение курсора
Необходимо осуществить передвижение курсора с возможностью приостановки и...

Передвижение по строке
Здравствуйте, есть такая проблемка: Вот например есть строка: char* string =...

Передвижение по строчке
Проблема такова: есть строчка: char* text = &quot;text1 text2&quot;; Я ищу первый...

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

1
bor.is
0 / 0 / 3
Регистрация: 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

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

Передвижение курсора в c++
Здравствуйте, Я начал писать небольшую программу которая должна выполнять...

Передвижение стрелками
Как переключаться между элементами списка в консоли с помощью стрелок? И если...


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

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

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