Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Fr1kson
22 / 0 / 0
Регистрация: 28.02.2014
Сообщений: 48
#1

Нужно сделать автоматическое движение персонажа - C++

15.05.2014, 08:40. Просмотров 491. Ответов 2
Метки нет (Все метки)

C++ (Qt)
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
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
 
float offsetX=0, offsetY=0;
 
 
const int H = 12;
const int W = 40;
 
 
String TileMap[H] = {
 
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"B                                B     B",
"B                                B     B",
"B                                B     B",
"B                                B     B",
"B         0000                BBBB     B",
"B                                B     B",
"BBB                              B     B",
"B              BB                BB    B",
"B              BB                      B",
"B    B         BB         BB           B",
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
 
}; 
 
class PLAYER {
 
public:
 
float dx,dy;
FloatRect rect;
bool onGround;
Sprite sprite;
float currentFrame;
 
    PLAYER(Texture &image)
   {
    sprite.setTexture(image);
    rect = FloatRect(7*32,9*32,40,50);
 
    dx=dy=0.1;
    currentFrame = 0;
   }
 
 
   void update(float time)
   {    
 
     rect.left += dx * time;    
     Collision(0);
 
     if (!onGround) dy=dy+0.0005*time;
     rect.top += dy*time;
     onGround=false;
     Collision(1);
  
     
      currentFrame += 0.005*time;
      if (currentFrame > 6) currentFrame -=6 ;
 
      if (dx>0) sprite.setTextureRect(IntRect(40*int(currentFrame),244,40,50));
      if (dx<0) sprite.setTextureRect(IntRect(40*int(currentFrame)+40,244,-40,50));
     
 
      sprite.setPosition(rect.left - offsetX, rect.top - offsetY);
 
      dx=0;
   }
 
 
 
   void Collision(int dir)
   {
     for (int i = rect.top/32 ; i<(rect.top+rect.height)/32; i++)
      for (int j = rect.left/32; j<(rect.left+rect.width)/32; j++)
        { 
         if (TileMap[i][j]=='B') 
           { 
            if ((dx>0) && (dir==0)) rect.left =  j*32 -  rect.width; 
            if ((dx<0) && (dir==0)) rect.left =  j*32 + 32;
            if ((dy>0) && (dir==1))  { rect.top =   i*32 -  rect.height;  dy=0;   onGround=true; }
            if ((dy<0) && (dir==1))  { rect.top = i*32 + 32;   dy=0;}
           }
         
         if (TileMap[i][j]=='0') 
                           { 
                             TileMap[i][j]=' ';
                           }
                
        }
   
   }
};
 
int main()
{
    RenderWindow window( VideoMode(600, 400), "Test!");
 
    Texture t;
    t.loadFromFile("fang.png");
 
    float currentFrame=0;
 
    PLAYER p(t);
 
    Clock clock;
 
    RectangleShape rectangle( Vector2f(32,32));
 
    while (window.isOpen())
    {
        float time = clock.getElapsedTime().asMicroseconds();
        clock.restart();
 
        time = time/700;
        
        if (time>20) time = 20;
 
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Left)) 
        {
            p.dx = -0.1;
 
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Right)) 
        {
            p.dx = 0.1;
        }
 
        if (Keyboard::isKeyPressed(Keyboard::Up)) 
        {
            if (p.onGround) { p.dy=-0.35; p.onGround=false;}
        }
 
        p.update(time);
 
        if (p.rect.left>300) offsetX = p.rect.left - 300;
        offsetY = p.rect.top - 200;
 
        window.clear(Color::White);
 
 
         for (int i=0; i<H; i++)
             for (int j=0; j<W ; j++)
                { 
                  if (TileMap[i][j]=='B') rectangle.setFillColor(Color::Black);
 
                  if (TileMap[i][j]=='0')  rectangle.setFillColor(Color::Green);
 
                  if (TileMap[i][j]==' ') continue;
 
                  rectangle.setPosition(j*32-offsetX,i*32 - offsetY) ; 
                  window.draw(rectangle);
             }
    
        window.draw(p.sprite);
        window.display();
    }
 
    return 0;
}
вот моя игра, по сути в ней пока ничего нет, но я хотел бы сделать чтобы персонаж двигался сам , а я мог прыгать и нагибаться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 08:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно сделать автоматическое движение персонажа (C++):

Движение персонажа в консоли с препятствиями - C++
Приветствую! Есть проблема: задали написать игру с главным персонажем, врагами и препятствиями(стенами, границами). Я не совсем понимаю...

Сделать выбор персонажа игры, вывод его скилов и предметов, используя паттерн стратегия - C++
В лабе надо было сделать выбор персонажа игры,вывод его скилов и предметов,используя паттерн стратегия.В VS программа вроде...

Как сделать автоматическое обновление - C++
Здравствуйте! Есть программа с функцией обновления через интернет. Проверка обновления и само обновление происходит по нажатию на кнопку....

Как сделать автоматическое копирование данных при их изменении? - C++
Я не люблю C++, но вынужден программировать на нем. До этого я пользовался языком, в котором нет многих проблем (или возможностей, смотря с...

Пожалуйста, нужно найти ошибки в этом коде, нужно сделать в Codeblocks! - C++
Задание было такое:Написать программу для работы с одномерным массивом размера N (0 &lt; N &lt; 100). В начале работы программы предложить...

Нужно сделать что бы давало рандомно числа и нужно написать ответ - C++
В командной строке. Тоесть примерно так: Запускаешь программу, показывает числа что выбрались рандомно : 15*3=? После этого...

2
SatanaXIII
Супер-модератор
Эксперт С++
5666 / 2711 / 255
Регистрация: 01.11.2011
Сообщений: 6,639
Завершенные тесты: 1
15.05.2014, 08:50 #2
Вам нужен алгоритм поиска пути:
Работа с графами. Алгоритм Дейкстры
Выкладываю реализацию алгоритма Дейкстры на С++
Алгоритм Дейкстры
Параллельная реализация алгоритма Дейкстры
Задача с использованием алгоритма Дейкстры

Не по теме:

Цитата Сообщение от Fr1kson Посмотреть сообщение
а я мог прыгать и нагибаться
А сколько лет вы ждали эту игру?

0
Croessmah
15.05.2014, 10:36     Нужно сделать автоматическое движение персонажа
  #3

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
А сколько лет вы ждали эту игру?
джва

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2014, 10:36
Привет! Вот еще темы с ответами:

Нужно сделать задание по c++! Через 3 часа нужно сдать! - C++
ТРЕБОВАНИЯ К ВЫПОЛНЕНИЮ ЗАДАНИЙ: Требования к выполнению задания №1: 1. Требуется решить систему линейных алгебраических...

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей - C++
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; #include&lt;iostream.h&gt; void main(){ ...

Как можно сделать такое? (Автоматическое нажатие клавиш и все что с этим связанно) - C++
У меня возник вопрос как можно сделать чтоб программа автоматически нажимала на определенные клавиши? Например в игре GTA SAMP: Чтоб...

Движение планеты в системе двойной звезды или движение трех тел - C++
программа должна выводить координаты движения звезд и планеты в файл (рисую в gnuplot). во-первых, не понимаю, почему выходит, что все...


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

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

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