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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Собственный манипулятор http://www.cyberforum.ru/cpp-beginners/thread943179.html
Здорова господа! Я пытаюсь создать свой собственный манипулятор, который будет принимать основу числа: десять шестнадцать и два и само число, и будет выводить число в соотсветствующей системе счисления. От я набраса примерно манипулятор //манипулятор вывода ostream& based(ostream& stream) { cout <<"mu tyt"<<endl;
C++ Вывести числа со специальным форматом Всем привет! Есть задание: "Напишите программу, считывающую из файла числа, разделенные пробелами, и выводящую в другой файл числа, используя научный формат и точность, равную восьми в четырех полях по двадцать символов в строке". Что хотят в этом задании? Ведь не вместить 4 поля в одну строку из 20 символов (если точность 8 - это не вмещается). http://www.cyberforum.ru/cpp-beginners/thread943171.html
C++ rand(time(NULL)
Необходимо получить диапозон случайных чисел от 1 до 6. Я это пытаюсь делать вот таким образом void main(){ srand(time(NULL)); int cub1=rand()%(1+5); int cub2=rand()%(1+5);
Непонятный вывод значений синуса C++
Есть вот такой код: #include <iostream> #include <cmath> using namespace std; const double pi = 3.14159265358979; int main() { cout <<sin(pi) <<endl
C++ Не получается заполнить массив целыми числами http://www.cyberforum.ru/cpp-beginners/thread943122.html
Почему результат при выводе не тот, который должен быть? Должно получится 2 4 6 8 10 12 14 16 18 20, а на самом деле 0 2 2 2 2 2 2 2 2 2 2? #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { array<int> ^data = gcnew array<int>(10);
C++ Вывести на экран таблицу значений функции и ее разложение в ряд Задали в универе. Даже незнаю как подобные задачи решаются. подробнее

Показать сообщение отдельно
Wollen
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 26
27.08.2013, 20:49  [ТС]     Примитивная игра на c++
Написал свою змейку. Буду благодарен, если укажете ошибки. Наверняка упустил что-то важное
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";
    }
}
Чтобы вот что-то такое получилось, что обычно используют?
Миниатюры
Примитивная игра на c++  
 
Текущее время: 20:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru