04. august 2003 - 13:32Der er
30 kommentarer og 1 løsning
hjælp til "gammel" c++
JEg har følgende, som jeg gerne vil have omskrevet til "gammel" c++ (turbo C++)....
#include <windows.h> #include <iostream>
using namespace std ;
// Her defineres konstanter, der bliver brugt #define WAIT 100 // Ventetid i ms mellem hvert flyt #define SCR_WIDTH 80 // Vinduets bredde (standard 80) #define SCR_HEIGTH 25 // Vinduets højde (standard 25) #define A_CHAR "@" int spacepress;
int main() { HANDLE h = GetStdHandle( STD_OUTPUT_HANDLE ) ; // Returnerer et handle til konsolvinduet // definér 2 COORD strukturer, som repræsenterer et punkt i vinduet. COORD pos = { SCR_WIDTH / 2, SCR_HEIGTH / 2 }; COORD old = pos ; COORD null = {0,0}; COORD skrive = {25,0}; CONSOLE_CURSOR_INFO cci; cci.bVisible = FALSE; SetConsoleCursorInfo(h, &cci); SetConsoleTextAttribute(h, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
// slet skærmen system("cls") ;
// Sæt cursorens position til pos SetConsoleCursorPosition(h,pos) ; // udskriv et @ cout << A_CHAR ;
// while ( der ikke er trykket escape) while ( !(GetAsyncKeyState(VK_ESCAPE) & 0x8000 ) ) { // Hvis der bliver trykket på en piletast, så opdater koordinatet if ( GetAsyncKeyState(VK_LEFT) & 0x8000 ) pos.X = ( pos.X > 0 ? pos.X - 1 : 0 ) ; if ( GetAsyncKeyState(VK_RIGHT) & 0x8000 ) pos.X = ( pos.X < SCR_WIDTH - 1 ? pos.X + 1 : SCR_WIDTH ) ; if ( GetAsyncKeyState(VK_UP) & 0x8000 ) pos.Y = ( pos.Y > 0 ? pos.Y - 1 : 0 ) ; if ( GetAsyncKeyState(VK_DOWN) & 0x8000 ) pos.Y = ( pos.Y < SCR_HEIGTH - 1 ? pos.Y + 1 : SCR_HEIGTH ) ;
if ( GetAsyncKeyState(VK_SPACE) & 0x8000 ) spacepress = 1;
// Hvis vi har et nyt koordinat if ( pos.X != old.X || pos.Y != old.Y || spacepress == 1) { // Slet det gamle tegn ved at skrive space henover SetConsoleCursorPosition(h,old) ; cout << " " ; // Skriv et nyt @ på den nye position SetConsoleCursorPosition(h,pos) ; cout << A_CHAR ; old = pos ; Sleep( WAIT ) ; // Vent WAIT = 125 ms før vi fortsætter. SetConsoleCursorPosition(h,null) ; //smider koordinater op på 0,0 cout << " "; // Sletter gamle pos. cout << " "; // Skal lige laves rigtigt. SetConsoleCursorPosition(h,null) ; //smider koordinater op på 0,0 igen cout << "Pos.x: " << pos.X << "\n"; //skriver X cout << "Pos.y: " << pos.Y << "\n"; //skriver Y SetConsoleCursorPosition(h,pos) ; //smider koordinater til den nye pos
>>Hvordan finder jeg ud af om min compiler kan klare dos? Du gør "eksperterne" opmærksom på hvilken IDE/compiler du har (og hvilken version). Så skal vi nok hjælpe med at finde udaf om den er DOS "kompatibel".
Det er ikke nemt at lave en GetAsyncKeyState funktion der virker under DOS :-( Man kan godt lave en, men det kræver at man bruger lidt assembler, er du sikker på at du vil det? Jeg troede ikke at der var nogen der brugte DOS i år 2003.
Ahhh, ja sorry... Har lidt travlt... Ja, det virker fint...
Og så en anden ting-...
Hvis nu at jeg gerne vil kunne flytte en figur rundt på skærmen, hvordan så lige det... figuren er tegnet med putpixel, da jeg ikke kan bruge et billede... Eller ved du hvordan man kan det???
Jeg går ud fra at man skal have lidt kode for at "forstå" pixel opbygningen i sådan en fil... Men det du siger er at det godt kan lade sig gøre at vise et bmp billede i c???
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.