C++ -kysymykset

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

Re: C++ -kysymykset

Post by mkn » Mon Feb 07, 2011 3:45 pm

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 » Mon Feb 07, 2011 3:52 pm

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


User avatar
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 4:12 pm

Re: C++ -kysymykset

Post by mkn » Mon Feb 07, 2011 3:55 pm

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 » Mon Feb 07, 2011 5:26 pm

mkn wrote:Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.
RTFM or GTFO :V

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: C++ -kysymykset

Post by MaGetzUb » Mon Feb 07, 2011 8:39 pm

MKN, miksi ei SDL kelpaa?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

User avatar
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 4:12 pm

Re: C++ -kysymykset

Post by mkn » Tue Feb 08, 2011 6:06 pm

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

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: C++ -kysymykset

Post by Latexi95 » Tue Feb 08, 2011 7:04 pm

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...

User avatar
mkn
Member
Posts: 61
Joined: Wed Feb 17, 2010 4:12 pm

Re: C++ -kysymykset

Post by mkn » Wed Feb 09, 2011 4:22 pm

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

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer » Wed Feb 09, 2011 6:01 pm

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

User avatar
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: C++ -kysymykset

Post by Sami345 » Wed Feb 09, 2011 6:11 pm

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/

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer » Wed Feb 09, 2011 6:29 pm

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

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 » Wed Feb 09, 2011 9:26 pm

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?

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer » Thu Feb 10, 2011 1:16 pm

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 12:06 pm, 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

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts: 543
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: C++ -kysymykset

Post by KilledWhale » Fri Feb 11, 2011 11:31 am

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

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: C++ -kysymykset

Post by JATothrim » Fri Feb 11, 2011 5:20 pm

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'.

User avatar
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer » Sun Feb 13, 2011 12:17 am

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

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja » Sun Feb 13, 2011 2:37 am

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.

User avatar
KilledWhale
Tech Developer
Tech Developer
Posts: 543
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: C++ -kysymykset

Post by KilledWhale » Sun Feb 13, 2011 2:44 pm

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 » Sun Feb 13, 2011 5:26 pm

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.

User avatar
Latexi95
Guru
Posts: 1164
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: C++ -kysymykset

Post by Latexi95 » Tue Feb 15, 2011 7:18 pm

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