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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив. 
:(
    Опции темы
hafman
Дата 27.5.2011, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вообщем надо обойти массив структур, и сделать на каждом шаге сделать сними одинаковые действия.
PM MAIL   Вверх
xvr
Дата 27.5.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Код

// somewhere at global level
struct Point {
 int x, y;
} points[]={
{1,2}, // x & y coordinate for first point
{1,4}, // the same for second 
{3,5}, // ... 3d
...   // and for all others
};



// somewhere in function
DL_Surface* ono=load_image("zamena.png");
for(int i=0;i<sizeof(points)/sizeof(points[0]);++i)
 {
  SDL_Rect r={points[i].x,points[i].y};
  SDL_BlitSurface(ono, clip, dst, &r);
 }


PM MAIL   Вверх
hafman
Дата 27.5.2011, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @  27.5.2011,  21:05 Найти цитируемый пост)
1:

    
// somewhere at global level
struct Point {
 int x, y;
} points[]={
{1,2}, // x & y coordinate for first point
{1,4}, // the same for second 
{3,5}, // ... 3d
...   // and for all others
};
// somewhere in function
DL_Surface* ono=load_image("zamena.png");
for(int i=0;i<sizeof(points)/sizeof(points[0]);++i)
 {
  SDL_Rect r={points[i].x,points[i].y};
  SDL_BlitSurface(ono, clip, dst, &r);
 }

А как массив в функции наноса передать тогда?
PM MAIL   Вверх
xvr
Дата 27.5.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(hafman @  27.5.2011,  21:44 Найти цитируемый пост)
А как массив в функции наноса передать тогда? 

Тут массив глобальный. Можно его и параметром передать (но тогда понадобится 2 параметра - длинна массива тоже нужна)
Код

void draw(Point* pnts, int total_points)
{
 ...
 for(int i=0;i<total_points;++i)
 {
  SDL_Rect r={pnts[i].x,pnts[i].y};
  SDL_BlitSurface(ono, clip, dst, &r);
 }
...
}

// Call -
draw(points,sizeof(points)/sizeof(points[0]));
Или предусмотреть специальный завершающий элемент в массиве (например {-1,-1}). В таком случае размер массива передавать не надо

PM MAIL   Вверх
hafman
Дата 28.5.2011, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

#include "ufo.h"

#define SCREEN_WIDTH 700
#define SCREEN_HEIGHT 500

typedef struct {
    int x;
    int y;
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    int g;
    int h;
} points;
int main(){
        int point=30;
    int quit=0, i;
    int ax1=30;
    int ax2=70;
    SDL_Surface* hero;
    SDL_Surface* screen;
    SDL_Event event;
    SDL_Surface* ufo_sur[point];
    points ufo[point];
    int hx=rand(10,250);
    int hy=45;
    hero=load_image("tarelka.png");
    SDL_Init(SDL_INIT_EVERYTHING);
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 24, SDL_HWSURFACE | SDL_DOUBLEBUF);
    for(i=0;i != point ;i++){
        ufo[i].x=ax1+ 100*i;
        ufo[i].y=300;
        ufo[i].a=ax2+100*i;
        ufo[i].b=340;
        ufo[i].c=ax1+100*i;
        ufo[i].d=380;
        ufo[i].e=ax2+100*i;
        ufo[i].f=420;
        ufo[i].g=ax1+100*i;
        ufo[i].h=460;
        ufo_sur[i]=load_image("image.png");
    }
    while(!quit){
        SDL_PollEvent(&event);

        if (event.type == SDL_QUIT)
        {    

            quit = 1;
        }
        else if (event.type == SDL_KEYDOWN) 
            {
            if (event.key.keysym.sym == SDLK_ESCAPE)
            {
                quit = 1;        
            }
        
            if (event.key.keysym.sym == SDLK_a)
            {
                hx-=1;


            }
            if (event.key.keysym.sym == SDLK_d)
            {
                hx+=1;

            }
            if (event.key.keysym.sym == SDLK_w)
            {
                hy-=1;

            }    
            if (event.key.keysym.sym == SDLK_s)
            {
                hy+=1;
            }            
        }
        
        SDL_FillRect(screen,&(screen->clip_rect),SDL_MapRGB(screen->format,0x00, 0x00, 0x00));
        
        if (ufo[i].x==hx&ufo[i].y==hy){SDL_FreeSurface (ufo_sur[i]);}
        for(i=0;i != point ;i++){
            apply_surface(ufo[i].x,ufo[i].y,ufo_sur[i],screen,0);
            apply_surface(ufo[i].a,ufo[i].b,ufo_sur[i],screen,0);
            apply_surface(ufo[i].c,ufo[i].d,ufo_sur[i],screen,0);
            apply_surface(ufo[i].e,ufo[i].f,ufo_sur[i],screen,0);
            apply_surface(ufo[i].g,ufo[i].h,ufo_sur[i],screen,0);
        }
        apply_surface(hx,hy,hero,screen,0);
            SDL_Flip(screen);
    }
    printf("dsfsdf");
    SDL_Quit();
    return 0;
}

Написал код, теперь ни худо бедно наносятся, возникла проблема "уничтожения" ufo. Как не крутил и не получилось :c,доходило до самого тупого 
Код

if (ufo[i].x==hx&ufo[i].y==hy){ufo[i].x+=100;}

Как их удалить можно?

Это сообщение отредактировал(а) hafman - 28.5.2011, 22:38
PM MAIL   Вверх
bsa
Дата 30.5.2011, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



hafman, Если ты про убирание с экрана, то перед рисованием надо сохранить область экрана, а после восстановить ее. К сожалению, далеко не всегда это получается сделать просто. Поэтому, в современных графических приложениях экран рисуют полностью каждый кадр.
PM   Вверх
Dov
Дата 30.5.2011, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(hafman @  28.5.2011,  22:37 Найти цитируемый пост)
if (ufo[i].x==hx&ufo[i].y==hy)

Может быть ты так хотел?
Код
if (ufo[i].x==hx && ufo[i].y==hy)




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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