C++ -kysymykset
Re: C++ -kysymykset
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
Re: C++ -kysymykset
Cursesmkn wrote:Miten c++ saa vaihdettua tekstin värin ja saa sijoitettua tekstin x,y koordinaatteihin? Mielellään ilman sdl, opengl ym.
EDIT:
Riippuen alustasta joko PDCurses tai ncurses
Re: C++ -kysymykset
Olen aloittanut c++ pari viikkoa sitten ---> olen huono
Voisitko kertoa millä "funktiolla?" se onnistuu.
Voisitko kertoa millä "funktiolla?" se onnistuu.
"I'd love to change the world, but they won't give me the source code." - Anonymous
Re: C++ -kysymykset
RTFM or GTFO :Vmkn wrote:Olen aloittanut c++ pari viikkoa sitten ---> olen huono :D
Voisitko kertoa millä "funktiolla?" se onnistuu.
Re: C++ -kysymykset
MKN, miksi ei SDL kelpaa?
Solar Eclipse
We're in a simulation, and God is trying to debug us.
Re: C++ -kysymykset
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
Re: C++ -kysymykset
Ja koodi kiitos...mkn wrote:Kun kääntää sdl ohjelman niin se kaatuu Olen noudattanut ohjelmointiputkan sdl oppaan esimerkkejä tarkasti mutta ei toimi siitä huolimatta
Re: C++ -kysymykset
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
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
Re: C++ -kysymykset
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;
}
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Blogi - Peräpohjola - MERPG
Re: C++ -kysymykset
Äkkiä tuosta pisti silmään ainakin, että muuttujanimesi sisältää ääkkösiä. Se saattaa laittaa kääntäjän tekemään hassuja.Feuer wrote: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?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; }
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Re: C++ -kysymykset
Olisi eka kerta kun minä löydän Visual C++n käännöksistä ääkkösongelmia muualta kuin komentorivitulosteesta
Joka tapauksessa, muutin sisältö-muuttujan sisalto-muuttujaksi, eikä ongelma lähtenyt mihinkään
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
Blogi - Peräpohjola - MERPG
Re: C++ -kysymykset
Onko sulla varmasti kaikki kuvat ja tarvittavat dll:t koneella?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 :(
Re: C++ -kysymykset
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?
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:
Tämän takia kohellan mielummin itse kuin tulen kysymään apua, jonka antaminen voisi joskus jopa johtaa johonkin järkevään lopputulokseenkin >:([/edit]Vika lienee koneen käyttäjässä jos homma ei pelaa...
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
Blogi - Peräpohjola - MERPG
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: C++ -kysymykset
Itse olen kyllä käyttänyt SDL:ää ja fstreamia varsin hyvin yhdessä. Vika lienee koneen käyttäjässä jos homma ei pelaa...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?
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: C++ -kysymykset
Edit:
SDL:n ja C++:n virrat saa toimimaan normaalisti simppelisti lisäämällä:
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?
Feuer wrote: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?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; }
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
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...
Re: C++ -kysymykset
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?
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ä.
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?
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
Blogi - Peräpohjola - MERPG
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: C++ -kysymykset
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.
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.
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: C++ -kysymykset
Mysteerikaatumiset on hyvä selvitellä esimerkiksi Valgrindin avulla mikä debug-käännöksistä löytää virheet yleensä rivilleen sieltä missä ne ovat.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?
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ä.
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: C++ -kysymykset
MSVC jostain syystä tykkää käyttää aina Unicode-versioita. Siksi ne L:t pitää olla.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ä.
Re: C++ -kysymykset
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.
Tässä vielä koodi kohdasta jossa pitäisi jotain saada piirrettyä:
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;
}
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();
}