Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Taas joku bugi

Dj Wolf [23.08.2002 17:50:58]

#

#include <iostream.h>
#include <go32.h>
#include <sys/farptr.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <stdio.h> //File ainakin tarttee tämän
#include <string.h> //c++ vaatii tämän, c ei
#include <ctype.h>
#define flip(c) _dosmemputl(c, 64000/4, 0xA0000)
int Rnd(int minimi, int maximi); //RaNDom eli satunnainen...
void Varaamuisti(int kumpi);
void Paivita (int yla_x, int yla_y);
void TyPu(); //TYhjennäPUskuri
void Pset(int x, int y, int vari);
void FonttiMuistiin();
void Txt(int x, int y, char teksti[20], int vari);
char *isopuskuri,*pienpuskuri;
char kirjain[8][8][256];
int isox=320,isoy=2000,pienx=320,pieny=200,kox=0,koy=0;
int main() {
    int x=0, y=0;
    Varaamuisti(1);
    Varaamuisti(2);
    TyPu();
    srandom(time(NULL)); /* alustetaan satunnaislukugeneraattori */
    textmode(0x13);
    for(int kohta=0; kohta<isox*isoy; kohta++){
    isopuskuri[kohta]=Rnd(16,22);} //tätä ei piirretä kokonaisuudessaan näytölle
    Pset (320,2,4);
    Pset (1,4,3);
    Pset (160,1,10);
    FonttiMuistiin();
    Txt(10,100,"MARKOTOMMI",2);
    getch();
    while(!kbhit()) {
        y++;
        if (y+pieny>isoy) break; //ei mennä yli rajojen :)
        if (y<0) break;
        if (x+pienx>isox) break;
        if (x<0) break;
        Paivita(x,y);      // jos poistat tämän tai seuraavan niin
        flip(pienpuskuri); // mitään ei näy, mutta puskuri(t) päivittyvät.
        }
        getch();
    textmode(0x3);
    return 0;
}

void Varaamuisti(int kumpi) {
    int kohta;
    switch (kumpi)
    {

    case 1:
     isopuskuri=(char *)malloc(isox*isoy);
     if(isopuskuri==NULL) {
        printf("Ei tarpeeksi muistia isolle puskurille!\n");
        exit(1); }
    for(kohta=0; kohta<isox*isoy; kohta++){
    isopuskuri[kohta]=0;} //alustetaan puskuri
     break;

    case 2:
    pienpuskuri=(char *)malloc(320*200); //pienx*pieny
    if(pienpuskuri==NULL) {
        printf("Ei tarpeeksi muistia pienelle puskurille!\n");
        exit(1); }
    for(kohta=0; kohta<pienx*pieny; kohta++){
    pienpuskuri[kohta]=0;} //alustetaan puskuri
    break;
   }
}
int Rnd(int minimi, int maximi)
{
 int rnd;
 rnd = minimi + rand() % (maximi - minimi);
}
void Paivita(int yla_x, int yla_y) {
  int rivi;
  for(rivi=koy; rivi<=pieny+koy; rivi++)
    memcpy( &pienpuskuri[rivi * 320 + kox],
            &isopuskuri[(yla_y + rivi) * isox + yla_x],
            pienx);
}
void TyPu() {
/*for(int kohta=0; kohta<isox*isoy; kohta++){
    isopuskuri[kohta]=0;} //alustetaan puskuri*/
for(int kohta=0; kohta<320*200; kohta++){
    pienpuskuri[kohta]=0;} //alustetaan puskuri
}
void Pset(int x,int y, int vari)
{
isopuskuri[y*320+x] = vari;
}
void FonttiMuistiin()
{
 char tavu;
 FILE *tiedosto=fopen("fontti.txt", "rb");  //r=10, rb=13
 for (int asciikoodi=0; asciikoodi<256; asciikoodi++)
  {
   for (int y=0; y<8; y++)
   {
    for (int x=0; x<8; x++)
    {
     tavu=fgetc(tiedosto);
     tavu=fgetc(tiedosto);
     kirjain[x][y][asciikoodi]=tavu;
     //cout << kirjain[x,y,asciikoodi] << endl;
     tavu=fgetc(tiedosto);
     //getch();
    }
   }
  }
fclose(tiedosto);
}
void Txt(int x, int y, char teksti[20], int vari)
{
 char merkki;
 for (int kohta=0;kohta<10; kohta++)
 {
  merkki=(teksti[kohta]);
  for (int qy=0; qy<8; qy++)
  {
   for (int qx=0; qx<8; qx++)
   {
   if (kirjain[qx][qy][merkki]==1)
    {
    isopuskuri[(qy+y)*320+(qx+x)]=1;
    }
    else isopuskuri[(qy+y)*320+(qx+x)]=0;
    }
   }
   x=x+9;
  }
}

Niin, tämä toimii muuten, paitsi että tekee kaikista pisteistä mustia.

HtH [23.08.2002 22:50:43]

#

ugh! ei tuota jaksa ruveta tutkimaan, varsinkin kun on erittäin väsynyt, niinkuin minä juuri nyt...

Vilikki [23.08.2002 23:31:37]

#

Hohhoijaa! Ehkä myöhemmin...

Antti [29.08.2002 09:21:48]

#

Please, kommentoi hieman koodiasi. Olisi mukavampi tietää lisäksi mitä sen pitäisi tehdä ja mitä sen nyt tekee tai ei tee.

Dj Wolf [03.09.2002 14:49:02]

#

Antti, laitan koodini yleensä tänne, koska jos laitan ne IRC:iin jollekkin kannullle, kikkiä tulee ja nopeasti...
Noh, Ruuvari auttoi minua ja bugi löytyi riviltä tavu=fgec(tiedosto); siitä kun piti jostain kumman syystä vähentää vielä 48 tai 49... vaikka latasin 1:sen :/.
Sisennyksetkin olivat muuten olemassa, mutta ne katosivat.

thefox [03.09.2002 18:11:54]

#

No se on ihan loogista että siitä vähennetään 0x30, jos sinulla on tiedostossa ASCII-arvo '1' eikä tavu 1.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta