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

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

Войти
Регистрация
Восстановить пароль
 
 
Wollen
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 26
#1

Примитивная игра на c++ - C++

24.08.2013, 22:18. Просмотров 25806. Ответов 16
Метки нет (Все метки)

Учу С++ потихоньку, дошёл до структур даннах, классов. Писал пока что консольные приложения. Возникла идея написать простенькую 2d игру, например, змейку/крестики-нолики/тетрис.
Подкажите в какую сторону копать. Нужно ли Qt или OpenGL или можно пока без них обойтись? Можно ли в привычном Code::Blocks сделать или проще в Borland Builder? Что почитать по этой теме?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2013, 22:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Примитивная игра на c++ (C++):

Примитивная графика си++ - C++
Доброго времени суток, ребят. Задали программу написать Задание: Разработать подпрограмму рисования элемента меандра и использовать её...

Примитивная 3D-визуализация - C++
Всем привет. Возникла довольно простая задача: необходимо визуализировать в трехмерном виде модели промышленных манипуляторов...

Примитивная графика (Dev-C++) - C++
Здравствуйте. Есть консольная "Жизнь", хотелось бы сделать для неё хоть какую-нибудь графику. Думал использовать graphics.h, но все вокруг...

Примитивная лаба по классам. Уже написана. Не компилится - C++
Здравствуйте! Прога выдает ошибку. Делал по примеру друга. Прога аналогичная. Оба кода прилагаю. Мой код: #include <iostream> ...

Игра слов, игра Scrabble - C++
Задание: Создать программу для решения задачи построения слова из некоторого множества букв (игра Scrabble) используя алгоритмы поиска в...

Примитивная игра червячок - Pascal ABC
Нужно написать программу под тип игры ЧЕРВЯЧОК в PascalABC (модули graph и crt), просто примитивная анимация! Значит, прямоугольник...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
24.08.2013, 22:20 #2
Можешь написать змейку в консоли. Потом (в будущем) сделай для нее графический интерфейс.
1
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
24.08.2013, 22:25 #3
можно использовать библиотеку SDL
напишите игру "Жизнь" - клеточный автомат, просто и интересно

Добавлено через 1 минуту
Естестевенно на Qt делается всё не сложно. Но это уже C++ + ещё что-то, в отличии от других библиотек.
1
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
24.08.2013, 23:07 #4
Консольная змейка
1
Wollen
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 26
24.08.2013, 23:19  [ТС] #5
Цитата Сообщение от VLK Посмотреть сообщение
прикольно
0
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
25.08.2013, 00:09 #6
Цитата Сообщение от VLK Посмотреть сообщение
Отличное поле для изучения.
0
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
25.08.2013, 00:14 #7
Цитата Сообщение от Wollen Посмотреть сообщение
прикольно
тока если вы будете изучать написание змейки по этому коду, к вашим ошибкам добавятся ещё и ошибки этого товарища.
Первое впечатление о коде "любопытно, но это не C++"
2
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
25.08.2013, 00:31 #8
Ни разу не C++, автор кода на момент его написания не проникся стилем программирования на C++, а, вероятно, использовал прошлый опыт Turbo Pascal или C.
Довольно просто и интересно новичку будет сделать игры вроде пакмана, арканоида, также сюда можно отнести разные платформеры.
0
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
25.08.2013, 01:05 #9
Решать задачу идеально совсем не нужно, хватит для начала очень примитивной программы. Это учебный пример, и нужно учиться именно на учебных проектах.
Любая среда. пишите игру, которая умеет только самое главное(то что в правилах). Интерфейс игры продумывать не надо, главное чтоб работали основные функции.
потом смело удаляете проект. и идёте изучать вопросы, которые у вас возникали в процессе написания. готовитесь к след. учебную проекту.
0
VLK
193 / 162 / 12
Регистрация: 05.05.2013
Сообщений: 1,225
25.08.2013, 11:51 #10
Цитата Сообщение от XRuZzz Посмотреть сообщение
тока если вы будете изучать написание змейки по этому коду, к вашим ошибкам добавятся ещё и ошибки этого товарища.
Первое впечатление о коде "любопытно, но это не C++"
Не надо путать ТС, если вы знаете все библиотеки и всё умеете, это не значит что он умеет все тоже самое, просто на него зашло затмение и он не знает что ему дальше делать.

Из первого сообщения ясно, что он не то, что не знает какие библиотеки, он даже не знает где писать ее и как это вообще выглядит, а вы ему предлагаете змейку по сети, больные что ли? Вы еще ему предложите написать свою игру по аналогии с World of Warcraft.

Из моего примера он хотя бы узнает какие библиотеки использовать (т.е. ответ на свой вопрос - в какую сторону рыть), а по поводу кода, я ему не предлагал, да и сомневаюсь что он сам имеет цель переписать этот код и гордится этим.

Сделает свою змейку, потом сравнит с тем кодом, найдет свои слабые места, найдет слабые места той программы, одна польза короче.
0
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
25.08.2013, 12:33 #11
видеолекции на которые я давал ссылку буду куда полезнее Для того чтобы выучить С++ по книге Бьёрна Страуструпа
и вам и ему. Там написание такой простой игры начинается после того как студенты уже освоили работу с классами.
хорошо бы дать ещё ссылку на какую нибудь книгу по математике, но такой универсальной книги для новичков-программистов не встречал.

Добавлено через 2 минуты
про сети я ничего не говорил, но возможно Таненбаума почитать будет полезно.
1
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
25.08.2013, 12:41 #12
Цитата Сообщение от XRuZzz Посмотреть сообщение
видеолекции на которые я давал ссылку буду куда полезнее Для того чтобы выучить С++ по книге Бьёрна Страуструпа
и вам и ему. Там написание такой простой игры начинается после того как студенты уже освоили работу с классами.
хорошо бы дать ещё ссылку на какую нибудь книгу по математике, но такой универсальной книги для новичков-программистов не встречал.

Добавлено через 2 минуты
про сети я ничего не говорил, но возможно Таненбаума почитать будет полезно.

Не по теме:

Это твои курсы чтоли? В каждой теме, где есть ты, есть данная ссылка.

0
XRuZzz
25.08.2013, 13:47
  #13

Не по теме:

Цитата Сообщение от Hugra Посмотреть сообщение
Не по теме:
Это твои курсы чтоли? В каждой теме, где есть ты, есть данная ссылка.
да чего то я уже переборщил, ну реально полезно, не самому же всё это пересказывать в каждой теме

0
Wollen
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 26
27.08.2013, 20:49  [ТС] #14
Написал свою змейку. Буду благодарен, если укажете ошибки. Наверняка упустил что-то важное
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
203
204
205
206
207
208
209
210
211
212
#include <iostream>
#include <windows.h>
#include <time.h>
#include <conio.h>
using namespace std;
 
bool stop=0;
bool lite=1;
bool food=0;
bool boostspeed=1;
int speed=2; //1-slow, 2-normal, 3-fast
int framecount=0;
int food_x,food_y;
const int m=10,n=20;
char field[m][n];
 
class Snake{
    public:
    struct Part{
        int x,y;
        Part* next;
    };
    Part*body,*tale;
    int x,y,vx,vy,size,speed;
    void MoveSnake();
    void AddPart();
    void RemovePart();
    void DeleteBody();
} snake;
void StartMenu();
void Init();
void KeySwitch();
void GameOver();
void GenerateFood();
void GenerateField();
void DrawField();
 
int main(){
    StartMenu();
    while(!stop){
        for(int i=0;i<2;++i){
            if(kbhit()==true)
                KeySwitch();
            Sleep(100/snake.speed);
        }
 
        GenerateField();
        DrawField();
    }
}
 
void Snake::MoveSnake(){
    Part* bodycheck=body;
    while(bodycheck){
        if(bodycheck->x==snake.x&&bodycheck->y==snake.y){
            GameOver();
            break;
        }
        bodycheck=bodycheck->next;
    }    //check collision
    if(!lite&&(snake.x==0 || snake.x==n-1 || snake.y==0 || snake.y==m-1)){
        GameOver();
    }    //hard mode
    else{
        if(snake.x==0 || snake.x==n-1){
            snake.vx=snake.x==0? -1 : 1;
            snake.vy=0;
            snake.x=n-1-snake.x;
        }
        if(snake.y==0 || snake.y==m-1){
            snake.vy=snake.y==0? -1 : 1;
            snake.vx=0;
            snake.y=m-1-snake.y;
        }
    }    //lite mode
    if(snake.x==food_x&&snake.y==food_y){
        food=0;
        ++snake.size;
        AddPart();
        if(boostspeed)
            ++snake.speed;
    }
    else if(body){
        AddPart();
        RemovePart();
    }
    snake.x+=snake.vx;
    snake.y+=snake.vy;
}
void Snake::AddPart(){
    Part* NewPart = new Part;
    if(!body){
        body=NewPart;
        tale=NewPart;
    }
    else{
        tale->next=NewPart;
        tale=NewPart;
    }
    NewPart->next=0;
    NewPart->x=snake.x;
    NewPart->y=snake.y;
}
void Snake::RemovePart(){
    Part* Item=body;
    body=Item->next;
    delete Item;
}
void Snake::DeleteBody(){
    Part* del = body;
    while(del){
        body=del->next;
        delete del;
        del=body;
    }
}
void Init(){
    snake.x=1;
    snake.y=1;
    snake.vx=1;
    snake.vy=0;
    snake.size=0;
    snake.body=0;
    snake.tale=0;
    snake.speed=speed;
    GenerateField();
}
void StartMenu(){
    cout<<"Lite mode? Press 1.\nHard mode? Press 2.\nEsc for exit";
    char c=0;
    while(c!=27){
        c=_getch();
        switch(c){
            case '1':
                lite=1;
                c=27;
                break;
            case '2':
                lite=0;
                c=27;
                break;
            case 27: //ESC
                stop=1;
                break;
        }
    }
    Init();
}
void GameOver(){
    snake.DeleteBody();
    system("cls");
    cout<<"Your score is "<<snake.size<<"\n Again?\n";
    StartMenu();
}
void KeySwitch(){
    char c =_getch();
    switch(c){
        case 27: stop=1; snake.DeleteBody(); break; //ESC
        case 72: if(snake.vx) {snake.vx=0; snake.vy=-1;} break; //up
        case 80: if(snake.vx) {snake.vx=0; snake.vy=1;} break; //down
        case 75: if(snake.vy) {snake.vx=-1; snake.vy=0;} break; //left
        case 77: if(snake.vy) {snake.vx=1; snake.vy=0;} break; //right
        default: break;
    }
}
void GenerateFood(){
    bool error=1;
    while(error){
        srand(time(NULL));
        food_x=1+rand()%(n-1);
        food_y=1+rand()%(m-1);
        if(field[food_y][food_x]==' ') {
            error=0;
        }
    }
    food=1;
}
void GenerateField(){
    snake.MoveSnake();
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            if(i==0 || i==m-1 || j==0 || j==n-1){
                field[i][j]='*';
            }
            else if(i==snake.y && j==snake.x){
                field[i][j]='@';
            }
            else{
                field[i][j]=' ';
            }
            if(food)
                field[food_y][food_x]='$';
        }
    }
    Snake::Part* bodycheck=snake.body;
    while(bodycheck){
        field[bodycheck->y][bodycheck->x]='#';
        bodycheck=bodycheck->next;
    }
    if(!food){
        GenerateFood();
    }
}
void DrawField(){
    system("cls");
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            cout<<field[i][j];
        }
        cout<<"\n";
    }
}
А всё-таки как для неё написать графический интерфейс? Поидее вот вместо этой функции вывода на экран надо сделать, чтобы каждый из символов заменялся на картинку.
C++
1
2
3
4
5
6
7
8
9
void DrawField(){
    system("cls");
    for(int i=0;i<m;++i){
        for(int j=0;j<n;++j){
            cout<<field[i][j];
        }
        cout<<"\n";
    }
}
Чтобы вот что-то такое получилось, что обычно используют?
0
Миниатюры
Примитивная игра на c++  
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
27.08.2013, 20:53 #15
Цитата Сообщение от Wollen Посмотреть сообщение
А всё-таки как для неё написать графический интерфейс?
OpenGL
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2013, 20:53
Привет! Вот еще темы с ответами:

Примитивная игра "змейка" - Turbo Pascal
Появилась необходимость написать примитивную игру в текстовом режиме. В процессе разработки наткнулся на такую проблему: при движении...

примитивная рекурсия - Логика и множества
Привет! Задача: какая ф-я получается из ф-й g(x)=0 и h(x,y,z)=|z-x| с помощью примитивной рекурсии ? Моё решение: f(x,0) = g(x)...

Графика (примитивная) - JavaFX
Нужно создать 3 класа 1Наследие JPanel с изображением(примитивным) печатного издания 2Наследие JPanel с изображением(примитивным)...

Примитивная рекурсивность - Алгоритмы
Помогите, пожалуйста показать примитивную рекурсивность функции f(x,y) f(x,y)= фигурная скобка | 0,у меньше x, 1,y больше или...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.08.2013, 20:53
Ответ Создать тему
Опции темы

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