Implementacja algorytmu Life w kosoli - dziwny błąd
Ostatnio zmodyfikowano 2010-08-17 13:10
lenrokskate Temat założony przez niniejszego użytkownika |
Implementacja algorytmu Life w kosoli - dziwny błąd » 2010-08-17 12:33:58 #edit: paka z projektem: Life.rar - 383.0 KbPiszę sobie implementację algorytmu Life w konsoli, tak dla przypomnienia podstaw. Kod główny (reszta plików to tylko ddt::console i funkcja do polskich znaków): #include <iostream> #include <conio.h> #include <windows.h> #include "console.hpp" #include "polish.hpp"
bool tab1[ 80 ][ 25 ]; bool tab2[ 80 ][ 25 ];
const short maxX = 79; const short maxY = 24;
int cX = 0, cY = 0;
using namespace std; using namespace ddt::console;
char chng( bool s ) { if( s == 0 ) return 0; if( s == 1 ) return 'O'; return 0; }
int main() { init(); title( "Life" ); clrscr(); while( true ) { for( int x = 0; x < 80; x++ ) for( int y = 0; y < 25; y++ ) { tab1[ x ][ y ] = 0; tab2[ x ][ y ] = 0; } clrscr(); gotoxy( 2, 1 ); cout << pl( "Najpierw musisz wybrać pozycje komórek startowych" ); gotoxy( 2, 3 ); cout << pl( "Klawiszami [W][S][A][D] przesuwaj kursor po konsoli i w miejscu w którym" ); gotoxy( 2, 4 ); cout << pl( "chcesz wstawić komórkę wciśnij [B]. Aby usunąć komórkę naciśnij [N]." ); gotoxy( 2, 5 ); cout << pl( "Kiedy skończysz wciśnij [ENTER]" ); gotoxy( 2, 7 ); cout << pl( "Aby przejść do ustawiania komórek naciśnij dowolny klawisz" ); getch(); tab1[ 20 ][ 5 ] = 1; while( true ) { unsigned char st = getch(); clrscr(); if( st == 119 && cY > 0 ) cY--; if( st == 115 && cY < 25 ) cY++; if( st == 97 && cX > 0 ) cX--; if( st == 100 && cX < 80 ) cX++; if( st == 98 ) tab1[ cX ][ cY ] = 1; if( st == 110 ) tab1[ cX ][ cY ] = 0; gotoxy( 0, 0 ); for( int x = 0; x < 80; x++ ) for( int y = 0; y < 25; y++ ) { gotoxy( x, y ); cout << chng( tab1[ x ][ y ] ); } gotoxy( cX, cY ); } } return 0; }
Teraz mam taki dziwny błąd: gdy mam kursor powiedzmy w pozycji 2,3 i wcisnę 'B' to komórka pojawia się w pozycja 2,2. Problem występuje tylko z osią Y. Dlaczego tak może się dziać? |
|
pekfos |
» 2010-08-17 13:08:27 gotoxy( 0, 0 ); lewy górny róg to 1,1 |
|
lenrokskate Temat założony przez niniejszego użytkownika |
» 2010-08-17 13:10:57 ale ja w funkcji gotoxy wywaliłem te -1 i teraz lewy górny to 0,0
jhest też coś takiego dziwnego, że jak będę trzymał byle jaki klawisz to komórka będzie tam gdzie trzeba a jak puszczę to cały ekran idzie linię do góry |
|
« 1 » |