#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.
ugh! ei tuota jaksa ruveta tutkimaan, varsinkin kun on erittäin väsynyt, niinkuin minä juuri nyt...
Hohhoijaa! Ehkä myöhemmin...
Please, kommentoi hieman koodiasi. Olisi mukavampi tietää lisäksi mitä sen pitäisi tehdä ja mitä sen nyt tekee tai ei tee.
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.
No se on ihan loogista että siitä vähennetään 0x30, jos sinulla on tiedostossa ASCII-arvo '1' eikä tavu 1.
Aihe on jo aika vanha, joten et voi enää vastata siihen.