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

Игра в консолевой среде c++ - C++

Восстановить пароль Регистрация
 
hackgamn
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 7
28.10.2013, 07:39     Игра в консолевой среде c++ #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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
 
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
using std::string;
void square(int w, int l);
void gotoxy( int x, int y );
int main()
{int x1,y1,x=0,y=0,u=1,w=10,l=15,i;
square(w,l);
 
 
while (u<10)
{
      
          if (_getch()=='s')    //здесь звездочка двигается вниз
          {
              y1=0;
          x1=0;
          y+=1;
          system("cls");
         
          while(y1<y)
          {   printf("\n");
              y1+=1;
              
          }
          while (x1<x)
          {cout <<" ";
          x1+=1;
          }
          
          cout<<"*";
          
          }
               if (_getch()=='d') //направо
               {y1=0;
               square (w,l);
               x1=0;
               x+=1;
               system("cls");
               
               while(y1<y)
          {   printf("\n");
              y1+=1;
              
          }
               while (x1<x)
               {cout <<" ";
               x1+=1;
               }
                 cout<<"*";
}
                    if (_getch()=='a') //влево
                    {x1=0;
                    y1=0;
                    x-=1;
                    system("cls");
                    
                     while(y1<y)
          {   printf("\n");
              y1+=1;
              
          }
                    while (x1<x)
                    {cout<<" ";
                    x1+=1;}
                    cout<<"*";
                    }
                    if (_getch()=='w')  \\вверх
                    {
              y1=0;
          x1=0;
          y-=1;
          system("cls");
         
          while(y1<y)
          {   printf("\n");
              y1+=1;
              
          }
          while (x1<x)
          {cout <<" ";
          x1+=1;
          }
          
          cout<<"*";
          
          }
}
 
 
_getch();
return 0;
}
 
void square(int w, int l)
{int i,j;
 
 
 
for (i=0;i<=l;i++)
{for (j=0;j<=w;j++)
{    if ((j==0)||(j==w))
cout <<"w";
else cout <<" ";
}
cout<<endl;}
for (i=0;i<=w;i++)
{cout<<"w";}
}

Как двигать звездочку поверх напечатанных пробелов и не давать ей перейти w?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 07:39     Игра в консолевой среде c++
Посмотрите здесь:

C++ простые программы в среде Турбо Си++
C++ О среде разработки
fstream в многопроцессной среде C++
C++ Потоки в среде Borland
C++ Страуструп, и траблы в среде программирования
C++ Игра слов, игра Scrabble
C++ В какой среде?
В какой среде программировать? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
28.10.2013, 10:48     Игра в консолевой среде c++ #2
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
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>
 
using namespace std;
using std::string;
void square(int w, int l);
void gotoxy( int x, int y );
 
int main()
{
int x1, y1, x = 0, y = 0, u = 1, w = 10, l = 15, i;
square( w, l);
 
 
while( u < 10) {
    if( _getch() == 's') { //здесь звездочка двигается вниз
        y1 = 0;
        x1 = 0;
        y += 1;
        system( "cls");
 
        while( y1 < y){ 
            printf("\n");
            y1 += 1;
        }
        while( x1 < x) {
            cout<<" ";
            x1 += 1;
        }
        cout<<"*";
    }
    
    if( _getch() == 'd') { //направо
        y1 = 0;
        square( w, l);
        x1 = 0;
        x += 1;
        system( "cls");
 
        while( y1 < y) {
            printf("\n");
            y1 += 1;
        }
        while( x1 < x) {
        cout<<" ";
        x1 += 1;
        }
        cout<<"*";
    }
    
    if( _getch() == 'a') { //влево
        x1 = 0;
        y1 = 0;
        x -= 1;
        system("cls");
 
        while( y1 < y) {
            printf("\n");
            y1 += 1;
        }
        while( x1 < x) {
            cout<<" ";
            x1 += 1;
        }
        cout<<"*";
    }
 
    if( _getch() == 'w') { //вверх
        y1 = 0;
        x1 = 0;
        y -= 1;
        system("cls");
 
        while( y1 < y) {
            printf("\n");
            y1 += 1;
        }
        while( x1 < x) {
        cout<<" ";
        x1 += 1;
        }
        cout<<"*";
    }
}
 
 
_getch();
return 0;
}
 
void square( int w, int l)
{int i, j;
 
for( i = 0; i <= l; i++) {
    for( j = 0; j <= w; j++) {
        if(( j == 0) ||( j == w))
        cout<<"w";
        else cout <<" ";
    }
    cout<<endl;
}
for( i = 0; i <= w; i++) {
    cout<<"w";
}
}
так читабельнее будет, как мне кажется. Во вторых ф-ия gotoxy я один ее в коде не вижу? Я б на твоем месте сделал сначала прорисовку прямоугольника норм, после чего отслеживал нажатие клавиши от пользователя и по событию вызвал ф-ию проверки нажатой клавиши(вверх, вниз, влево, вправо) тогда проверял могу ли я сдвинуть звездочку по направлению нажатой клавиши и не врезаться в стену, если можно, то сдвигал бы звезду на общей картинке и по окончанию ф-ии перерисовывал бы прямоугольник. На работе компилятора С++ нету,тут пишу на других языках, могу разве что вечером написать код если за день не напишут.
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
30.10.2013, 10:43     Игра в консолевой среде c++ #3
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
class  rectangle
{
private:
    int hieg;
    int width;
    int x =1;
    int y =1;
    bool flag = false;
public:
    rectangle() : hieg(10), width(10)
    {
        flag = false;
    }
    rectangle(int h, int w) : hieg(h), width(w)
    {
        flag = true;
    }
    void SetCoord( char c) 
    {
        switch (c)
        {
        case 'w':  {  if (x != 1)
                       x -= 1;
        }; break;
        case 's':  {  if (!((x == hieg - 2) && (flag == true)) || ((x == 8) && (flag == false)))
                       x += 1;
                     
        }; break;
        case 'a':  { if (y != 1)
                       y -= 1;          
        }; break;
        case 'd':  {  if (!((y == width - 2) && (flag == true)) || ((y == 8) && (flag == false)))
                       y += 1;
            
        }; break;
        };
    }
    bool show()
    {
        for (int i = 0; i < hieg; i++)
        {
            for (int j = 0; j < width; j++)
            {
                if (( i == 0) || (( i == hieg - 1) && ( flag == true)) || ((i == 9) && ( flag == false)))
                {
                    cout << "*";
                }
                else
                {
                    if ( ( j == 0) || (( j == width - 1) && ( flag == true)) || (( j == 9) && ( flag == false)))
                    {
                        cout << "*";
                    }
                    else
                    {
                        if ((i == x) && (j == y))
                        {
                            cout << "@";
                        }
                        else
                        {
                            cout << " ";
                        }
                    }
                }
            }
            cout << endl;
        }
        return true;
    }
    bool ShowFlag()
    {
        return flag;
    }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    system("cls");
    int h;
    int w;
    cout << "Введите высоту : ";
    cin >> h;
    cout << endl<< "Введите ширину : ";
    cin >> w;
    rectangle rec( h, w);
    cout << rec.ShowFlag() << endl;
    rec.show();
    char c = 0;
    int x = 1;
    int y = 1;
    while (c != 'e') 
    {
        system("cls");
        rec.show();
        c = getch();
        if (c == 'w' || c == 's' || c == 'a' || c == 'd')
        {
            rec.SetCoord(c);
        }
        if (c == 'e')
            cout << "Выходим...";
    }
    
    getche();
    return 0;
}
Добавлено через 11 часов 19 минут
думаю так будет проще написать
Yandex
Объявления
30.10.2013, 10:43     Игра в консолевой среде c++
Ответ Создать тему
Опции темы

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