С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92

и снова змейка

10.08.2012, 17:56. Показов 2303. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня огромная просьба,задали на выходные написать змейку на С++ в Visual Sudio 2010, но очень много ограничений в плане библиотек,поэтому интернет отпадает(уже гуглил,везде то что мы не учили)сам никак не справлюсь,если не тяжело не могли бы вы мне помочь,мозг уже закипает,перемещение с одной звездочкой сделал,а как влепить 3 и двигать их не могу написать
Code
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
#include<iostream>
    #include<ctime>
    #include<conio.h>
    #include<Windows.h>
    using namespace std;
    void main()
    {srand(time(0));
    const int row = 20;
    const int col = 20;
    int mass[row][col]={};
    int stx=3;
    int sty=5;
    for ( int j = 0 ; j < row ; j++ )
    {
     for (int i = 0 ; i < col ; i++ )
     {
      mass[j][i] = ' ';
     }
    }
    mass[stx][sty] = '*';
    mass[stx+1][sty] = '*';
    mass[stx-1][sty] = '*';
    int inp = 0;
    do
    {
 
    system("cls");
    for ( int j = 0 ; j < row ; j++ )
     {
      for (int i = 0 ; i < col ; i++ )
      {  
       cout << char (mass[j][i]) << " ";
      }
      cout << endl ;
     }
    Sleep(300);
    if (_kbhit())
    {inp=_getch();
        if (inp==224)
        {
         inp=_getch();
        }
    }
    switch (inp)
    {
    case 75://vniz
     mass[stx][sty] = ' ';
     mass[stx][--sty] = '*';
     break;
    case 77://vpravo
     mass[stx][sty] = ' ';
     mass[stx][++sty] ='*';
     break;
    case 72://vverx
     mass[stx][sty] = ' ';
     mass[--stx][sty] = '*';
     break;
    case 80://vlevo
     mass[stx][sty] = ' ';
     mass[++stx][sty] = '*';
    break;
    default:
     mass[stx][sty] = '*';
     mass[stx+1][sty] = '*';
     mass[stx+2][sty] = '*';
     mass[stx-1][sty] = ' ';
    break;
     } 
    }
    while(inp!=27);
 
 
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.08.2012, 17:56
Ответы с готовыми решениями:

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за последние дни выскочившая у многих. Через...

Игра "Змейка": чтобы змейка не съедала сама себя
Здравствуйте! Пишу змейку на VB 2010. Не получается составить условие того, что бы змейка не ползла в направлении обратному...

Как сделать чтобы таймер дойдя до 0 стартовал снова и снова?
Здравствуйте :) Как сделать чтобы таймер дойдя до 0 стартовал снова и снова? TimerSec = 59; TimerMin = 6; for(int i = TimerSec;...

14
Twilight Parasite
 Аватар для Invader_Zim
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
10.08.2012, 21:28
Какие либы/хедеры использовать можно?
0
 Аватар для RaiaNKnight
97 / 71 / 12
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
10.08.2012, 21:35
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
#include <iostream>
#include <ctime>
#include <conio.h>
#include <vector>
#include <Windows.h>
 
using namespace std;
 
struct coord
{
    int x;
    int y;
};
 
void move(vector <coord> &snake)
{
    for(int i=snake.size()-1;i>0;i--)
    {
        snake[i].x=snake[i-1].x;
        snake[i].y=snake[i-1].y;
    }
}
bool check_collision(vector <coord> &snake)
{
    for(int i=1;i<snake.size();i++)
        if(snake[i].x==snake[0].x&&snake[i].y==snake[0].y)
            return true;
    return false;
}
void add_element_to_snake(vector <coord> &snake,char elem,int &curr_length)
{
    curr_length++;
    coord xy;
    xy.x=snake[curr_length-2].x;
    xy.y=snake[curr_length-2].y;
    snake.push_back(xy);
}
 
int main()
{
    srand(time(0));
    vector <coord> snake;
    int curr_length=1;
    const int row = 20, col = 20;
    char mass[row][col]; 
    coord xy;
    xy.x=rand()%20; xy.y=rand()%20; //head
    snake.push_back(xy);
    for ( int j = 0 ; j < row ; j++ )
        for (int i = 0 ; i < col ; i++ )
            mass[j][i] = ' ';
    mass[snake[0].x][snake[0].y] = '*'; 
    for(int i=0;i<10;i++)
    {
        mass[rand()%20][rand()%20]='*';  //еда 
    }
    int inp = 0;
    do
    {
        system("cls");
        for ( int j = 0 ; j < row ; j++ )
        {
            for (int i = 0 ; i < col ; i++ )
                cout << mass[j][i] << " ";
            cout << endl ;
        }
        Sleep(800);
        if (_kbhit())
        {
            inp=_getch();
            if (inp==224)
                inp=_getch();
        }
        mass[snake[snake.size()-1].x][snake[snake.size()-1].y]=' ';
        move(snake);
        switch (inp)
        {
            case 75://left
                snake[0].y--;
                if(snake[0].y<0)
                    snake[0].y=19;
                break;
            case 77://right
                snake[0].y++;
                if(snake[0].y>19)
                    snake[0].y=0;
                break;
            case 72://up
                snake[0].x--;
                if(snake[0].x<0)
                    snake[0].x=19;
                break;
            case 80://down
                snake[0].x++;
                if(snake[0].x>19)
                    snake[0].x=0;
                break;
        } 
        char curr_elem = mass[snake[0].x][snake[0].y];
        if(curr_elem=='*')
            if(!check_collision(snake))
                add_element_to_snake(snake,curr_elem,curr_length);
            else
            {
                system("cls");
                cout<<"Score - "<<curr_length<<endl;
                cout<<"Game over!";
                break;
            }
        for(int i=0;i<snake.size();i++)
            mass[snake[i].x][snake[i].y]='*';
    }
    while(inp!=27);
    _getch();
    return 0;
}
Если змейка состоит из 2 и более элементов, то при попытке идти "назад", т.е. при действии типа -> <- проигрыш. Можете исправить, если желаете.
И вообще, вам бы как-нибудь избавиться от постоянного очищения консоли, долго уж это.
Есть вроде бы методы для прямого вывода в определенную позицию или нет?

P.s. И ошибки тоже не исключены
1
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
10.08.2012, 21:48  [ТС]
к сожалению необходимо без векторов(мы их не учили),а все что можно использовать в первом коде
0
 Аватар для RaiaNKnight
97 / 71 / 12
Регистрация: 29.06.2011
Сообщений: 465
Записей в блоге: 1
10.08.2012, 21:54
Ну исправь на массив ограниченной длины. В чем проблема?
1
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
10.08.2012, 22:12  [ТС]
не могу понять как и куда его вставить,я пытался ничего не выходит
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.08.2012, 22:48
Asante, посмотрите сюда, возможно пригодиться
Очень простое заполнение матрицы змейкой по диагоналям

Добавлено через 52 секунды
Код со скрином отработки в консоли здесь
Заполнение змейкой
1
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
10.08.2012, 22:55  [ТС]
Спасибо,Юра,но не совсем то,там есть вещи которые мы еще не учили,хотя все заполнения понятны
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.08.2012, 23:21
Цитата Сообщение от Asante Посмотреть сообщение
хотя все заполнения понятны
- дык файловое чтение изыми из кода и динамическое выделение памяти замени на статику, из всего кода важна лишь
C++
1
double **FillArr (int n)
а уж как её приспособить - это дело программиста
0
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
10.08.2012, 23:24  [ТС]
мы такого ниразу не писали,что это означает?(прости за необразованость)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
10.08.2012, 23:52
Это функция пользователя,ок я понял что ты еще в самом начале изучения языка,сутра перепишу тебе проект исходя из имеющихся у тебя знаний и навыков
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
11.08.2012, 10:07
Asante, как и обещал
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
#include <iomanip>
#include <iostream>
using namespace std;
 
const int N = 32; //Данная константа будет определять максимальный размер матрицы
 
int main()
{
    int i, j, k = 0;//Счётчики
    int diag    = 0;//Тоже счётчик но для диагоналей
    int n = 0;//Будет содержать размер матрицы
    //Выделяем память под элементы массива
    double arr[N][N] = {0};
    cout<<"Enter size of matrix : ";cin>>n;
    if(N < n)
        cout<<"size of matrix is too large\n";
    else
    {
        //Собственно заполнение матрицы
        for(diag = 0; diag < 2*n; diag++)
        {
            for(i = 0; i < n; i++)
            for(j = 0; j < n; j++)
            {
                if(diag + 1 == (i + 1) + (j + 1))
                {
                    if(diag % 2)
                        arr[i][j] = k + 1;
                    else
                        arr[j][i] = k + 1;
                    k = k + 1;
                }
            }
        }
        //Печать заполненной матрицы
        for(i = 0; i < n; i++)
        {
            for(j = 0; j < n; j++)
                cout<<setw(2)<<arr[i][j]<<" ";
            cout<<endl;
        }
    }
    return 0;
}
Миниатюры
и снова змейка  
0
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
11.08.2012, 12:47  [ТС]
код почти понятен(кроме setw(2)),но как применить его не пойму
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
11.08.2012, 12:49
Цитата Сообщение от Asante Посмотреть сообщение
но как применить его не пойму
Да никак. Это ведь совершенно другая задача
0
18 / 18 / 0
Регистрация: 05.10.2011
Сообщений: 92
11.08.2012, 13:32  [ТС]
я про тоже,сделал поле сделал змейку,правда еще не бегает))),как вставить еду чтоб не появлялась на змейке
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2012, 13:32
Помогаю со студенческими работами здесь

HP 625 снова и снова перезагружается в безопасный не заходит
Ребята помогите , проблема вот какая врубаю я ноут он доходит до заставки майкрософта и снова перезагружается в безопасный не заходит, ...

Снова ТИС и снова делемма
Привет Ребята! Имею сканер-штрих-кода, который дал дамам на склад. Представьте себе такую ситуацию: Есть ручки, которые бывают...

Снова. Снова этот repaint()
Всем привет. Сколько дней уже пытаюсь, нечего не выходит. Метод repaint не срабатывает. Как я понимаю, ошибка появляется в методе redraw...

и снова .htaccess и снова rewriterule
Добрый день. Недавно столкнулся с проблемой преобразования URL, в связи с чем пришлось перерыть кучу материала по данной теме, но вопрос...

Снова поток. Снова синхронизация
Приветствую всех. Тема измусолена до дыр, поэтому прошу не пинать. В программе создан поток. В каких случаях поток может работать с...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru