» »

Grafika

Grafika

aaaaa93 ::

Pozdravljeni,
naredil bi neko igrico podobno minecraftu, v jeziku c++, zanima me katero grafiko bi bilo najbolje uprabiti in za kak tutorial se pripročam.
Delal bi z programom codeblocks ali dev c++, ampak se mi zdi code boljši program, bolj pregleden zato se bom odločil zanj.
Problem pa je ko ugasnem računalnik se mi na win7 vedno uniči dev c++, kako sfikseram to napako. Ker me pošteno živcera. Če mi lahko kdo pomaga se priporočam.

hexor ::

Se ti zbriše samo dev c++ ali še kakšna druga datoteka?
Probi preskenirat sistem za kakšnimi virusi oz. mogoče nimaš administratorskih pravic ter se ti ob izklopu vse pobriše...preglej pa odpiši.

aaaaa93 ::



takole zgleda napaka :)

napsy ::

Kakor vem se Dev-C++ že dolgo ne razvija več, tako da potem raje uporabi Code::Blocks.
"If you die, you die. But when you live you live. There is no time to waste."

wnbpotato ::

Kako igro pa bi naredil?

aaaaa93 ::

neki na stil minecraft ali mario ali podobno kot box head

razmišljam še ne vem kero bi..

c0dehunter ::

Malo neordna izbira, ta C++. Kaj pa če bi poskusil z XNA, na osnovi C#? Imaš kar nekaj tutorialov, recimo za začetek: XNAdevelopment
I do not agree with what you have to say,
but I'll defend to the death your right to say it.

aaaaa93 ::

Hja ne vem c++ znam v šoli mso se ga učil, ne znam pa nič ostalih jezikov ;(
mislim da bom naredil ladjice ki se med seobj streljajo, tako igrico...

WizmoTo ::

Ne bi ti rad zbijal volje, ampak glede na primer iz slike tudi C++ ni ravno tvoja močna stran. Najprej includaš C++ standardne knjižnice, potem pa uporabljaš C-jeve funkcije, pa še to je ena OS-dependant, in to pri vsega 3 vrsticah :D
Kar se pa IDE-jev tiče, ti pa priporočam, da jih sploh ne uporabljaš (sploh pa ne Dev-C++, ki je orenk bugast), ampak uporabi rajši nek enostaven editor - se boš največ naučil, če boš razlikoval med build sistemom, prevajalnikom, linkerjem in editorjem. Če pa že vztrajaš na IDE, je pa code blocks precej manj bugast, ja.
Predvidevam, da najbolje poznaš C jezik (in ne C++), torej ti za grafično knjižnico priporočam SDL (dokaj lep in enostaven vmesnik, ki je poleg tega še prenosljiv), za tip igre pa, dokler ne osvojiš osnovnih veščin, priporočam nekaj enostavnega, po možnosti 2D s čim manj designerskega dela... Ker če se boš lotil nekaj osnovnega, obstaja možnost, da boš stvar končal in se nekaj novega naučil.
Minecrafta pa s takim znanjem še dolgo ne boš delal, ker za to je potrebno ogromno časa, volje in pa predvsem znanja ter izkušenj (3d geometrija - linearna algebra, podatkovne strukure, obvladovanje samega jezika, algoritmi, sinhronizacija, ...)

aaaaa93 ::

By the way to ni c++ primer ;) more enako delat
 printf(":D"); ali cout<<"lala";
eno ali drugo ;) problem je v bugih drugače ti pa sem pisal na zasebcu ;) in mi prosim odgovori

MrBrdo ::

kako ni c++ primer, če includaš iostream? iostream je C++ knjižnica.
MrBrdo

Maystr ::

Saj to je tut napisal. Sam printf ni od c++.

aaaaa93 ::

Ne bom odpiral nove teme ker je enako programersko vprašanje.

Imam 2 clasa

class bombon
{
int spremenljivka;
void a(
int i;
i++;
)
};
clas piškot
{int krneki;
void b{
//in v tej funkciji bi rad dostopal do unega i gor če ima kdo idejo kako to narediti;)))
//prosim ne razlagat tuki sintaktičnih napak ker je marsi kaj narobe, to je le šablona za prikaz
//kako naj bi zgledala 2 classa meni je pomembno kako dostopam do i-ja ;) lahko z kazalcem 
//lahko z čimerkoli samo če imate idejo mi pomagajte hvala
};

amacar ::

1. Spremenljivko lahko daš pod public (osebno ne priporočam)
2. narediš si get metodo (če želiš le prebrati podatek) oz set metodo, če želiš spremenljivki spremeniti vrednost

donkihod ::

Tisti i obstaja samo v a metodi in do njega sploh ne morš dostat iz nikjer (razn v a-ju samem). Naredi kot ti je amacar predlagu. Drugač je pa sintaksa taka:
class bombon {
    public:
        void a() {
            int i;
            i++;
        }
};

aaaaa93 ::

Lahko še namigneš kaj je get metoda

hexor ::

Lahko v main() funkciji inicializiraš neko vrednost(set) in potem z njo opraviš nek izračun ki se ti vrne(get).
RootMachine ;)

aaaaa93 ::

Praktično ne morem rad bi dostopal do funkcije acc()- class ship v kateri sta x,y z funkcije move()-class metki


#include <windows.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
#include <time.h>
#include <vector>
#define RADIUS 0.0
#define FPS 60
#define PI 3.14




using namespace std;


class montazna_ladja
{public:
      	double vx, vy, x, y, r;
      		int k;
	int direction;
        	montazna_ladja() {

		r = 0.07;
		x = -0.8;
		y = -0.8;
		vy = 0.005;
	k=0;
		direction = 0;
	}

	~montazna_ladja();

	void move() {


y+= vy/FPS;
if(y>=1)

x+=0.01;

draw();



		if (x > (1.0 + r) || x < (-1.0 - r))
			x = -x;

		if (y > (1.0 + r) || y < (-1.0 - r))
			y = -y;


     /*  if( x==(0.8)&& y==(-0.8))

         {	x =0.6;
         	y=-0.3;
          }
     */



	}

	void draw() {
		glBegin(GL_POLYGON);
			glColor3d(0.5, 0.5, 0.5);
			glVertex2f(sin((0 + direction)*PI/180)*r+x, cos((0 + direction)*PI/180)*r+y);
			glVertex2f(sin((140 + direction)*PI/180)*r+x, cos((140 + direction)*PI/180)*r+y);
			glVertex2f(sin((180 + direction)*PI/180)*r/4+x, cos((180 + direction)*PI/180)*r/4+y);
			glVertex2f(sin((220 + direction)*PI/180)*r+x, cos((220 + direction)*PI/180)*r+y);
		glEnd();
	}




      };

class Ship {
public:
	double vx, vy, x, y, r;
	int direction;

	Ship() {
		r = 0.09;
		x = -0.8;
		y = -0.8;
		direction = 0;
	}

	~Ship();

	void move() {
    	draw();

	//brez tega gre moja ladjica za večno stran
		if (x > (1.0 + r) || x < (-1.0 - r))
			x = -x;

		if (y > (1.0 + r) || y < (-1.0 - r))
			y = -y;

			double a,b;
			a=x;
			b=y;


	}

	void draw() {
		glBegin(GL_POLYGON);
			glColor3d(0.5, 0.5, 0.5);
			glVertex2f(sin((0 + direction)*PI/180)*r+x, cos((0 + direction)*PI/180)*r+y);
			glVertex2f(sin((140 + direction)*PI/180)*r+x, cos((140 + direction)*PI/180)*r+y);
			glVertex2f(sin((180 + direction)*PI/180)*r/4+x, cos((180 + direction)*PI/180)*r/4+y);
			glVertex2f(sin((220 + direction)*PI/180)*r+x, cos((220 + direction)*PI/180)*r+y);
		glEnd();
	}

	void left() {
		direction = (direction - 6) % 360;
	}

	void right() {
		direction = (direction + 6) % 360;
	}

	void acc() {
         x += sin(direction*PI/180)*0.005;
		y += cos(direction*PI/180)*0.005;
    /*
	y+=0.1*sin(direction);
	x+=0.1*cos(direction);*/
	}

	void deacc() {
    	x -= sin(direction*PI/180)*0.005;
		y -= cos(direction*PI/180)*0.005;
	}

	void stop() {

		vx = 0;
		vy = 0;
	}

	void reset() {
		stop();
		direction = 1;
		x = 0;
		y = 0;

	}
};
Ship* ship;
montazna_ladja* Montazna_ladja;

class metki
{public:
      	double vx, vy, x, y, r;
    	int direction;
        metki() {

		r = 0.07;

Ship a, *b;

b=a.acc();

    x=b->x;
	y=b->y;
		vx=5.55;
		vy = 0.55;
	//	direction = 0;
	}

	~metki();

void move() {


        y+= vy/FPS;
         draw();

	if (x > (1.0 + r) || x < (-1.0 - r))
			x = -x;

	if (y > (1.0 + r) || y < (-1.0 - r))
			y = -y;

}


	void draw() {
glBegin(GL_POLYGON);
			glColor3d(0.5, 0.5, 0.5);
			glVertex2f(sin((0 + direction)*PI/180)*r+x, cos((0 + direction)*PI/180)*r+y);
			glVertex2f(sin((140 + direction)*PI/180)*r+x, cos((140 + direction)*PI/180)*r+y);
			glVertex2f(sin((180 + direction)*PI/180)*r/4+x, cos((180 + direction)*PI/180)*r/4+y);
			glVertex2f(sin((220 + direction)*PI/180)*r+x, cos((220 + direction)*PI/180)*r+y);
		glEnd();
	}




      };




metki  *Metki;

static void reshape(int width, int height) {
	glutPostRedisplay();
}


static void idle() {
	glutPostRedisplay();
}


static void timer(int value) {
	glutPostRedisplay();
	glutTimerFunc(1000/FPS, timer, 1);
}

static void tipkovnica (unsigned char tipka, int x, int y) {
	switch (tipka) {
		case 97:
	ship->left();
			break;
		case 100:
			ship->right();
			break;
		case 115:
			ship->deacc();
			break;
		case 119:
			ship->acc();
			break;
		case 103:
			break;
		case 104:
			break;
		case 106:
			break;
		case 122:
			break;
		case 32:
             {
                int i;
for(i=0;i<150;i++)
{


 //	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    Metki->move();
	//glFlush();
	glutSwapBuffers();
         }}


			break;
		case 13:
			break;
		case 27:
			exit(0);
		default:
		break;
//			printf("Ta tipka ni uporabljena: %d \n", tipka);
	}
}


static void miska(int gumb, int stanjeGumba, int x, int y) {
	if(stanjeGumba == GLUT_UP){
		switch(gumb) {
			case GLUT_LEFT_BUTTON:
           //      exit(0);
				break;
		}
	}
	else {
		switch(gumb) {
			case GLUT_RIGHT_BUTTON:
				break;
		}
	}
}
static void reorder() {
	bool coll = true;
	while (coll) {
		coll = false;


//		kolizija ladje z asteroidom

			double dx = Montazna_ladja->x - ship->x;
			double dy = Montazna_ladja->y - ship->y;
			double r = Montazna_ladja->r + ship->r;
			if(dx*dx + dy*dy < r*r) {
				coll = true;
				Montazna_ladja = new montazna_ladja();
				break;
			}

		double ax= Metki->x- Montazna_ladja->x;
		double ay= Metki->x- Montazna_ladja->y;
		double ar= Metki->r+ Montazna_ladja->r;
		if(ax*ax+ ay*ay< ar*ar){
		    coll=true;
		   Montazna_ladja= new montazna_ladja();
		    break;
		}
		}
}



static bool collision() {
	bool coll = false;


//	kolizija ladje z ladjo

		double dx = Montazna_ladja->x - ship->x;
		double dy = Montazna_ladja->y - ship->y;
		double ar = Montazna_ladja->r + ship->r;
		if(dx*dx + dy*dy < ar*ar) {
			ship->reset();
		}

         double ax= Metki->x- Montazna_ladja->x;
		double ay= Metki->x- Montazna_ladja->y;
		double r= Metki->r+ Montazna_ladja->r;
		if(ax*ax+ ay*ay< r*r){
		 // ship->reset();
		 		   Montazna_ladja= new montazna_ladja();

		}


//	ostale kolizije
	return coll;
}

static void display() {
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//	Izris asteroidov

	ship->move();
        Montazna_ladja->move();
     //   Metki->move();
	collision();


	glFlush();
	glutSwapBuffers();
}




int main(int argc, char** argv) {


//	srand((unsigned)time(0));
ship = new Ship();
Montazna_ladja= new montazna_ladja();
Metki= new metki();
	reorder();
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
	glutInitWindowPosition(10, 10);
	glutInitWindowSize(512, 512);
	glutCreateWindow("Krneki");
glutReshapeFunc(reshape);
glutDisplayFunc(display);

	glutIdleFunc(idle);
	glutKeyboardFunc(tipkovnica);
	glutMouseFunc(miska);
	glutTimerFunc(1000/FPS, timer, 1);

	glClearColor(0, 0, 10, 0);

	glutMainLoop();

	return 0;
//	system("pouse");
}

aaaaa93 ::

Do sedaj se mi je že večkrat zgodilo da so bili metki na ralzični lokaciji od ladje kar je katastrofa. Če ima kdo idejo kako drugače rešit problem da bodo metki potovali z ladjo bi bil vesel. Se že v naprej zahvaljujem za trud

Highlag ::

Če boš še vztrajal na Dev poizkusi naložit aplikacijo na kakšen drug disk, ali pa shranjuj svoje datoteke v kakšno drugo mapo.
Never trust a computer you can't throw out a window

aaaaa93 ::

Sej delam z code blocks :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

tekstura [c++ opengl]

Oddelek: Programiranje
9844 (629) matej94
»

[C++] Kako optimizirati?

Oddelek: Programiranje
112039 (1751) Vesoljc
»

[c++]OpenGL izris kvadrata

Oddelek: Programiranje
81209 (1069) Mavrik
»

C++ programirane v Open GL oz. Direct x

Oddelek: Programiranje
242877 (2148) Vesoljc
»

OpenGL problem

Oddelek: Programiranje
212360 (1926) Gundolf

Več podobnih tem