Ĺadny brzuch
Poniższy kod powinien wyświetlać kolorwy znak na konsoli i powinno sie nim dac sterowac W,S,A,D (poczatkowa wersja Snake'a hehe), punkt ten pozostawia ślad bo nie czyszcze ekranu ale mniejsza o to. Dlaczego gdy poruszam myszką punkt się przesuwa ? Co to ma za związek. Czy ktoś mógłby znaleźć tutaj błąd ? Kompilowane pod Gcc (interfejs DevCpp). Może to wina że mam XP albo klawiature USB ??
#include <windows.h> #include <conio.h> #include <stdio.h> #include <time.h> ///////////////////////////////////////////uchwyt ekranu i klawiatury HANDLE m_Screen; HANDLE m_Keyboard; COORD SnakePosition[2000]; char SnakeDirection; ////////////////////////////////////////////////////////funkcja sleep void sleep(unsigned int mseconds) { clock_t goal = mseconds + clock(); while (goal > clock()); } //////////////////funkcja zwracajaca kod wcisnietego klawisza w ASCII int GetKey() { DWORD Read; INPUT_RECORD Event; ReadConsoleInput(m_Keyboard,&Event,1,&Read); if (Event.EventType == KEY_EVENT) { if (Event.Event.KeyEvent.bKeyDown) { return Event.Event.KeyEvent.wVirtualKeyCode; } } return 0; } /////////////////////////////////////////////////////////funkcja MAIN main() { //////////////////////////////////////////////////ustawienie uchwytow m_Screen = GetStdHandle(STD_OUTPUT_HANDLE); m_Keyboard = GetStdHandle(STD_INPUT_HANDLE); ///////////////wypelnienie ekranu konsoli kolorem i zmiania nazwy okna FillConsoleOutputAttribute (m_Screen, 0 | 50, 80*25, SnakePosition[0], 0); FillConsoleOutputCharacter (m_Screen, ' ', 80*25, SnakePosition[0], 0); SetConsoleTitle("Snake by Gumis"); //////////////////////////////////////poczatkowe ustawienie zmiennych SnakeDirection = 2; SnakePosition[0].X = 40; SnakePosition[0].Y = 12; SetConsoleTextAttribute(m_Screen, 160 );///////////ustaw kolor tekstu while (1) { if ( GetKey() == 87) SnakeDirection = 0; else ///klawisz W if ( GetKey() == 83) SnakeDirection = 2; else ///klawisz S if ( GetKey() == 65) SnakeDirection = 3; else ///klawisz A if ( GetKey() == 68) SnakeDirection = 1; ///klawisz D sleep(200); //////////////////////////////////////////////zmiana polozenia znaku if (SnakeDirection == 0) SnakePosition[0].Y = SnakePosition[0].Y - 1; if (SnakeDirection == 2) SnakePosition[0].Y = SnakePosition[0].Y + 1; if (SnakeDirection == 3) SnakePosition[0].X = SnakePosition[0].X - 1; if (SnakeDirection == 1) SnakePosition[0].X = SnakePosition[0].X + 1; SetConsoleCursorPosition(m_Screen, SnakePosition[0]); ///////////////////////////////////////////////////namaluj pusty znak printf(" "); } return 0; }
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <windows.h> #include <conio.h> #include <stdio.h> #include <time.h> ///////////////////////////////////////////uchwyt ekranu i klawiatury HANDLE m_Screen; HANDLE m_Keyboard; COORD SnakePosition[2000]; char SnakeDirection; ////////////////////////////////////////////////////////funkcja sleep void sleep(unsigned int mseconds) { clock_t goal = mseconds + clock(); while (goal > clock()); } //////////////////funkcja zwracajaca kod wcisnietego klawisza w ASCII int GetKey() { DWORD Read; INPUT_RECORD Event; ReadConsoleInput(m_Keyboard,&Event,1,&Read); if (Event.EventType == KEY_EVENT) { if (Event.Event.KeyEvent.bKeyDown) { return Event.Event.KeyEvent.wVirtualKeyCode; } } return 0; } /////////////////////////////////////////////////////////funkcja MAIN main() { //////////////////////////////////////////////////ustawienie uchwytow m_Screen = GetStdHandle(STD_OUTPUT_HANDLE); m_Keyboard = GetStdHandle(STD_INPUT_HANDLE); ///////////////wypelnienie ekranu konsoli kolorem i zmiania nazwy okna FillConsoleOutputAttribute (m_Screen, 0 | 50, 80*25, SnakePosition[0], 0); FillConsoleOutputCharacter (m_Screen, ' ', 80*25, SnakePosition[0], 0); SetConsoleTitle("Snake by Gumis"); //////////////////////////////////////poczatkowe ustawienie zmiennych SnakeDirection = 2; SnakePosition[0].X = 40; SnakePosition[0].Y = 12; SetConsoleTextAttribute(m_Screen, 160 );///////////ustaw kolor tekstu while (1) { if ( GetKey() == 87) SnakeDirection = 0; else ///klawisz W if ( GetKey() == 83) SnakeDirection = 2; else ///klawisz S if ( GetKey() == 65) SnakeDirection = 3; else ///klawisz A if ( GetKey() == 68) SnakeDirection = 1; ///klawisz D sleep(200); //////////////////////////////////////////////zmiana polozenia znaku if (SnakeDirection == 0) SnakePosition[0].Y = SnakePosition[0].Y - 1; if (SnakeDirection == 2) SnakePosition[0].Y = SnakePosition[0].Y + 1; if (SnakeDirection == 3) SnakePosition[0].X = SnakePosition[0].X - 1; if (SnakeDirection == 1) SnakePosition[0].X = SnakePosition[0].X + 1; SetConsoleCursorPosition(m_Screen, SnakePosition[0]); ///////////////////////////////////////////////////namaluj pusty znak printf(" "); } return 0; }