Имя пользователя:
Пароль:
 

Название темы: Помогите с кодом с++
Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Nerest, советы:
1. обрамляй код тегом "code", иначе нечитаемо
2. твой код не собирается т.к. перепутано местами, где надо .h и где не надо
3. В с/c++ индекс массивов начинается с 0 (но твой код работоспособен). Это чаще бывает удобно, чем когда начинается с 1
4. if(x==true) сработает только тогда, когда int(x)=1, if (x) тогда, когда int(x)!=0. x лучше писать в виде is_XXX или have_XXX, например if (is_kbhit())
5. Проследи места, когда ты делаешь вывод на экран. Выводить нужно 1 раз за цикл, тогда, когда у тебя поле построено полностью
Вот так работает:
Код: Выделить весь код
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
using namespace std;

char pole[20][20]; int symbol;

int coordinatesX[1000], coordinatesY[1000];
int size;
int choiseX, choiseY;

void field()
{
    for (int i = 0; i<20; i++)
    {
        for (int j = 0; j<20; j++)
        {
            if (i==0 || i == 19 || j == 0 || j == 19) {pole[i][j]='#';}
            else {pole[i][j]=' ';}
        }
    }
    cin.get();
}

void standart()
{
    field();
    coordinatesY[1]=2; coordinatesX[1]=3; coordinatesY[2]=2; coordinatesX[2]=2;
    choiseX = 1; choiseY=0;
    size = 2;
}

void display()
{
    system ("cls");
    for (int i = 0; i<20; i++)
    {
        for (int j = 0; j<20; j++)
        {
            cout << pole[i][j];
            if (j == 19) cout << endl;
        }
    }
}


void snake()
{
    switch (choiseX)
    {
        case 1: pole[coordinatesY[1]][coordinatesX[1]] = '>'; break;
        case -1: pole[coordinatesY[1]][coordinatesX[1]] = '<'; break;}
        switch (choiseY){
        case 1: pole[coordinatesY[1]][coordinatesX[1]] = 'v'; break;
        case -1: pole[coordinatesY[1]][coordinatesX[1]] = '^'; break;
    }
    for (int i = 2; i <= size; i++)
    {
        pole[coordinatesY[i]][coordinatesX[i]]='@' ;
    }
}

void chlearing()
{
    pole[coordinatesY[1]-choiseY][coordinatesX[1]-choiseX]=' ';
    pole[coordinatesY[2]-choiseY][coordinatesX[2]-choiseX]=' ';
}

void clear()
{
    for (int i = 1; i<=size; i++)
    {pole[coordinatesY[i]][coordinatesX[i]]=' ';}
}

void move()
{
    clear();
    for (int i = size;i>=2;i--)
    {
        coordinatesX[i]=coordinatesX[i-1];
        coordinatesY[i]=coordinatesY[i-1];
    }
    coordinatesX[1]=coordinatesX[1]+choiseX;
    coordinatesY[1]=coordinatesY[1]+choiseY;
    //display();
}

void changing()
{
    symbol = getch();
    switch (symbol)
    {
        case 'd': if (choiseX!=-1) choiseX = 1; choiseY=0; break;
        case 'a': if (choiseX!=1) choiseX = -1; choiseY=0; break;
        case 's': if (choiseY!=-1) choiseY = 1; choiseX=0; break;
        case 'w': if (choiseY!=1) choiseY = -1; choiseX=0; break;
        case 'f': size++; break;
    }
}




int main()
{
    standart();

    while(1)
    {
        if (kbhit()==true){changing();}
        move();
        snake();
        display();
        Sleep(200);
    }

    cin.get();
}
Интересный эффект, когда змейка заходит за границу
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:16, 27-07-2014 | #2

Название темы: Помогите с кодом с++