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

Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» - C++

Восстановить пароль Регистрация
 
Vergilloo
 Аватар для Vergilloo
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 32
21.02.2013, 12:04     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» #1
Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О». После нажатия любой клавиши она движется вверх. Нужно попасть буквой «O» в среднюю «звездочку»

Как это примерно реализовать? Понимаю, что всю программу тут никто писать не будет, просто подскажите, как это сделать средствами Борланда, без графики, через CONIO.H

Добавлено через 45 минут
up.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 12:04     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О»
Посмотрите здесь:

матрица со случайными числами(наиб.элем. в правом нижнем углу) C++
C++ Составить массив MxN состоящий из 0 и в левом нижнем углу единицы
Определить, какой элемент двумерного массива меньше: расположенный в нижнем правом или в нижнем левом углу C++
Вывести на экран элемент, расположенный в правом нижнем углу массива C++
Как поделить консоль на 2 части: в верхней части вывод, в нижней - замена C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
21.02.2013, 12:57     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» #2
1. Узнать через WinAPI высоту/ширину консоли.
2. Запустить поток который будет перемещать верхние кружки.
3. Ждать в главном потоке нажатия клавиши.
Vergilloo
 Аватар для Vergilloo
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 32
22.02.2013, 22:57  [ТС]     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» #3
Цитата Сообщение от Пaтрик Посмотреть сообщение
1. Узнать через WinAPI высоту/ширину консоли.
2. Запустить поток который будет перемещать верхние кружки.
3. Ждать в главном потоке нажатия клавиши.
Я, кажется, ясно выразился - средствами Борланда, версия 3,1. Через conio.h , gotoxy и прочее

Добавлено через 9 часов 14 минут
Пока вот так. Не могу толком сделать так, чтобы программа завершалась при нажатии ESC, пока приходится через CTRL+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
29
30
31
32
33
34
#include<conio.h>
#include<iostream.h>
#include<dos.h>
 
int main(void)
{
   clrscr();
   int i,j,m,n,esc,start;
   j=1;
   start=getch();
   do
{
   if (start !=27)
   {
   for(i=0;i<74;i++)
   {
   gotoxy(i,j);
   cout<<"***";
   delay(100);
   do clrscr(); while (i>73);
   };
   for(i=74;i>0;i--)
   {
 
   gotoxy(i,j);
   cout<<"***";
   delay(100);
   do clrscr(); while (i<1);
   };
 
           }    } while (start !=27);
 
   return 0;
}
Добавлено через 1 час 44 минуты
Ап.
Vergilloo
 Аватар для Vergilloo
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 32
25.02.2013, 13:58  [ТС]     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» #4
Up.

Добавлено через 2 часа 55 минут
up.
JlightenDev_C++
 Аватар для JlightenDev_C++
61 / 61 / 7
Регистрация: 12.08.2012
Сообщений: 150
25.02.2013, 14:20     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О» #5
Вот, посмотри этот код. (змейка)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
// Тихонов Владимир, [email]Tikhonow.Vladimir@gmail.com[/email]
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#define BLUE 9
#define GREEN 10
#define WHITE 11
#define RED 12
#define YELLOW 14
#define VERTICAL_SPEED 140 // чем больше показатель, тем меньше скорость
#define HORISONTAL_SPEED 70
using namespace std;
//--------------------------------------------------------------------------------------------------------------------------
COORD AppleCord = {0,0}; // координаты яблока
COORD coord[100] = {0}; // коордиаты змеи
int direction = 4; //направление движения : 1 - вверх, 2 - вниз, 3 - влево, 4 - вправо.
int SnakeLength = 6; // длинна змеи
void SetAndDraw(int x, int y, char symbol[100] = "_", int color = WHITE); // умеет двигать курсор, выводить любой текст
//разными цветами
void DrawInfo(); // рисует поле и прочую фигню
void DrawApple(); // рисует яблоко
void SnakeMain(); // управление змейкой
void MoveSnake(); // передвижение змейки
void CheckForEvents(); // а не случилось что со змейкой?
void ShowLoseScreen();
//--------------------------------------------------------------------------------------------------------------------------
int main()
{
    setlocale(LC_ALL, "rus");
    DrawInfo();
    DrawApple();
    SnakeMain();
    return 0;
}
//--------------------------------------------------------------------------------------------------------------------------
void SetAndDraw(int x, int y, char symbol[100], int color)
{
    int temp = 0;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD position = {x, y};
    SetConsoleCursorPosition(hConsole, position);
    if(color != WHITE)
    {
        SetConsoleTextAttribute(hConsole, color);
        temp = 1;
    }
    if(symbol != "_")
        cout << symbol;
    if(temp)
        SetConsoleTextAttribute(hConsole, WHITE);
}
void DrawInfo()
{
    SetAndDraw(32, 0, "Змейка v1.1", YELLOW);
    SetAndDraw(25, 1, "Тихонов Владимир, (c) 2009", YELLOW);
    // рисуем границы
    for(int i = 0; i<80; i++) // верх
        SetAndDraw(i, 3, "#", RED);
    for(int i = 4; i<22; i++) // левая сторона
        SetAndDraw(0, i, "#", RED);
    for(int i = 1; i<80; i++) // низ
        SetAndDraw(i, 21, "#", RED);
    for(int i = 21; i>3; i--) // правая сторона
        SetAndDraw(79, i, "#", RED);
    SetAndDraw(0, 23,"   Управление: ", BLUE);
    cout.put(24);
    SetAndDraw(17, 23, " - вверх, ", BLUE);
    cout.put(25);
    SetAndDraw(28, 23, " - вниз, ", BLUE);
    cout.put(27);
    SetAndDraw(38, 23, " - влево, ", BLUE);
    cout.put(26);
    SetAndDraw(49, 23, " - вправо, ", BLUE);
    SetAndDraw(60, 23, "пробел");
    SetAndDraw(66, 23, " - пауза.", BLUE);
}
void DrawApple()
{
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, YELLOW);
    srand(time(0));
    AppleCord.X = rand() % 78 + 1;
    AppleCord.Y = rand() % 16 + 4;
    SetAndDraw(AppleCord.X, AppleCord.Y);
    cout.put(4);
    SetConsoleTextAttribute(hConsole, WHITE);
}
void SnakeMain()
{
    int choose, speed;
    SetAndDraw(5, 18, "ooooo", GREEN);
    cout.put(1);
    for(int i = 0, k = 10; i <= SnakeLength; i++, k--) // задаём начальные координаты
    {
        coord[i].X = k;
        coord[i].Y = 18;
    }
    while(true)
    {
        if(direction == 1 || direction == 2)
            speed = VERTICAL_SPEED;
        else
            speed = HORISONTAL_SPEED;
        while(!_kbhit()) // пока  ничего не нажато
        {
            MoveSnake();
            Sleep(speed);
        }
        choose = _getch();
        switch(choose)
        {
            case 72: // нажата клавиша вверх
                if(direction != 2)
                    direction = 1;
                break;
            case 80: // нажата клавиша вниз
                if(direction != 1)
                    direction = 2;
                break;
            case 75: // нажата клавиша влево
                if(direction != 4)
                    direction = 3;
                break;
            case 77: // нажата клавиша вправо
                if(direction != 3)
                    direction = 4;
                break;
            case 32: // нажат пробел
                _getch();
        }
    }
}
void MoveSnake()
{
    COORD temp, temp1;
    for(int i = 0; i <= SnakeLength; i++) // новые координаты
    {
        if(i == 0) // для головы в зависимости от направления
        {
            temp = coord[i];
            if(direction == 1)
                coord[i].Y--;
            if(direction == 2)
                coord[i].Y++;
            if(direction == 3)
                coord[i].X--;
            if(direction == 4)
                coord[i].X++;
        }
        else // для туловища просто присваиваем старую координату впередиидущего кружка
        {
            temp1 = temp;
            temp = coord[i];
            coord[i] = temp1;
        }
    }
        SetAndDraw(coord[SnakeLength].X, coord[SnakeLength].Y, " "); // стираем хвост
        SetAndDraw(coord[0].X, coord[0].Y); // рисуем голову
        cout.put(1);
        SetAndDraw(coord[1].X, coord[1].Y, "o", GREEN); // вместо старой головы рисуем кружок
        CheckForEvents();
}
void CheckForEvents()
{
    if(coord[0].X == 0 || coord[0].X == 79 || coord[0].Y == 3 || coord[0].Y == 21) // встретились со стеной
    {
        ShowLoseScreen();
    }
    if((coord[0].X == AppleCord.X) & (coord[0].Y == AppleCord.Y)) // сьели яблоко
    {
        SnakeLength++;
        DrawApple();
    }
    for(int i = 1; i <= SnakeLength; i++) // наткнулись на себя
        if((coord[0].X == coord[i].X) & (coord[0].Y == coord[i].Y))
        {
            ShowLoseScreen();
        }
}
void ShowLoseScreen()
{
    system("cls");
    int i = 3;
    while(i)
    {
        SetAndDraw(33, 11, "Вы проиграли", RED);
        Sleep(600);
        SetAndDraw(33, 11, "            ");
        Sleep(500);
        i--;
    }
    exit(0);
}
Yandex
Объявления
25.02.2013, 14:20     Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О»
Ответ Создать тему
Опции темы

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