Перейти к содержимому
Kknewkles

Программирование на С++

Рекомендуемые сообщения

Люди добрые, помогите. Я совершенно не знаю как обрабатывать массивы(болел) и забыл как в С++ надо рисовать(опять болел :-[ ). Если вы мне скажете что надо покопацца по нету и туторам, то я отвечу что нет ничего лучше чем если тебя проконсультируют люди. ;)

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Если тебе поможет... Рисовать мона так:

#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"

int x,y;
SDL_Event event;
SDL_Surface *screen;
SDL_Surface *image;
SDL_Rect dst;
SDL_Surface *frame_01, *frame_02, *frame_03,
 *frame_04, *frame_05, *frame_06, *frame_07, *frame_08,
 *frame_09, *frame_10, *frame_11,
 *frame_12, *frame_13, *frame_14, *frame_15, *frame_16;
int f=0;
bool d=true;
SDL_Thread *Animate;
void ShowBmp(int x, int y)
{

SDL_Rect dest;
   /* Load the BMP file into a surface */
  /* Blit onto the screen surface */
   dest.x = x;
   dest.y = y;
   dest.w = image->w;
   dest.h = image->h;
   SDL_BlitSurface(image, NULL, screen, &dest);
   SDL_UpdateRect(screen,0,0,0,0);

   return;

}







void InitFrames()
{
 frame_01 = SDL_LoadBMP("frame_01.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_02 = SDL_LoadBMP("frame_02.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
	 frame_03 = SDL_LoadBMP("frame_03.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_04 = SDL_LoadBMP("frame_04.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
 frame_05 = SDL_LoadBMP("frame_05.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_06 = SDL_LoadBMP("frame_06.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
	 frame_07 = SDL_LoadBMP("frame_07.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_08 = SDL_LoadBMP("frame_08.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
 frame_09 = SDL_LoadBMP("frame_09.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_10 = SDL_LoadBMP("frame_10.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
	 frame_11 = SDL_LoadBMP("frame_11.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_12 = SDL_LoadBMP("frame_12.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
 frame_13 = SDL_LoadBMP("frame_13.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_14 = SDL_LoadBMP("frame_14.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);
	 frame_15 = SDL_LoadBMP("frame_15.bmp");
 SDL_SetColorKey(frame_01, 1, 0xff00fe);
 frame_16 = SDL_LoadBMP("frame_16.bmp");
 SDL_SetColorKey(frame_02, 1, 0xff00fe);



}
int ShowAnimateFrame(int x, int y)
{
SDL_Rect dest;
SDL_Surface *frame;
   /* Load the BMP file into a surface */
  /* Blit onto the screen surface */
if (d)
{switch (f)
{
	case 0:
		f=1; frame = frame_02;
	break;
	case 1:
		f=2; frame = frame_03;
	break;
	case 2:
		f=3; frame = frame_04;
	break;
	case 3:
		f=4; frame = frame_05;
	break;
	case 4:
		f=5; frame = frame_06;
	break;
	case 5:
		f=6; frame = frame_07;
	break;
	case 6:
		f=7; frame = frame_08;
	break;
	case 7:
		f=0; frame = frame_01;
		break; }
}

else {

		switch (f) {
	case 0:
		f=1; frame = frame_10;
	break;
	case 1:
		f=2; frame = frame_11;
	break;
	case 2:
		f=3; frame = frame_12;
	break;
	case 3:
		f=4; frame = frame_13;
	break;
	case 4:
		f=5; frame = frame_14;
	break;
	case 5:
		f=6; frame = frame_15;
	break;
	case 6:
		f=7; frame = frame_16;
	break;
	case 7:
		f=0; frame = frame_09;
		break; }
};

   dest.x = x;
   dest.y = y;
   dest.w = frame->w;
   dest.h = frame->h;
   SDL_BlitSurface(frame, NULL, screen, &dest);
   SDL_UpdateRect(screen,0,0,0,0);

SDL_Delay(30);
return 1;
}

int ShowAnimateSlowFrame(int x, int y)
{
SDL_Rect dest;
SDL_Surface *frame;
   /* Load the BMP file into a surface */
  /* Blit onto the screen surface */
if (d)
{switch (f)
{
	case 0:
		f=1; frame = frame_02;
	break;
	case 1:
		f=2; frame = frame_03;
	break;
	case 2:
		f=3; frame = frame_04;
	break;
	case 3:
		f=4; frame = frame_05;
	break;
	case 4:
		f=5; frame = frame_06;
	break;
	case 5:
		f=6; frame = frame_07;
	break;
	case 6:
		f=7; frame = frame_08;
	break;
	case 7:
		f=0; frame = frame_01;
		break; }
}

else {

		switch (f) {
	case 0:
		f=1; frame = frame_10;
	break;
	case 1:
		f=2; frame = frame_11;
	break;
	case 2:
		f=3; frame = frame_12;
	break;
	case 3:
		f=4; frame = frame_13;
	break;
	case 4:
		f=5; frame = frame_14;
	break;
	case 5:
		f=6; frame = frame_15;
	break;
	case 6:
		f=7; frame = frame_16;
	break;
	case 7:
		f=0; frame = frame_09;
		break; }
};

   dest.x = x;
   dest.y = y;
   dest.w = frame->w;
   dest.h = frame->h;
   SDL_BlitSurface(frame, NULL, screen, &dest);
   SDL_UpdateRect(screen,0,0,0,0);

SDL_Delay(120);
return 1;
}
/*
int FilterEvents(const SDL_Event *event) {
   static int boycott = 1;

   //This quit event signals the closing of the window 
   if ( (event->type == SDL_QUIT) && boycott ) {
       printf("Quit event filtered out -- try again.\n");
       boycott = 0;
       return(0);
   }
   if ( event->type == SDL_MOUSEMOTION ) {
       printf("Mouse moved to (%d,%d)\n",
               event->motion.x, event->motion.y);
       return(0);    
	//Drop it, we've handled it
   }
   return(1);
}
*/


int main( int argc, char* argv[] )
{
SDL_EventState(SDL_KEYDOWN, SDL_IGNORE);
SDL_EventState(SDL_PRESSED, SDL_IGNORE);
SDL_EnableKeyRepeat(0, 1);


   if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)==-1)) { 
       printf("Could not initialize SDL: %s.\n", SDL_GetError());
       exit(-1);
   }

    screen = SDL_SetVideoMode(800, 450, 32, SDL_HWSURFACE|SDL_SRCALPHA|SDL_ANYFORMAT);
 SDL_WarpMouse(16,16);
 SDL_ShowCursor(SDL_DISABLE);
   if ( screen == NULL )
{// Если установить разрешение не удалось
       fprintf(stderr, "Невозможно установить разрешение 640x480: %s\n", SDL_GetError());
       exit(1); }

InitFrames();
y=450-64;
x=0;
dst.x = 0;
   dst.y = 450-64+40;
   dst.w = 800;
   dst.h = 450-(450-64+40);
SDL_FillRect(screen, NULL, 0xff00fe);
SDL_FillRect(screen, &dst, 0xffffee);
ShowAnimateFrame(x,y);
SDL_UpdateRect(screen,0,0,0,0);


//ShowBmp(x,y);
while ( SDL_PollEvent(&event) >= 0 ) {
       switch (event.type) {

		 case SDL_KEYDOWN: {
            if ( event.key.keysym.sym==SDLK_RIGHT && event.key.state==SDL_PRESSED && x<752) {
            x=x+12; d=1;
		                }

            if ( event.key.keysym.sym==SDLK_LEFT && event.key.state==SDL_PRESSED && x>4) {
            x=x-12; d=0;
			            }

	     if ( event.key.keysym.sym==SDLK_UP && event.key.state==SDL_PRESSED && y>4) {
            y=y-8;         }

		     if ( event.key.keysym.sym==SDLK_DOWN && event.key.state==SDL_PRESSED && y<382) {
            y=y+8;                }

		 SDL_FillRect(screen, NULL, 0xff00fe);
		 SDL_FillRect(screen, &dst, 0xffffee);
		 ShowAnimateFrame(x,y);
		//if (f) f=0; else f=1;

						   }
           break;

          case SDL_QUIT: {
               printf("Quit requested, quitting.\n");
               exit(0);
           }
           break;
		default:
		ShowAnimateSlowFrame(x,y);
			break;


       }

   }



}

но думаю, ты хотел не этого :Р

 

а если подумать, овтет на номер один здесь тоже мона прсимотреть.

Кривой - жутко... но он есть.

 

Поделиться сообщением


Ссылка на сообщение

Нюю, спасибо, но мне нужен был код вывода на экран какого-нтиь простого обьекта :nyam:

Поделиться сообщением


Ссылка на сообщение

Как по мне, это оно и есть :nyam: а вообще, если под винду, тебе в GDI+, точнее - в методы, а я методы не понимаю вообще.

Поделиться сообщением


Ссылка на сообщение

Как мне написал мой друг, должно быть так:

int a = DETECT, b;
initgraph (&a, &b, " ");
bar (10, 10, 100, 100);

Поделиться сообщением


Ссылка на сообщение

может оно и сработает; только под функцией bar обычно понимаю пользовательскую функцию; шось я ее в своих рефах не вижу...

Поделиться сообщением


Ссылка на сообщение

Но вообще, код который рисует кружок у меня получился таким:

#include<conio.h>
#include<iostream.h>
#include<graphics.h>
#include<bios.h>

void main()
{
int a=DETECT, b, x,y, r1=50, r2=50, color=RED;
initgraph(&a, &b, " ");
x=300; y=300;
setcolor(RED);
setfillstyle(SOLID_FILL, RED);
fillellipse(x, y, r1, r2);
getch();
}

Не исключаю вероятности, что я понапихал лишних библиотек. :nyam:

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Гм, если означенный язык называется C++, то я называюсь человеком, не умеющим устанавливать операционную систему и не знающим что такое компилятор ;D Все приведённые фрагменты - ISO C 1989. Если он приплюснутый, то покажите мне хотя бы один класс ;)

Кстати, Баньши, если писать с использованием SDL не под винду, то лучше (ИМХО) использовать посиксовые треды. Хотя это и труднее. С другой стороны это будет уже не кроссплатформенная программа, так что фиг с ними...

Knewkles, кури win32api.hlp и M$DN. Либо качай SDL (http://libsdl.org/), документацию к ней и втыкай в неё.

Поделиться сообщением


Ссылка на сообщение

Ну это ты знаешь стандарт ;D меня же волновало выполнение конкретной задачи при абсолютном незнании языка :Р

А вот MSDN я ненавижу... мусора прорва, а пользы мало.

Поделиться сообщением


Ссылка на сообщение

Люди, я проги ни под что не пишу. Мне надо все в той же среде С++. ;)

--------------------

Update:

Люди, извиняйте. Я так понял, что вы все говорите про Visual С++, а я всё пишу ещё в стааареньком Борланде. ^^*

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Неа, ты не понял.

если упрощать - С - это язык, от паскаля отличающийся мало, он "почти" не объектно ориентированный. С - это функции.

С++ - это объектно-оринтированный С. Это - методы.

А Vsual С можно настроить под любой стандарт.

Поишшшшши доки по гнуси, gcc т.е., там мона кое что найти.

Поделиться сообщением


Ссылка на сообщение

Имеется код:

 

#include<iostream.h>
#include<dos.h>
#include<graphics.h>
#include<conio.h>

void main()
{
int a=DETECT, b, x, y, r1=100, r2=30;
initgraph(&a,&b, " ");
setcolor(GREEN);
setfillstyle(SOLID_FILL, RED);
x=100; y=200;
while(!kbhit())
     {
      cleardevice();
      bar(x,y,x+r1,y+r2);
      x+=10;
      if(x<640) x+=10;
      else x=0;
      delay(200);
     }
getch();
}

Это, типа вагон. :) К нему надо добавить колесики. Как??? ;D

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Я сначала доберусь домой, посомтрю, компилируется ли вообще это чудо :)

Поделиться сообщением


Ссылка на сообщение

А как ты вообще компилируешь, на чем? ;D

АААА!!!Где библиотеки?! :) ;D А ладно, ща исправлю...

Update: исправил.

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

mingw + gcc 3.4.5

Поделиться сообщением


Ссылка на сообщение

Что это? Мне надо чтоб он рисовал в Борланде, я не под ОС прогу пишу. :)

 

Вот в такой фигне. ;D

post-1838-1169582736_thumb.png

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Как быстро идут годы! 7 лет не юзал борланд

ностальгирует

MinGW - это www.mingw.org

Поделиться сообщением


Ссылка на сообщение

Ну и что это? ^^* Банши, теперь ты понял что я прошу советов в Борланде, да? :p

Поделиться сообщением


Ссылка на сообщение

Это печально, потому что даже с набором хэдэров и библиотек я это чудище скомпилировать не могу.

Вам не С преподают, а Борланд - а это отнюдь не стандарт...

Если смогу разобратся - помогу, а так - рекомендую стандартом языка пользоватся...

Поделиться сообщением


Ссылка на сообщение

Каким?

Если можно, сцылку на скачивание и имя проги.

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Стандарт - это не сама программа, это стандарт языка.

Поделиться сообщением


Ссылка на сообщение

Да это понятно. O_O Какой компилятор(прога) соответствует стандартам?

В чем ты пишешь? ;D

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

Писать в компиляторе невозможно :rofl:, пишут либо в текстовом редакторе, либо в IDE. Лично я для написания сорцов на Си использую попеременно VIM и Emacs, для компиляции GCC.

Насколько я понимаю, Баньши пользует то же в виде комплекта Minimalist GNU Win32

Что же до написания программ именно "под венду" - лучше всё-таки для этих целей использовать M$VS 7-8 (в 6 довольно таки кривая и неудобная IDE).

Изменено пользователем [unix]

Поделиться сообщением


Ссылка на сообщение

Короче: я юзаю Borland C++ 3.1

 

ЗЫ: Выложите плз кто-нить Borland С++ 5 x(

Поделиться сообщением


Ссылка на сообщение

Имеется вот такая фигня: двумерный массив. Как приплюсовать все его вертикальные элементы универсальным методом?

#include<iostream.h>
#include<conio.h>
#include<bios.h>
#define M 5
#define N 3
#define ESC 1
void main()
{
int i,j;
int array[M][N];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
cin>>array[i][j];
for(i=0;i<M;i++)
{
 cout<<endl;
 for(j=0;j<N;j++)
 cout<<array[i][j]<<"  ";
}
getch();
clrscr();
}

 

ЗЫ: кодбокс зажирает буквы 0_o

Изменено пользователем Kknewkles

Поделиться сообщением


Ссылка на сообщение

нифиганепонял...

ты это хочешь сделать:

#include <stdio.h>
#define _M 5
#define _N 3
int main() {
int i, j;
char array[_M][_N];
for (i = 0; i <_M; i++) {
	for (j = 0; j <_N; j++) {
		array[i][j]=getchar();
		// check
		printf("%c", array[i][j]);
	}
}
}

Или что?

Поделиться сообщением


Ссылка на сообщение

Нет, не это.

Есть массив:

 

1 2 3

4 5 6

7 8 9

10 11 12

13 14 15

 

Как универсальным методом(то бишь, чтобы работал, если другой массив введем, тоже двумерный) приплюсовать все его вертикальные элементы(кол-во сумм будет равно кол-ву строк)?

Поделиться сообщением


Ссылка на сообщение

м... я учу просто С. но я бы попробовал zаписывать суммы столбцов иz двумерного массива в один одномерный, типо

 

for (j=0;j<nj;j++){

for (i=0;i<nj;i++)

array_s+=array[j];

}

 

если я правельно понял твою zадачу (:

Изменено пользователем Destructor™

Поделиться сообщением


Ссылка на сообщение

Ну да. Понял правильно <_<

Поделиться сообщением


Ссылка на сообщение

Оох... Родной Багленд. Помню, недавно совсем учился в Turbo C++ 3.1 . Вещь жестокая. Луше сразу учиться на Билдере. Так я до конца и не прочитал про указатели - слишком мутно написано. Но вот в чём прикол - сейчас продолжаю программировать уже в Винде, в том самом Builder C++ 6: хоть он весь построен на классах и указателях, я всё понимаю довольно легко ;) Kknewkles, мы с тобой собратья по несчастью ЫЫ

Изменено пользователем Celeroctos

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×