Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Implementacja algorytmu Life w kosoli - dziwny błąd

Ostatnio zmodyfikowano 2010-08-17 13:10
Autor Wiadomość
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 Kb


Piszę 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):
C/C++
#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ć?
P-20904
pekfos
» 2010-08-17 13:08:27
gotoxy( 0, 0 );
lewy górny róg to 1,1
P-20912
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
P-20915
« 1 »
  Strona 1 z 1