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

Как сделать управление стрелками в консольной змейке? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество повторений цифр в числе http://www.cyberforum.ru/cpp-beginners/thread1308846.html
Найти количество повторений каждой цифры у заданного натурального числа (не используя массивов).
C++ Распечатать анкетные данные студентов, успевающих на 4 и 5 Скажите, пожалуйста, как сделать, чтобы выводились все студенты, у кого 4 и 5. Не получается, выводится только один по этому коду. //Распечатать анкетные данные студентов, успевающих на 4 и 5. #include "stdafx.h" #include <stdio.h> #include <ctype.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <conio.h> http://www.cyberforum.ru/cpp-beginners/thread1308845.html
Зашифровать все строки из файла C++
делаю не сложный шифр текстового файла,и такая проблема. работает только с одной строкой. прикрутил считывание до конца файла,и теперь текст не шифруется. кто что подскажет? #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <conio.h> #include <iostream> #include <string> #include <fstream> #include <string>
C++ Массив структур. Вышел бесконечный цикл
даже если убрать строку i++, всё равно бесконечно выдаёт одно и тоже #include <iostream> #include <string.h> #include <math.h> using namespace std; struct vlad{ char fam, im, ot;
C++ Найти минимальные элементы в каждом столбце произвольного двумерного массива и записать их в виде одномерного http://www.cyberforum.ru/cpp-beginners/thread1308815.html
Найти минимальные элементы в каждом столбце произвольного двумерного массива и записать их в виде одномерного массива есть код в c#, но не знаю как переделать( using System; class ConsoleApp { public static void Main() { Console.Write("m: ");
Pascal Дек на Паскале Пожалуйста,помогите!!! для тех кто не сильно шарит модуль работы с полиномом комплексных чисел...модуль пытаюсь написать а вот с функциями и процедурами запара....хелппп функции для значения полинома,замена к-го члена,добавить новый коэффициент процедуры для производной,интеграла ,сумма и разница двух полиномов,умножение на константу,умножение двух полиномов подробнее

Показать сообщение отдельно
Mr_Progger
22 / 22 / 9
Регистрация: 01.11.2013
Сообщений: 164

Как сделать управление стрелками в консольной змейке? - C++

23.11.2014, 20:59. Просмотров 661. Ответов 5
Метки (Все метки)

Доброго времени суток. Создаю консольную змейку. Поле на котором бегает змея это двумерный массив чаров. Змея отображается символами *
1 - Змейка не управляема. Как сделать управление стрелками? если делать просто через std:cin то движение змейки будет останавливаться пока не будет нажата клавиша.

2 - Проблема с функцией Snake::Eat. По смыслу если на пути попадается символ '*', то в змею добавляться кусок (Point с координатами этой '*' добавляем в начало дека), на деле получается ерунда

3 - Как сделать так чтобы при запуске приложение было развернуто?

4 - Что стоит поменять в коде в плане хорошего стиля и правильного подхода к написанию кода?

Point.h - класс для описания куска змеи
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
class Point
{
    int x;
    int y;
public:
    Point(int xx = 0, int yy = 0) : x(xx), y(yy) {};
    Point(const Point&);
    void SetPoint();
    int GetPointX() { return x; };
    int GetPointY() { return y; };
};

Point.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "Point.h"
 
 
Point::Point(const Point& p)
{
    x = p.x;
    y = p.y;
}
 
 
void Point::SetPoint()
{
    if (x + 1 <= 50)
        x++;
    else
        x = 0;
}

Snake.h - класс для описания змеи целиком
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#pragma once
#include <deque>
#include "Point.h"
class Snake
{
    std::deque<Point> snake;
public:
    void AddSnake(const Point&);
    bool pr(int, int);
    void MoveSnake();
    void Eat(char, int, int);
    Snake();
    ~Snake();
};

Snake.cpp
Кликните здесь для просмотра всего текста

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
#include "Snake.h"
 
 
void Snake::AddSnake(const Point& p ) //Создание 
{
    snake.push_front(p);
}
 
void Snake::Eat(char c, int ii, int jj )  // Ест
{
    std::deque<Point>::iterator iter;
    for (iter = snake.begin(); iter != snake.end(); iter++)
    if ((*iter).GetPointX() == jj && (*iter).GetPointY() == ii && c == '*')
    {
        snake.push_front(Point(ii, jj));
        return;
    }
}
 
bool Snake::pr(int ii, int jj)  // Если кордината куска змеи совпадает с i j циклов из мейна то вернуть true
{
    bool p = false;
    std::deque<Point>::iterator iter;
    for (iter = snake.begin(); iter != snake.end() ; iter++)
        if ((*iter).GetPointX() == jj && (*iter).GetPointY() == ii)
            p = true;
    return p;
}
 
 
void Snake::MoveSnake()  // Двигаем змею. Голова получает новые координаты, каждый кусок змеи получет старые координаты впереди идущего куска
{
    for (size_t i = snake.size()-1; i > 0; i--)
        snake[i] = snake[i - 1];
    snake[0].SetPoint();
}
 
 
Snake::Snake()
{
}


Main.cpp
Кликните здесь для просмотра всего текста

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 <iostream>
#include <deque>
#include <Windows.h>
#include "Point.h"
#include "Snake.h"
 
 
int main()
{
 
    char pole[50][50];
    Point snake1(0, 5);
    Point snake2(1, 5);
    Point snake3(2, 5);
    Point snake4(3, 5);
    Snake BigSnake;
    BigSnake.AddSnake(snake4);
    BigSnake.AddSnake(snake3);
    BigSnake.AddSnake(snake2);
    BigSnake.AddSnake(snake1);
    while (1)
    {
        for (size_t i = 0; i < 50; i++)         
        for (size_t j = 0; j < 50; j++)
        {
            
            BigSnake.Eat(pole[i][j], i, j);
            if (BigSnake.pr(i,j))
                pole[i][j] = '*';
            else
                pole[i][j] = ' ';
        }   
        for (size_t i = 0; i < 50; i++)
        {
            for (size_t j = 0; j < 50; j++)
                std::cout << pole[i][j];
            std::cout << std::endl;
        }
 
        Sleep(500);
        BigSnake.MoveSnake();
        system("cls");
    }
    system("pause");
    return 0;
}
Вложения
Тип файла: rar ConsoleApplication14.rar (614.8 Кб, 3 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru