Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ИГРА ЗМЕЙКА НА СИ в среде BC 3.1 
:(
    Опции темы
Цивильный
Дата 21.1.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Код

Привет, ребят. Сделал я змейку, но не могу запретить ей кусать саму себя. У кого есть терпение, помогите пожалуйста. 

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
//------------------------------------------------

void main(void)
{
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");
int i=0, xpos, ypos, x1, y1,x2,y2, l,m,b,f, mx, my, t,len=0, speed=100, d=0,k=0, score=0, level=1, bomb, tmp;
char scr[5], lev[5];
int Ax[63]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630};
int Ay[40]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400};
int Ax2[2500], Ay2[2500],Ax3[2500],Ay3[2500];
randomize();
rectangle(13,13,627,397);
setcolor(7);
outtextxy(290,450,"Score: ");
itoa(score,scr,10);
outtextxy(347,450,scr);
outtextxy(290,430,"Level: ");
itoa(level,lev,10);
outtextxy(347,430,lev);
l=rand()%62;
m=rand()%39;
b=rand()%62;
f=rand()%39;
if (l==0) l++;
if (b==0) b++;
if (l==62) l--;
if (b==62) b--;
if (m==0) m++;
if (f==0) f++;
if (m==39) m--;
if (f==39) f--;
x1=Ax[l];
y1=Ay[m];
Ax3[0]=Ax[b];
Ay3[0]=Ay[f];
ypos=200;
xpos=320;
    setcolor(7);
    circle(xpos,ypos,5);


int key;
 do
    {
     setcolor(7);
    circle(x1,y1,5);
     for (bomb=0;bomb<level;bomb++)
     {
        setcolor(4);
            circle(Ax3[bomb],Ay3[bomb],5);
            setfillstyle(1,4);
            floodfill(Ax3[bomb],Ay3[bomb],4);
   }

    mx=my=0;
     if(kbhit()) key=getch();
     if(key==80) my=10;
     if(key==72) my=-10;
     if(key==77) mx=10;
     if(key==75) mx=-10;
    xpos+=mx;
    ypos+=my;
    delay(speed);



     setcolor(0);
     circle(Ax2[0],Ay2[0],5);
     setcolor(7);
     circle(xpos,ypos,5);
     if (xpos==x1 && ypos==y1)
        {
        circle(x1,y1,5);
        l=rand()%62;
        m=rand()%39;
         if (l==0 ) l++;
         if (l==62) l--;
         if (m==0 ) m++;
         if (m==39) m--;
        x1=Ax[l];
        y1=Ay[m];
        setcolor(7);
        circle(x1,y1,5);
            speed--;
        score+=10;
        setcolor(0);
        outtextxy(347,450,scr);
        itoa(score,scr,10);
        setcolor(7);
        outtextxy(347,450,scr);
        len+=1;
        d++;
        k++;


        }
     for (i=0;i<len;i++)
        {
        Ax2[i]=Ax2[i+1];
        Ay2[i]=Ay2[i+1];
        
        }
    Ax2[len]=xpos;
    Ay2[len]=ypos;


    if (k==10)
            {
      d=0;
      speed=100;
             for (int g=len;g>=0;g--)
                {
                setcolor(0);
                circle(Ax2[g],Ay2[g],5);
                }
             len=0;

             setcolor(0);
             circle(x1,y1,5);
             for (bomb=0;bomb<level;bomb++)
                {

                 circle(Ax3[bomb],Ay3[bomb],5);
                 setfillstyle(1,0);
                 floodfill(Ax3[bomb],Ay3[bomb],0);
                }


             setcolor(7);
             outtextxy(265,200,"Level   complite");
             outtextxy(310,200,lev);
             outtextxy(235,220,"Press any key to continue");

             getch();

             setcolor(7);
             circle(x1,y1,5);
             
             setcolor(0);
             outtextxy(265,200,"Level   complite");
             outtextxy(310,200,lev);
             outtextxy(235,220,"Press any key to continue");
       xpos=320;
             ypos=200;
             setcolor(7);
             circle(xpos,ypos,5);
             setcolor(0);
            outtextxy(347,430,lev);
             level+=1;
            itoa(level,lev,10);

            setcolor(7);
            outtextxy(347,430,lev);
            k=0;
             getch();
             key=getch();
             setcolor(0);
             circle(xpos,ypos,5);
            }

             if (d==3)
            {
            d=0;
            for(bomb=0;bomb<level;bomb++)
            {
                setcolor(0);
            circle(Ax3[bomb],Ay3[bomb],5);
            setfillstyle(1,0);
            floodfill(Ax3[bomb],Ay3[bomb],0);
            }
            for(bomb=0;bomb<level;bomb++)
            {
            b=rand()%62;
            f=rand()%39;
             if (b==0 ) b++;
             if (b==62) b--;
             if (f==0 ) f++;
             if (f==39) f--;
            Ax3[bomb]=Ax[b];
            Ay3[bomb]=Ay[f];
            }
            }

     for (bomb=0;bomb<level;bomb++)
        {

        if (getpixel(xpos+3,ypos)==4)
        {
         for (int g=len;g>=0;g--)
            {
            setcolor(4);
            circle(Ax2[g],Ay2[g],5);
            delay(50);
            }
         for (g=0;g<len;g++)
            {
            setcolor(0);
            circle(Ax2[g],Ay2[g],5);
            delay(50);
            }
         for (g=5;g>0;g--)
            {
            setcolor(0);
            circle(Ax3[bomb],Ay3[bomb],5);
            setfillstyle(1,0);
            floodfill(Ax3[bomb],Ay3[bomb],0);
            setcolor(4);
            circle(Ax3[bomb],Ay3[bomb],g);
            setfillstyle(1,4);
            floodfill(Ax3[bomb],Ay3[bomb],4);
            delay(50);
            }
        delay(200);
        circle(Ax3[bomb],Ay3[bomb],1);
        setfillstyle(1,0);
        floodfill(Ax3[bomb],Ay3[bomb],0);
        delay(400);
        setcolor(7);
        outtextxy(240,200,"Snake was detonated");
        outtextxy(235,220,"Press any key to exit");
        getch();
        closegraph();
        }
        }
         if (getpixel(xpos+3,ypos)==15 | getpixel(xpos-3,ypos)==15 | getpixel(xpos,ypos+3)==15 |  getpixel(xpos,ypos-3)==15)
            {
            setcolor(7);
            outtextxy(240,200,"Snake left for border");
            outtextxy(240,220,"Press any key to exit");
            getch();
            closegraph();
            }

    }
while(key!=27);
getch();
closegraph();
}


Добавлено @ 16:50 
Помогите!
PM MAIL   Вверх
PoloS
Дата 21.1.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



иди отдышысь, отдохни, позже опиши точную проблему, которая у тебя возникла. Кстати не ты ли создаешь уже 3-ю тему с подобным названием? smile  smile  smile 



PM MAIL ICQ   Вверх
Цивильный
Дата 21.1.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Очень большая просьба, кто не может или не хочет помочь, не пишите нихрене. Задолбали своими пустыми сообщениями. smile

Добавлено @ 17:22 
Только и знают, что херню всякую писать. Пишите по теме вопроса пожалуйста!!!
PM MAIL   Вверх
PoloS
Дата 21.1.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



я в шоке. Если каждый будет писать тока листинг (причем такой большой как у тебя), и 1 слово "помогите", то толку от этого 0!!! что именно не работает? или ты думаешь сдесь всем нечего делать и они сразу кинутся разбирать твою прогу? опиши проблему. Компилируется или нет? какую ошибку выдает? как построена и т.д. 
Пока ты это не сдлаешь, ИМХО, помощи не получишь.


а во! нашел твой пост в листинге программы  smile  smile  smile . Частично беру свои слова обратно. 

совет: Реализуй с помощью функций. Сделай глобальную переменную игрового поли и змейки. Заведи функция, к примеру, bool checkCollision(), которая возвратит false в случае удара.

Это сообщение отредактировал(а) PoloS - 21.1.2007, 17:34
PM MAIL ICQ   Вверх
Цивильный
Дата 21.1.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 7.1.2007

Репутация: -2
Всего: нет



Все работает, все компилируется. Мне нужно зделать так, чтобы при наезде головы на какое нибудь звено змейки игра прекращалась.
Что тут не понятного?
PM MAIL   Вверх
nickless
Дата 21.1.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Цивильный @ 21.1.2007,  17:16)
Что тут не понятного?

Непонятен твой код. Легче самому написать змейку, чем пытаться понять функцию main (!!!) на 250 строк без единого комментария и с такими понятными названиями переменных как l, m, b, f, d, k...
Выдели части кода в функции, используй нормальные названия переменных и функций, добавь коментарии - тогда и нам и тебе будет легче


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Maxx
Дата 21.1.2007, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.11.2006

Репутация: нет
Всего: нет



Ты координаты всех элементов змейки сохраняешь??
PM MAIL   Вверх
PoloS
Дата 21.1.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 29.12.2006
Где: МО, г. Одинцово

Репутация: 1
Всего: 5



Код

int Ax[63]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630};
int Ay[40]={10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400};


это клииника... переписывать надо
PM MAIL ICQ   Вверх
Anikmar
Дата 21.1.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Цивильный @  21.1.2007,  17:20 Найти цитируемый пост)
Только и знают, что херню всякую писать. Пишите по теме вопроса пожалуйста!!! 


Какие вопросы - такие и ответы.

Нужна прога игры змейки? - тогда вам в центр помощи.

Хотите помощи, чтобы змейка сама себя не кусала - объясните сначала свой подход, проблему, а не предлагайте разбираться в вашем коде.

А так общий алгоритм такой:

"Если позиция, в которую я должен переместить башку змейки занята ее телом - то выход"
PM MAIL ICQ   Вверх
E_v_g
Дата 3.2.2007, 05:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Если тема еще актульна, могу скинуть змейку, написанную на VB для Excel. Алгоритм то один и тот же...
Если найду, конечно...
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1365 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.