Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
14 / 14 / 2
Регистрация: 21.10.2012
Сообщений: 140
1

Как заставить свой объект стрелять?

27.02.2013, 01:01. Показов 1702. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте... Пытаюсь написать игру типа Космической дуэли... Застопарился на стрельбе... Точнее как заставить свой объект стрелять... Подскажите как можно организовать данный процесс. Или где можно про это почитать?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include <iostream>
#include <stdlib.h>
#include <Windows.h>
 
using namespace std;
 
class GameObject
{
public:
    int x, y; // Координаты расположения объекта
    int size; // Размер объекта
    char image; //Изображение объекта
 
    GameObject(void);
    GameObject(int x, int y, char img);
    GameObject(int x, int y, int s, char img);
    virtual void Draw();
    ~GameObject(void);
};

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
#include "GameObject.h"
 
 
GameObject::GameObject(void)
{
}
 
GameObject::GameObject(int x, int y, int s, char img)
{
    this-> x = x;
    this-> y = y;
    size = s;
    image = img;
}
 
 
GameObject::GameObject(int x, int y, char img)
{
    this-> x = x;
    this-> y = y;
    image = img;
}
 
void GameObject::Draw()
{
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); //Дескриптор устройства стандартного вывода. 
    COORD coord = {x, y}; //структура для опред позиции на плосости
    SetConsoleTextAttribute(h, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
    SetConsoleCursorPosition(h, coord);
    cout << image;
}
 
GameObject::~GameObject(void)
{
}


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
#include "GameObject.h"
 
class Spacecraft : public GameObject
{
    int speedx;
    int speedy;
public:
    Spacecraft(void);
    Spacecraft(int, int, char);
    void Move();
    ~Spacecraft(void);
};

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "Spacecraft.h"
 
 
Spacecraft::Spacecraft(void)
{
}
 
Spacecraft::Spacecraft(int x, int y, char img):GameObject(x, y, img)
{
}
 
Spacecraft::~Spacecraft(void)
{
}


C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "Spacecraft.h"
 
class Player_SC : public Spacecraft
{
public:
    Player_SC(void);
    Player_SC(int, int, char);
    void Draw();
    void Move();
    ~Player_SC(void);
};

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
#include "Player_SC.h"
 
Player_SC::Player_SC(void)
{
}
 
Player_SC::~Player_SC(void)
{
}
 
Player_SC::Player_SC(int x, int y, char img):Spacecraft(x, y, img)
{
}
 
void Player_SC::Draw()
{
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = {x, y};
    SetConsoleTextAttribute(h, FOREGROUND_RED | FOREGROUND_INTENSITY);
    SetConsoleCursorPosition(h, coord);
    cout << image;
}
 
void Player_SC::Move()
{
    if(GetAsyncKeyState(VK_UP))
    {
        if(y>0)
        y--;    
    }
    if(GetAsyncKeyState(VK_LEFT))
    {
        if(x>0)
        x--;    
    }
    if(GetAsyncKeyState(VK_RIGHT))
    {
        if(x<79)
        x++;    
    }
    if(GetAsyncKeyState(VK_DOWN))
    {
        if(y<24)
        y++;    
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2013, 01:01
Ответы с готовыми решениями:

Создать объект прототип робота, который изготовлен из определенного материала, имеет имя, пол, оружие, умеет стрелять, здороваться и прощаться
Задачу я более-менее поняла, но как сделать, чтобы робот умел стрелять? ... Покажите пожалуйста в...

Как заставить Excel не реагировать «зловещими» сообщениями на свой же combobox
Доброе время, Сделал для заказчика шаблон (в формате excel) для заполнения его данными, чтоб...

Как заставить свой php-файл в wordpress видеть константы?
В своей wordpress-теме решил сделать обработку данных форм в отдельном файле. Файл находится в...

Как заставить объект следить за курсором?
Доброго времени суток! Может кто нибудь написать пример кода, где какой-нибудь объект (например...

15
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.02.2013, 05:39 2
Я бы создал объекты для "пуль"(снарядов), и обрабатывал бы их так же, как и корабли.
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.02.2013, 05:45 3
Цитата Сообщение от MLPMan Посмотреть сообщение
Я бы создал объекты для "пуль"(снарядов), и обрабатывал бы их так же, как и корабли.
Ну иногда не стоит заморачиваться и пытаться свести все к ООП
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,492
Записей в блоге: 1
27.02.2013, 07:16 4
Цитата Сообщение от Avazart Посмотреть сообщение
Ну иногда не стоит заморачиваться и пытаться свести все к ООП
а какая разница? Без ООП пришлось бы создавать структуры для пуль (снарядов). И обрабатывать также, как корабли.
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.02.2013, 07:20 5
Цитата Сообщение от Avazart Посмотреть сообщение
Ну иногда не стоит заморачиваться и пытаться свести все к ООП
Но в этом случае очень удобно, как по мне: например, создаем базовый класс игрового оъекта, наследуем от него все виды врагов, пуль, препятствий... Потом создать массив базовых классов(текущие объекты на экране), и в цикле реализовать всю игровую динамику, в другом цикле - рисование.
Не знаю, ка вы, но я без ООП при написании 2D космической стрелялки голову бы себе сломал.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
27.02.2013, 10:39 6
Чего то никто не предложил создать класс Guns например с виртуальным методом shot(), в котором будут обрабатываться действия с пулями и снарядами.

от Guns наследовать классы типа LaserGuns.

Отношения Guns с классом "Пули" - агрегация. Так как пули могут существовать без оружия.

Но если у нас такие сложные пули для которых существует целый класс то для обоймы нужны использовать stack (в классе Guns) из stl.

Эту архитектуру я черпаю из описания предметной области.(которую можно описать на UML например)

а про реализацию такого функционала как выстрел можно почитать тут
Так как выстрел это пересечение луча с полигоном.
лучше прочитать все предшествующее уроки.

а тут всё что я думаю о разработчиках игр
0
14 / 14 / 2
Регистрация: 21.10.2012
Сообщений: 140
27.02.2013, 11:56  [ТС] 7
Набросал схемку... В правильном направлении думаю?))

Как заставить свой объект стрелять?
0
14 / 14 / 2
Регистрация: 21.10.2012
Сообщений: 140
27.02.2013, 12:03  [ТС] 8
Да совсем забыл -- эта игрушка в консоли)) так что вся графика - это символы))
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.02.2013, 13:29 9
Цитата Сообщение от SAUtrade Посмотреть сообщение
Да совсем забыл -- эта игрушка в консоли)) так что вся графика - это символы))
В консоли через WinAPI можно рисовать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <windows.h>
//...
int main(int argc, char* argv[])
{
HDC dc = GetDC(GetConsoleWindow());
//HBRUSH b1 = CreateSolidBrush(255);
//SelectObject(dc,b1);
Ellipse(dc,0,0,100,100);
//DeleteObject(b1);
getch();
return 0;
}
1
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
27.02.2013, 14:14 10
по хорошему, надо писать так чтобы логику без труда можно было перенести на графику(2d например).
я бы ещё отделил классы которые зависят от винды от общей логики игры.

а про диаграммы классов на UML слышали? ( если бы нарисовали её, я бы вас быстрее тогда понял)
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.02.2013, 21:10 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а какая разница? Без ООП пришлось бы создавать структуры для пуль (снарядов). И обрабатывать также, как корабли.
Я имел ввиду именно наследование...
0
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.02.2013, 23:18 12
Цитата Сообщение от XRuZzz Посмотреть сообщение
если бы нарисовали её, я бы вас быстрее тогда понял
Вроде все понятно: X,Y - координаты; SpeedX, SpeedY описывают движение(вектор - знак, скорость - модуль), Move() - перемещает объект на SpeedX и SpeedY.

SAUtrade,
Как заставить свой объект стрелять?
.

Цитата Сообщение от Avazart Посмотреть сообщение
Я имел ввиду именно наследование...
Если не злоупотреблять, не вижу ничего плохого в наследовании. Например, если в игре не будет штук, которые не двигаются, класс MovableItem не нужен, а его свойства перенести в корневой.
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,520
27.02.2013, 23:22 13
Цитата Сообщение от MLPMan Посмотреть сообщение
апример, если в игре не будет штук, которые не двигаются, класс MovableItem не нужен, а его свойства перенести в корневой.
не двигающиеся штуки можно создать из двигающихся и задать скорость 0
1
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.02.2013, 23:27 14
Цитата Сообщение от ValeryS Посмотреть сообщение
не двигающиеся штуки можно создать из двигающихся и задать скорость 0
Ну, тогда класс Movable лишний, если только у недвигающихся не будет каких-нибудь свойств, не присущих двигающимся.
0
Антикодер
1804 / 869 / 48
Регистрация: 15.09.2012
Сообщений: 3,081
28.02.2013, 00:23 15
Цитата Сообщение от MLPMan Посмотреть сообщение
Вроде все понятно: X,Y - координаты; SpeedX, SpeedY описывают движение(вектор - знак, скорость - модуль), Move() - перемещает объект на SpeedX и SpeedY.
а вы уверены, что хорошая архитектура состоит только из наследования? как вы покажите другие отношения между классами?
1
Кандёхаем веселее!
296 / 328 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
28.02.2013, 01:10 16
Цитата Сообщение от XRuZzz Посмотреть сообщение
а вы уверены, что хорошая архитектура состоит только из наследования? как вы покажите другие отношения между классами?
Дык я не советую использовать как можно больше ООПшных фишек, главное - построить удобный внутренний интерфейс для написания хорошей проги. А наследование, в данном случае - удобный инструмент.

Например: хотим сделать пулю с ускорением - унаследованый переопределяет метод Move() и изменяет там SpeedX; При реализации "корабля-босса" тоже поможет наследование, он уже будет не такой, как "обычные", но все-таки с базовыми свойствами корабля.
1
28.02.2013, 01:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2013, 01:10
Помогаю со студенческими работами здесь

(A*) Как заставить объект двигаться по точкам?
Есть рассчитанный с помощью A* путь.Внимание вопрос!Как заставить сферу пердолить по этим точкам?

Как заставить объект shape двигаться
VB 2008 Пытаюсь создать программку,чтобы при нажатии на 4 кнопки, квадратик двигался в нужных...

Как заставить checkbox возвращать объект?
как заставить checkbox возвращать объект? Jsp: &lt;form:form action=&quot;addUser&quot; method=&quot;post&quot;...

Как заставить объект толкать игрока в Unity3D
Как заставить объект &quot;кубик&quot; толкать игрока. Так чтобы &quot;кубик&quot; не проходил сквозь него.


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

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