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

Змейка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в простой программе http://www.cyberforum.ru/cpp-beginners/thread923703.html
#include<iostream> #include<string> using namespace std; string recyrs() { string parol,parol1="12345"; cout << "Vvedit parol" <<endl; cin >> parol;
C++ Модель движения КА в центральном поле тяготения Модель движения КА в центральном поле тяготения Рассмотрим модельную задачу, которая в небесной механике называется задачей двух тел и изучает движение двух материальных точек под действием силы их взаимного притяжения. В задаче двух тел учитывается только единственная сила – сила ньютоновского взаимодействия. Для исследования движения КА относительно небесного тела предположим, что масса КА... http://www.cyberforum.ru/cpp-beginners/thread923700.html
Создание и вызов файла с описанием функции C++
#include "iostream" #include <stdlib.h> #include <time.h> #include <ctype.h> #include <string.h> void task(int ); void dispensation (const int*,int ,int ,int); int main()
C++ Абстрактный класс
Ребят такая проблема, точнее недопонимания. Реализую графический редактор. Есть базовый абстрактный класс GraphObject От него наследуется класс Point с параметрами X Y Создаю класс Layer в котором храниться массив GraphObject class GraphicObject //Графический объект { public: GraphicObject(); virtual ~GraphicObject();
C++ Очистка системы от хлама http://www.cyberforum.ru/cpp-beginners/thread923675.html
ДОБРЫЙ ДЕНЬ! НУЖНА ПОМОЩЬ Подкиньте плиз кто-то ссылку на прогу в исходниках на С++ , похожую на CCleaner/ или алгоритм реализации. Или куда двигаться. Хочу написать. А вот с чего хвататься, не врубаюсь. книгу можно. Кто чем может помогите.Я новичокСпасибо.:cry:
C++ Почему не вызывается конструктор копии? Почему не вызывается конструктор копии? class CPoint { friend std::istream &operator>>(std::istream &in, CPoint &obj); friend std::ostream &operator<<(std::ostream &out, const CPoint &obj); public: CPoint(int x=0, int y=0) { std::cout << "Конструктор CPoint(" << x << ", " << y << ")" << std::endl; mX=x; mY=y; } CPoint(const CPoint &copy) { std::cout << "Конструктор копии CPoint("... подробнее

Показать сообщение отдельно
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
18.07.2013, 02:54     Змейка
Цитата Сообщение от андрюха53 Посмотреть сообщение
вопщем нето
вопщем лави, Ондрюха. На 250 строчек меньше.
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
#include <ctime>    //для srand(time)
#include <iostream> //для cout, rand() и system()
#include <list>     
#include <windows.h>//для функций управления консолью
using namespace std;
const int width=50;   //размеры экрана и некоторые 
const int height=25;  //прочие глобальные константы
const char* DOT="*";
const char* SPACE=" ";
const COORD run_up   ={0, -1};  //вектора направлений перемещения
const COORD run_down ={0,  1};
const COORD run_left ={-1, 0};
const COORD run_right={1, 0};
const DWORD DELAY_TIME=166;    //аргумент для Sleep()
//используемые типы
typedef COORD cell;   //тип точек на экране.
typedef list<cell>    tSnake;//тип змейка - это список точек.
//глобальные переменные
tSnake snake;        //главный перс - змейка
HANDLE hStdout;       
COORD dir=run_right;  //направление её движения     
cell apple;          //яблоко
COORD pos={0,0};  
void put_cell(cell place, const char* symbol){//вывод символа в заданные координаты
    DWORD written;
    SetConsoleCursorPosition(hStdout, place);
    WriteConsole(hStdout, symbol, 1, &written, NULL);
}
void init_window(){
    system("mode con cols=50 lines=25");
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
}
void init_snake(){  //Змейка - список точек. snake.back это хвост змеи
    for (pos.X=pos.Y=0; pos.X<3; pos.X++)//snake.front это её голова
        snake.push_front(pos);//в начале змейка заполнена тремя точками(0,0) (1,0) (2,0)
}
void redraw(){//вывести змейку целиком на экран (обычно она выводится не вся)
    for(tSnake::iterator it=snake.begin(); it!=snake.end(); it++)
        put_cell(*it, DOT);
}
void resetApple(){//установка нового яблока в случайные координаты
    bool run=true;
    while(run){
        run = false;
        apple.X=rand()%(width-3)+1;
        apple.Y=rand()%(height-3)+1;
        for(tSnake::iterator it=snake.begin(); it!=snake.end() && (!run); it++)
            run=(it->X==apple.X && it->Y==apple.Y);//если яблоко упало на змейку,
    }                                              //цикл while запустится снова.
}
bool step_and_die(){
    bool hit, eat;
    pos=snake.back();
    snake.pop_back();//подвинуть хвост
    if(snake.back().X!=pos.X || snake.back().Y!=pos.Y ) put_cell(pos, SPACE);//стереть хвост с экрана, если в нём одна клетка
    pos=snake.front();
    pos.X+=dir.X; 
    pos.Y+=dir.Y;//подвинуть голову
    if (pos.X==-1) pos.X=width-1;//проверить, проходит ли голова сквозь стену
    if (pos.X==width) pos.X=0;
    if (pos.Y==-1) pos.Y=height-1;
    if (pos.Y==height) pos.Y=0;
    hit=eat=false;//начать цикл проверки столкновений
    for (tSnake::iterator it=snake.begin(); it!=snake.end() && (!hit) && (!eat); it++){
       hit=(it->X==pos.X && it->Y==pos.Y);  //столкновение с самим собой
       eat=(it->X==apple.X && it->Y==apple.Y);//столкновение с яблоком
    }
    snake.push_front(pos);//добавить змейке двинутую бошку
    put_cell(pos, DOT);//нарисовать эту бошку
    if (eat){//поедание яблока, если попал в него
        resetApple();
        snake.push_front(pos);
    }
    return hit;
}
void finish(){
    pos.X=width/2-5;
    pos.Y=height/2;
    put_cell(pos, SPACE);
    cout<<"GAME OVER!";
    system("pause");
}
void HandleKeyboard(){//обработка клавиатуры
    SHORT keys[4];//сначала проверяем нажатие всех 4х стрелок
    int i, key;   //и запоминаем их состояние в массив keys
    for (i=0, key=VK_LEFT; i<4; i++, key++)
        keys[i]=GetAsyncKeyState(key);
    //затем соответственно стрелкам меняем направление змейки
    if (dir.Y==0) {//если змейка движется горизонтально, то на вправо-влево не реагирууем
        if (keys[VK_UP  -VK_LEFT]) dir=run_up;
        if (keys[VK_DOWN-VK_LEFT]) dir=run_down;}                   
    else{//и соответственно наоборот, если змейка вертикально, то на вверх-низ не реагирууем
        if (keys[VK_LEFT -VK_LEFT]) dir=run_left;
        if (keys[VK_RIGHT-VK_LEFT]) dir=run_right;
    }
}
int main(){//точка входа.
    srand(time(NULL));
    init_window();//инициализация
    init_snake();
    resetApple();
    redraw();
    const char* anim[]={DOT, SPACE, DOT};//"кадры анимации яблока" 
    while(1){
        for (int j=0; j<3; j++){//мигнуть анимацией яблока три кадра
          put_cell(apple, anim[j&1]);
          Sleep(DELAY_TIME);
        }
        
        HandleKeyboard();//считать клавиши
        if (step_and_die()||GetAsyncKeyState(VK_ESCAPE))break;//step_and_die() - главная функция
    }
    finish();
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru