Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 03.10.2018
Сообщений: 19
1

Игра с перемещением персонажа и врагов

10.10.2018, 19:33. Показов 2799. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать программу, с полем 80x80. Программа должна выбивать на экран информацию о местоположении Главного героя и трех врагов. Также в игре присутствует "Клад". Когда персонаж достигает клада, то игра заканчивается. Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2018, 19:33
Ответы с готовыми решениями:

Ветвление + рандом: как сделать так, чтобы при совпадении квадрата местоположения врага и персонажа игра оканчивалась?
Ветвление + рандом. Задача " Найди клад " Как в rand поставить границы ( от 1, к примеру, до...

Слон бьет врагов ???
Приветствую, всех! Кто то скажет опять эти шахматы, сам спекся :wall: когда получил задание. Но...

Pool Врагов в зависимости от положения персонажа
Здравствуйте всем. Google ни чем не помог, обращаюсь к вам. Есть 8 врагов (Создаются при...

Попытка написать машину состояний(персонажа,врагов и прочее) - RPG
Всем привет, начал заниматься в последнее время рефакторингом свое кода. И понял, что без...

7
5 / 4 / 1
Регистрация: 04.09.2018
Сообщений: 38
11.10.2018, 09:25 2
Так вы будите долго искать помощь )
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
11.10.2018, 23:41 3
Лучший ответ Сообщение было отмечено AndreiCyber как решение

Решение

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
195
196
197
198
199
200
201
202
#include <iostream> 
#include <vector>
#include <string>
#include <queue>
#include <functional>
#include <Windows.h>
void initgame();
void fulldraw();
void redraw();
void input();
void move_bots(COORD&);
void gameover();
using namespace std;
vector<string> world = {
    "##########################",
    "#                        #",
    "#       #      #         #",
    "#       #   T  #         #",
    "#       ##################",
    "#       #      #         #",
    "#   F   #      #         #",
    "#                 F      #",
    "#       #      #         #",
    "#       #      #         #",
    "#       #      #         #",
    "#           P            #",
    "##########################"
};
COORD player;
COORD gold;
vector<COORD> foes;
HANDLE out;
const COORD directions[] = { {0,1}, {1,0},{0,-1}, {-1,0} };
int time_numerator, time_denominator;
bool gameplay = true;
bool operator ==(COORD left, COORD right)
{
    return left.X == right.X && left.Y == right.Y;
}
bool operator !=(COORD left, COORD right)
{
    return left.X != right.X || left.Y != right.Y;
}
int main() {
 
 
    initgame();
    fulldraw();
    while (gameplay)
    {
        redraw();
        Sleep(100);
        input();
        
        if (++time_numerator > time_denominator)
        {
            time_numerator -= time_denominator;
            for (auto& foe : foes)
            {
                move_bots(foe);
                if (foe == player)
                    gameover();
            }
        }
    }
    return 0;
}
void input() {
    if (GetAsyncKeyState(VK_UP) && world[player.Y - 1][player.X] == ' ')
        --player.Y;
    if (GetAsyncKeyState(VK_DOWN) && world[player.Y + 1][player.X] == ' ')
        ++player.Y;
    if (GetAsyncKeyState(VK_LEFT) && world[player.Y][player.X-1] == ' ')
        --player.X;
    if (GetAsyncKeyState(VK_RIGHT) && world[player.Y][player.X + 1] == ' ')
        ++player.X;
    for (auto& foe : foes)
        if (foe == player)
            gameover();
}
void redraw() {
    static COORD p = { 1,1 }, g = { 1,1 };
    static vector<COORD> f;
    if (player != p) {
        SetConsoleCursorPosition(out, p);
        cout << " ";
        p = player;
        SetConsoleCursorPosition(out, p);
        cout << "P";
    }
    if (gold != g) {
        SetConsoleCursorPosition(out, g);
        cout << " ";
        g = gold;
        SetConsoleCursorPosition(out, g);
        cout << "G";
    }
    for (int i=0; i<foes.size(); ++i)
        if (i >= f.size()) {
            f.push_back(foes[i]);
            SetConsoleCursorPosition(out, foes[i]);
            cout << "F";
        }
        else if (f[i]!=foes[i]) {
            SetConsoleCursorPosition(out, f[i]);
            cout << " ";
            f[i] = foes[i];
            SetConsoleCursorPosition(out, f[i]);
            cout << "F";
        }
}
void fulldraw() {
    SetConsoleCursorPosition(out, { 0,0 });
    for (auto row : world)
        cout << row << endl;
}
void initgame() 
{
    out = GetStdHandle(STD_OUTPUT_HANDLE);
    time_numerator = 3;
    time_denominator= 5;
    for (SHORT i=0; i<world.size(); ++i)
        for (SHORT j=0; j<world[i].size(); ++j)
            switch (world[i][j])
            {
            case 'T':
                gold = { j, i };
                world[i][j] = ' ';
                break;
            case 'P':
                player = { j, i };
                world[i][j] = ' ';
                break;
            case 'F':
                foes.push_back({ j, i });
                world[i][j] = ' ';
                break;
            default:
                break;
            }
}
struct astar {
    int x, y;
    int dist;
    int initial_dx, initial_dy;
};
struct best_way
{
    constexpr bool operator()(const astar& left, const astar& right) const
    {
        return left.dist > right.dist;//chooses the worst factor in order to lace it deeper in the queue
    }
};
void move_bots(COORD& foe) {
    vector<vector<bool> > visited(world.size(), vector<bool>(world[0].size(), false));
    std::priority_queue <astar, std::vector<astar>, best_way > stars;
    visited[foe.Y][foe.X] = true;
    for (int i = 0; i < 4; ++i)
    {
        int x = foe.X + directions[i].X;
        int y = foe.Y + directions[i].Y;
        if (world[y][x] == ' ' && !visited[y][x])
        {
            astar new_node = {  x, y, 0 , directions[i].X,  directions[i].Y};
            new_node.dist = abs(new_node.x - player.X) + abs(new_node.y - player.Y);
            stars.push(new_node);
            visited[y][x] = true;
        }
 
    }
    while (!stars.empty())
    {
        if (stars.top().x == player.X && stars.top().y == player.Y)
        {
            foe.X += stars.top().initial_dx;
            foe.Y += stars.top().initial_dy;
            return;
        }
        astar root = stars.top();
        stars.pop();
        for (int i = 0; i < 4; ++i)
        {
            int x = root.x + directions[i].X;
            int y = root.y + directions[i].Y;
            if (world[y][x] == ' ' && !visited[y][x])
            {
                astar new_node = {x, y, 0, root.initial_dx,  root.initial_dy };
                new_node.dist = abs(new_node.x - player.X) + abs(new_node.y - player.Y);
                stars.push(new_node);
                visited[y][x] = true;
            }
 
        }
 
    }
}
void gameover(){
    gameplay = false;
    SetConsoleCursorPosition(out, { 30, 10 });
    cout << "GAME OVER";
    while (!GetAsyncKeyState(VK_ESCAPE)) {}
}
Добавлено через 1 минуту
уж сочинять поле 80*80 было лень простите
Накатал по-быстрому как мог, главное враги есть и не самые тупые.
3
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
12.10.2018, 21:46 4
Автору плевать?
1
DrOffset
12.10.2018, 21:48
  #5

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Автору плевать?
Начал понимать это, да? :)
Тут большинство таких.
Ты тратишь на него кучу времени, а он даже спасибо зайти сказать ленится. Глянет решение незалогинившись и забудет про тебя через 5 минут.

0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
13.10.2018, 16:36 6
DrOffset,

Не по теме:

ну не такую уж и кучу я потратил, давно хотелось написать какого-нибудь простенького бота просто так - с нуля на время.

0
DrOffset
13.10.2018, 16:49
  #7

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ну не такую уж и кучу я потратил
5 бесплатных минут - это уже много для человека, который ленится сказать спасибо.

0
1102 / 237 / 21
Регистрация: 20.05.2016
Сообщений: 1,068
Записей в блоге: 21
13.10.2018, 19:51 8
Цитата Сообщение от DrOffset Посмотреть сообщение
Начал понимать это, да?
Тут большинство таких.
Ты тратишь на него кучу времени, а он даже спасибо зайти сказать ленится. Глянет решение незалогинившись и забудет про тебя через 5 минут.
Да, такие особи, к сожалению, существуют.
Kuzia domovenok, врагов два, один иногда пропадает, потом "внезапно" появляется клад "Т" на игровой процесс не влияет, за идею +.
0
13.10.2018, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2018, 19:51
Помогаю со студенческими работами здесь

Игра танки тормозит при появлении 6 и более врагов
как то писал курсач -&quot;танки&quot;. c# знал плохо, ооп вообще не понимал. сейчас стал кое что понимать...

Игра Марио. Снаряды у персонажа летают не по правильным координатам
Пишу игру Марио! Вот ссылка. Посмотрите плз. Там снаряды у персонажа летают не по правильным...

Использование класса рандом для умений персонажа (консольная игра)
Добры день всем, такой вопрос у меня появился: Можно ли использовать рандом для использования...

Игра: как продумать "запрыгивание" персонажа на блок
Пару месяцев назад создавал тему насчет загрузки цп в игре. Забросил проект с того момента и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru