ciekawski Temat założony przez niniejszego użytkownika |
[C++] OX z kursy "od 0 do gier kodera" » 2013-07-17 22:36:41 Witam, zmagałem się dzisiaj z OXem z kursu "od 0..." i gdy napisałem już ostatnia linijkę kodu oraz próbie kompilacji otrzymałem masę błędów. Większość okazała się drobnymi literówkami więc szybko zacząłem naprawiać swe błędy. Niestety nie wszystko szło tak gładko. Próbując znaleźć rozwiązanie problemu w internecie uznałem, że najlepszą opcją będzie sprawdzenie przykładowego kodu Xiona. Ku mojemu zdziwieniu okazało się, że dostaje ten sam błąd. Jest to: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
i dotyczy tablicy z rozwiązaniami w pliku game.cpp: const LINIE[][ 3 ][ 2 ] = { { { 0, 0 }, { 0, 1 }, { 0, 2 } }, { { 1, 0 }, { 1, 1 }, { 1, 2 } }, { { 2, 0 }, { 2, 1 }, { 2, 2 } }, { { 0, 0 }, { 1, 0 }, { 2, 0 } }, { { 0, 1 }, { 1, 1 }, { 2, 1 } }, { { 0, 2 }, { 1, 2 }, { 2, 2 } }, { { 0, 0 }, { 1, 1 }, { 2, 2 } }, { { 2, 0 }, { 1, 1 }, { 0, 2 } } };
Program skłąda się z 3 plików: main.cpp
#include <iostream> #include <conio.h> #include "game.h"
void main() { StartGry(); for(;; ) { RysujPlansze(); if( g_StanGry == GS_MOVE ) { unsigned uNumerPola; std::cin >> uNumerPola; Ruch( uNumerPola ); } else if( g_StanGry == GS_WON || g_StanGry == GS_DRAW ) break; } getch(); }
game.cpp
#include <iostream> #include <ctime> #include "game.h"
FIELD g_aPlansza[ 3 ][ 3 ] = { { FLD_EMPTY, FLD_EMPTY, FLD_EMPTY }, { FLD_EMPTY, FLD_EMPTY, FLD_EMPTY }, { FLD_EMPTY, FLD_EMPTY, FLD_EMPTY } };
GAMESTATE g_StanGry = GS_NOTSTARTED;
SIGN g_AktualnyGracz;
bool StartGry() { if( g_StanGry != GS_NOTSTARTED ) return false; srand( static_cast < unsigned >( time( NULL ) ) ); g_AktualnyGracz =( rand() % 2 == 0 ? SGN_CIRCLE : SGN_CROSS ); g_StanGry = GS_MOVE; return true; }
bool RysujPlansze() { if( g_StanGry == GS_NOTSTARTED ) return false; system( "cls" ); std::cout << " KOLKO I KRZYZYK " << std::endl; std::cout << "---------------------" << std::endl; std::cout << std::endl; std::cout << " -----" << std::endl; for( int i = 0; i < 3; ++i ) { std::cout << " |"; for( int j = 0; j < 3; ++j ) { if( g_aPlansza[ i ][ j ] == FLD_EMPTY ) std::cout << i * 3 + j + 1; else std::cout << static_cast < char >( g_aPlansza[ i ][ j ] ); } std::cout << "|" << std::endl; } std::cout << " -----" << std::endl; std::cout << std::endl; switch( g_StanGry ) { case GS_MOVE: std::cout << "Podaj numer pola, w ktorym" << std::endl; std::cout << "chcesz postawic "; std::cout <<( g_AktualnyGracz == SGN_CIRCLE ? "kolko": "krzyzyk" ) << ": "; break; case GS_WON: std::cout << "Wygral gracz stawiajacy "; std::cout <<( g_AktualnyGracz == SGN_CIRCLE ? "kolka": "krzyzyki" ) << "!"; break; case GS_DRAW: std::cout << "Remis!"; break; } return true; }
bool Ruch( unsigned uNumerPola ) { if( g_StanGry != GS_MOVE ) return false; if( !( uNumerPola >= 1 && uNumerPola <= 9 ) ) return false; unsigned uY =( uNumerPola - 1 ) / 3; unsigned uX =( uNumerPola - 1 ) % 3; if( g_aPlansza[ uY ][ uX ] == FLD_EMPTY ) g_aPlansza[ uY ][ uX ] = static_cast < FIELD >( g_AktualnyGracz ); else return false; const LINIE[][ 3 ][ 2 ] = { { { 0, 0 }, { 0, 1 }, { 0, 2 } }, { { 1, 0 }, { 1, 1 }, { 1, 2 } }, { { 2, 0 }, { 2, 1 }, { 2, 2 } }, { { 0, 0 }, { 1, 0 }, { 2, 0 } }, { { 0, 1 }, { 1, 1 }, { 2, 1 } }, { { 0, 2 }, { 1, 2 }, { 2, 2 } }, { { 0, 0 }, { 1, 1 }, { 2, 2 } }, { { 2, 0 }, { 1, 1 }, { 0, 2 } } }; FIELD Pole, ZgodnePole; unsigned uLiczbaZgodnychPol; for( int i = 0; i < 8; ++i ) { Pole = ZgodnePole = FLD_EMPTY; uLiczbaZgodnychPol = 0; for( int j = 0; j < 3; ++j ) { Pole = g_aPlansza[ LINIE[ i ][ j ][ 0 ] ][ LINIE[ i ][ j ][ 1 ] ]; if( Pole != ZgodnePole ) { ZgodnePole = Pole; uLiczbaZgodnychPol = 1; } else ++uLiczbaZgodnychPol; } if( uLiczbaZgodnychPol == 3 && ZgodnePole != FLD_EMPTY ) { g_StanGry = GS_WON; return true; } } unsigned uLiczbaZapelnionychPol = 0; for( int i = 0; i < 3; ++i ) for( int j = 0; j < 3; ++j ) if( g_aPlansza[ i ][ j ] != FLD_EMPTY ) ++uLiczbaZapelnionychPol; if( uLiczbaZapelnionychPol == 3 * 3 ) { g_StanGry = GS_DRAW; return true; } g_AktualnyGracz =( g_AktualnyGracz == SGN_CIRCLE ? SGN_CROSS: SGN_CIRCLE ); return true; }
game.h
#pragma once
enum SIGN { SGN_CIRCLE = 'O', SGN_CROSS = 'X' };
enum FIELD { FLD_EMPTY = 0, FLD_CIRCLE = SGN_CIRCLE, FLD_CROSS = SGN_CROSS };
enum GAMESTATE { GS_NOTSTARTED, GS_MOVE, GS_WON, GS_DRAW };
extern GAMESTATE g_StanGry;
bool StartGry();
bool RysujPlansze();
bool Ruch( unsigned );
Wyczytałem, że jest to częsty błąd jeśli nazwa deklaracji w pliku nagłówkowym i pliku źródłowym są takie same, ale u mnie deklaracja ta występuje tylko raz w pliku game.cpp |