C++ -kysymykset

Muu yhteisön välinen keskustelu.
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 3:12 pm

Re: C++ -kysymykset

Post by mkn »

Miten c++ saa vaihdettua tekstin värin ja saa sijoitettua tekstin x,y koordinaatteihin? Mielellään ilman sdl, opengl ym.
"I'd love to change the world, but they won't give me the source code." - Anonymous
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

mkn wrote:Miten c++ saa vaihdettua tekstin värin ja saa sijoitettua tekstin x,y koordinaatteihin? Mielellään ilman sdl, opengl ym.
Curses
EDIT:

Riippuen alustasta joko PDCurses tai ncurses

mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 3:12 pm

Re: C++ -kysymykset

Post by mkn »

Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.
"I'd love to change the world, but they won't give me the source code." - Anonymous
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

mkn wrote:Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.
RTFM or GTFO :V
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: C++ -kysymykset

Post by MaGetzUb »

MKN, miksi ei SDL kelpaa?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 3:12 pm

Re: C++ -kysymykset

Post by mkn »

Kun kääntää sdl ohjelman niin se kaatuu :( Olen noudattanut ohjelmointiputkan sdl oppaan esimerkkejä tarkasti mutta ei toimi siitä huolimatta :(
"I'd love to change the world, but they won't give me the source code." - Anonymous
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: C++ -kysymykset

Post by Latexi95 »

mkn wrote:Kun kääntää sdl ohjelman niin se kaatuu :( Olen noudattanut ohjelmointiputkan sdl oppaan esimerkkejä tarkasti mutta ei toimi siitä huolimatta :(
Ja koodi kiitos...
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 3:12 pm

Re: C++ -kysymykset

Post by mkn »

http://www.ohjelmointiputka.net/opas.php?tunnus=sdl3
Ohjelmointiputkan sdl-opas 3 ja tuton alin koodi.
Toimii veljeni koneella, mutta itselläni se vain kaatuu :(
"I'd love to change the world, but they won't give me the source code." - Anonymous
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer »

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ -kysymykset

Post by Sami345 »

Feuer wrote:

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?
Äkkiä tuosta pisti silmään ainakin, että muuttujanimesi sisältää ääkkösiä. Se saattaa laittaa kääntäjän tekemään hassuja.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer »

Olisi eka kerta kun minä löydän Visual C++n käännöksistä ääkkösongelmia muualta kuin komentorivitulosteesta :P

Joka tapauksessa, muutin sisältö-muuttujan sisalto-muuttujaksi, eikä ongelma lähtenyt mihinkään :)
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 »

mkn wrote:http://www.ohjelmointiputka.net/opas.php?tunnus=sdl3
Ohjelmointiputkan sdl-opas 3 ja tuton alin koodi.
Toimii veljeni koneella, mutta itselläni se vain kaatuu :(
Onko sulla varmasti kaikki kuvat ja tarvittavat dll:t koneella?
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer »

Teinpä tutkimuksia tuosta omasta ongelmastani: kun projekti sisältää nuo pari viestiä sitten mainitsemani funktiot ja mainin joka kutsuu tulostaTavut() - funktiota, kaikki toimii ihan kauniisti, mutta erään SDL-projektin kyljessä tuo käyttäytyy kuten kerroin.

Lisäksi, kun tuosta projektista kommentoi ulos kaiken fstreamiin liittyvän, ohjelma pysyy aivan kauniisti pystyssä loppuun asti. SDLllä lienee siis jotain fstreamia vastaan -> kannattaisi kokeilla toteuttaa tuo tiedoston lukeminen C:n tiedostoapilla?
EDIT:

Vika lienee koneen käyttäjässä jos homma ei pelaa...
Tämän takia kohellan mielummin itse kuin tulen kysymään apua, jonka antaminen voisi joskus jopa johtaa johonkin järkevään lopputulokseenkin >:([/edit]
Last edited by Feuer on Fri Feb 11, 2011 11:06 am, edited 1 time in total.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: C++ -kysymykset

Post by KilledWhale »

Feuer wrote:Teinpä tutkimuksia tuosta omasta ongelmastani: kun projekti sisältää nuo pari viestiä sitten mainitsemani funktiot ja mainin joka kutsuu tulostaTavut() - funktiota, kaikki toimii ihan kauniisti, mutta erään SDL-projektin kyljessä tuo käyttäytyy kuten kerroin.

Lisäksi, kun tuosta projektista kommentoi ulos kaiken fstreamiin liittyvän, ohjelma pysyy aivan kauniisti pystyssä loppuun asti. SDLllä lienee siis jotain fstreamia vastaan -> kannattaisi kokeilla toteuttaa tuo tiedoston lukeminen C:n tiedostoapilla?
Itse olen kyllä käyttänyt SDL:ää ja fstreamia varsin hyvin yhdessä. Vika lienee koneen käyttäjässä jos homma ei pelaa...
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: C++ -kysymykset

Post by JATothrim »

Edit:
Feuer wrote:

Code: Select all

#include <Windows.h>
#include <fstream>
#include <iostream>

int FileSize(const char* sFileName) //kotoisin osoitteesta http://www.codeproject.com/KB/files/filesize.aspx
{
  std::ifstream f;
  f.open(sFileName, std::ios_base::binary | std::ios_base::in);
  if (!f.good() || f.eof() || !f.is_open()) { return 0; }
  f.seekg(0, std::ios_base::beg);
  std::ifstream::pos_type begin_pos = f.tellg();
  f.seekg(0, std::ios_base::end);
  return static_cast<int>(f.tellg() - begin_pos);
}


bool tulostaTavut(const char* polku)
{
	int size = FileSize(polku);

	if(size<1) //tyhjä tai olematon tiedosto :)
	{
		MessageBox(NULL,L"Tiedostohärö",L"Tiedostohärö",NULL);
		return false;
	}

	std::ifstream f(polku,std::ios::in | std::ios::binary);

	unsigned char* sisältö = new unsigned char[size];

	if(f.is_open())
	{
		f.read((char*)sisältö,size);

		for(int i=0; i<size; i++)
		{
			std::cout<<"Kohdassa "<<i<<" lukee: "<<(int)sisältö[i]<<std::endl;
		}
	}
	
	delete [] sisältö;
	
	f.close();
	return true;
}
Miksi pelkkä tuollaisen koodilohkon mukanaolo saa ohjelman kaatumaan sulkeutuessa, vaikkei sitä kutsuta? Ja mikä olisi turvallinen tapa lukea tiedostosta N tavua johonkin containeriin? Lisäksi, mikä ylläolevassa on väärin?

SDL:n ja C++:n virrat saa toimimaan normaalisti simppelisti lisäämällä:

Code: Select all

#include <SDL/SDL.h>
#undef main // ei anneta käyttää SDLmainia
SDL:n header muuttaa standardin main kierosti SDLmain:ksi.. Tällöin mm. cout/cin eivät toimi ollenkaan oikein, koska SDL:n oma main tekee jotain häröyksiä standardi virroille.
Tiedostojen lukemisesta en taas osaa sanoa.. Mihin kohtaan ohjelma tarkalleen kaatuu?
EDIT:

Piti editoida alkuperänen kysymys uudelle sivulle ja lisää vastausta:
Feuer: L"asdfasdf". L heittää merkkijonon widechater merkkijonoksi, joita MessageBoxW syö. MessageBox on makro joka voi olla MessageBoxA (Ascii) tai MessageBoxW (widechatter, unicode..). Tällä ei tosin pitäisi olla mitään merkistystä koodissasi.. Infoa vain. ;)

-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer »

Ohjelma kaatui aina ikkunan raksia painaessa, mikä johtaa monien resurssien vapauttamiseen ja lopulta sulkeutumiseen. Mielestäni debuggailin niin että sain selville ettei ohjelma kaatunut ennen mainin return 0; - riviä, mutta sen voinee varmistaa tulevaisuudessa...

Koodin ongelmat ovat kuitenkin eläneet koodin myötä, nykytilanne on se että Debug-käännös kaatuu kun sen sulkee SDL-ikkunasta, mutta ei kaadu jos sen sulkee komentorivi-ikkunasta ja Release-käännös on vakaa kuin junan vessa. Mikä on tämän logiikka? :D

Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

Release-versiosta jätetään osa tarkistuksista ja varoituksista pois, esimerkiksi assertit ovat voimassa vain debug-versiossa. Se kannattaakin yleensä pistää toimimaan kunnolla niin ei tule jälkikäteen ikäviä yllätyksiä kun release vuotaa muistia tai tekee jotain muuta kummallista.

L-prefiksistä pääset eroon asettamalla project->properties->configuration properties->general->character set->jotain muuta kuin "not set", multibyteä olen itse yleensä käyttänyt.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: C++ -kysymykset

Post by KilledWhale »

Feuer wrote:Ohjelma kaatui aina ikkunan raksia painaessa, mikä johtaa monien resurssien vapauttamiseen ja lopulta sulkeutumiseen. Mielestäni debuggailin niin että sain selville ettei ohjelma kaatunut ennen mainin return 0; - riviä, mutta sen voinee varmistaa tulevaisuudessa...

Koodin ongelmat ovat kuitenkin eläneet koodin myötä, nykytilanne on se että Debug-käännös kaatuu kun sen sulkee SDL-ikkunasta, mutta ei kaadu jos sen sulkee komentorivi-ikkunasta ja Release-käännös on vakaa kuin junan vessa. Mikä on tämän logiikka? :D

Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.
Mysteerikaatumiset on hyvä selvitellä esimerkiksi Valgrindin avulla mikä debug-käännöksistä löytää virheet yleensä rivilleen sieltä missä ne ovat.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

Feuer wrote:Nuo L:t iskin MessageBoxin tekstiparametreihin koska MessageBox(NULL,"asdf","fdsa",NULL) ei mennyt kääntäjästä läpi, ja sen sijaan että olisin etsinyt dokumentaatiosta oikean tavan käyttää funktiota, muistin mitä anttipanda oli sanonut pari vuotta sitten tässä editissä.
MSVC jostain syystä tykkää käyttää aina Unicode-versioita. Siksi ne L:t pitää olla.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: C++ -kysymykset

Post by Latexi95 »

OpenGL:ää harjoittelen käyttämään, mutta vielä on jonkun verran ongelmia...
Yritän tehdä jonkunlaista kamera luokkaa, joka hoitaisi kameran pyörittelyt, mutta jostain syystä kameran kulmien(rotation...) muuttaminen ei tunnu vaikuttavan mitenkään kameraan.
Ideana on, että kameralla on paikka (position) ja suunta (rotation) ja sen mukaan pitäisi laskea loput tarvittavat.

Code: Select all


void Camera::pushMatrix()
{
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(fieldOfView*zoom,aspectRatio,nearPoint,farPoint);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    QVector3D direction(0,0,1);
    direction = direction * rotateYaw(rotation.yaw) * rotatePitch(rotation.pitch) * rotateRoll(rotation.roll);
    QVector3D up(0,1,0);
    up = up * rotateYaw(rotation.yaw) * rotatePitch(rotation.pitch) * rotateRoll(rotation.roll);
    gluLookAt(position.x,position.y,position.z,direction.x(),direction.y(),direction.z(),up.x(),up.y(),up.z());
}

QMatrix4x4 rotateYaw(qreal a)
{
    QMatrix4x4 matrix(qCos(a),-qSin(a),0,0,qSin(a),qCos(a),0,0,0,0,1,0,0,0,0,1);
    return matrix;
}
QMatrix4x4 rotatePitch(qreal a)
{
    QMatrix4x4 matrix(qCos(a),0,qSin(a),0,qSin(a),1,0,0,-qSin(a),0,qCos(a),0,0,0,0,1);
    return matrix;
}
QMatrix4x4 rotateRoll(qreal a)
{
    QMatrix4x4 matrix(1,0,0,0,0,qCos(a),-qSin(a),0,0,qSin(a),qCos(a),0,0,0,0,1);
    return matrix;
}
Tässä vielä koodi kohdasta jossa pitäisi jotain saada piirrettyä:

Code: Select all

void GLWidget::paintGL()
{

    this->setWindowTitle(QString::number(camera->rotation.yaw) + "," + QString::number(camera->rotation.pitch) + "," + QString::number(camera->rotation.roll));
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.0,0.0,0.0,0.0);
    camera->pushMatrix();
    glLoadIdentity();
    glPushMatrix();
    glBegin(GL_TRIANGLES);
        glColor3f(0,1,0);
        glVertex3f(0,0,-40);
        glVertex3f(1,-1,-40);
        glVertex3f(-1,-1,-40);
    glEnd();
    glPopMatrix();
}
Post Reply