Witam, chcialem napisac gre Kolko i Krzyzyk. Wszytko ladnie mi szlo do momentu w ktorym tablica w ktorej mam przechowywane wspolrzedne poszczegolnych pol COORD pola[8], traci to co jest w niej zapisane. pojawiaja sie tam jakies krzaczki itp... Oto kod zrodlowy.
//main.cpp
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include "main.h"
#include "gameplay.h"
#include "gvar.h"
#include "gui.h"
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
TGui gui;
TGameplay gameplay;
gvar Igvar;
char title[100]={'K','o','l','k','o',' ','i',' ','K','r','z','y','z','y','k',' ','v','0','.','0','.','2'};
int main()
{
COORD buff2;
buff2.X=1;
buff2.Y=41;
gui.DrawMainFrame(GREEN);
gui.WindowResolution(0,0,40,60);
gui.DrawTitle(2,2,GREEN);
gameplay.ClearAllGameFields('.');
gameplay.SetPositionTable();
gameplay.DrawStaticGameText();
gameplay.DrawPlayground('+');
gameplay.DrawBlack(Igvar.pole[0],'#');
gameplay.DrawBlack(Igvar.pole[1],'#');
gameplay.DrawBlack(Igvar.pole[2],'#');
gameplay.DrawBlack(Igvar.pole[3],'#');
gameplay.DrawBlack(Igvar.pole[4],'#');
gameplay.DrawBlack(Igvar.pole[5],'#');
gameplay.DrawBlack(Igvar.pole[6],'#');
gameplay.DrawBlack(Igvar.pole[7],'#');
gameplay.DrawBlack(Igvar.pole[8],'#');
gameplay.DrawNumbers();
gameplay.DrawO(Igvar.pole[0],' ');
gameplay.DrawO(Igvar.pole[1],' ');
gameplay.DrawO(Igvar.pole[2],' ');
gameplay.DrawO(Igvar.pole[3],' ');
gameplay.DrawX(Igvar.pole[4],' ');
gameplay.DrawX(Igvar.pole[5],' ');
gameplay.DrawX(Igvar.pole[6],' ');
gameplay.DrawX(Igvar.pole[7],' ');
gameplay.DrawX(Igvar.pole[8],' ');
//Igvar.SetPlayerInformation();
//gameplay.DrawPlayerInformation();
gameplay.DrawBlackAll('-'); //
getch();
SetConsoleCursorPosition(hConsole,buff2);
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//CLASS TGameplay
void TGameplay::ClearAllGameFields(char symbol)
{
unsigned int i,i2;
COORD buff;
SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE | BACKGROUND_INTENSITY);
buff.X=1;
buff.Y=5;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<=34;i++)
{
buff.X=1;
buff.Y=5+i;
SetConsoleCursorPosition(hConsole,buff);
for(i2=0;i2<=37;i2++)
{
printf("%c",symbol);
}
}
}
void TGameplay::DrawBlack(COORD pos, char symbol)
{
COORD buff;
unsigned int i,i2;
SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE | BACKGROUND_INTENSITY);
//SetConsoleCursorPosition(gvar::hConsole,buff);
for(i=0;i<10;i++)
{
buff.X=pos.X+i;
buff.Y=pos.Y+i2;
SetConsoleCursorPosition(hConsole,buff);
for(i2=0;i2<10;i2++)
{
buff.Y=pos.Y+i2-1;
buff.X=pos.X+i-1;
SetConsoleCursorPosition(hConsole,buff);
printf("%c",symbol);
}
}
}
void TGameplay::SetPositionTable()
{
Igvar.pole[0].X=4;
Igvar.pole[0].Y=7;//0
Igvar.pole[1].X=15;
Igvar.pole[1].Y=7;//1
Igvar.pole[2].X=26;
Igvar.pole[2].Y=7;//2
Igvar.pole[3].X=4;
Igvar.pole[3].Y=18;//3
Igvar.pole[4].X=15;
Igvar.pole[4].Y=18;//4
Igvar.pole[5].X=26;
Igvar.pole[5].Y=18;//5
Igvar.pole[6].X=4;
Igvar.pole[6].Y=29;//6
Igvar.pole[7].X=15;
Igvar.pole[7].Y=29;//7
Igvar.pole[8].X=26;
Igvar.pole[8].Y=29;//8
}
void TGameplay::DrawPlayground(char symbol)
{
COORD buff;
unsigned int i;
buff.X=2;
buff.Y=16;
SetConsoleTextAttribute(hConsole,BACKGROUND_INTENSITY);
SetConsoleCursorPosition(hConsole,buff);
//pozioma 1
for(i=0;i<34;i++)
{
printf("%c",symbol);
}
//pozioma 2
buff.X=2;
buff.Y=27;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<34;i++)
{
printf("%c",symbol);
}
//pionowa 1
buff.X=13;
buff.Y=17;
for(i=0;i<32;i++)
{
buff.Y=6+i;
SetConsoleCursorPosition(hConsole,buff);
printf("%c",symbol);
}
//pionowa 2
buff.X=24;
buff.Y=17;
for(i=0;i<32;i++)
{
buff.Y=6+i;
SetConsoleCursorPosition(hConsole,buff);
printf("%c",symbol);
}
}
void TGameplay::DrawNumbers()
{
unsigned int i;
COORD buff;
for(i=0;i<=8;i++)
{
buff=Igvar.pole[i];
buff.X=buff.X+4;
buff.Y=buff.Y+4;
SetConsoleCursorPosition(hConsole,buff);
SetConsoleTextAttribute(hConsole, WHITE | BACKGROUND_BLUE | BACKGROUND_INTENSITY);
printf("%d",i);
}
}
void TGameplay::DrawX(COORD pos, char symbol)
{
COORD buff;
unsigned int i;
DrawBlack(pos,symbol);
buff.X=pos.X;
buff.Y=pos.Y;
SetConsoleTextAttribute(hConsole,BACKGROUND_GREEN | BACKGROUND_INTENSITY);
for(i=0;i<8;i++)
{
buff.X=pos.X+i;
buff.Y=pos.Y+i;
SetConsoleCursorPosition(hConsole,buff);
printf("%c",symbol);
}
for(i=0;i<8;i++)
{
buff.X=pos.X+7-i;
buff.Y=i+pos.Y;
SetConsoleCursorPosition(hConsole,buff);
printf("%c",symbol);
}
}
void TGameplay::DrawO(COORD pos, char symbol)
{
COORD buff;
unsigned int i;
DrawBlack(pos,symbol);
buff.X=pos.X+1;
buff.Y=pos.Y;
SetConsoleTextAttribute(hConsole,BACKGROUND_RED | BACKGROUND_INTENSITY);
//Poziome
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<6;i++)
{
printf(" ");
}
buff.X=pos.X+1;
buff.Y=pos.Y+7;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<6;i++)
{
printf(" ");
}
//EOPoziome
//Pionowe
buff.X=pos.X;
buff.Y=pos.Y+2;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<6;i++)
{
buff.Y=pos.Y+i+1;
SetConsoleCursorPosition(hConsole,buff);
printf(" ");
}
buff.X=pos.X+7;
buff.Y=pos.Y+2;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<6;i++)
{
buff.Y=pos.Y+i+1;
SetConsoleCursorPosition(hConsole,buff);
printf(" ");
}
//EOPionowe
}
void TGameplay::DrawStaticGameText()
{
COORD buff;
//Gracz 1
buff.X=40;
buff.Y=6;
SetConsoleTextAttribute(hConsole, WHITE);
SetConsoleCursorPosition(hConsole,buff);
printf("Gracz 1:");
buff.X=40;
buff.Y=10;
SetConsoleCursorPosition(hConsole,buff);
printf("Symbol gracza:");
buff.X=40;
buff.Y=14;
SetConsoleCursorPosition(hConsole,buff);
printf(" Wygranych rund:");
buff.X=40;
buff.Y=16;
SetConsoleCursorPosition(hConsole,buff);
printf("Przegranych rund:");
//EOGracz 1
//Gracz 2
buff.X=40;
buff.Y=24;
SetConsoleTextAttribute(hConsole, WHITE);
SetConsoleCursorPosition(hConsole,buff);
printf("Gracz 2:");
buff.X=40;
buff.Y=28;
SetConsoleCursorPosition(hConsole,buff);
printf("Symbol gracza:");
buff.X=40;
buff.Y=32;
SetConsoleCursorPosition(hConsole,buff);
printf(" Wygranych rund:");
buff.X=40;
buff.Y=34;
SetConsoleCursorPosition(hConsole,buff);
printf("Przegranych rund:");
//EOGracz 2
}
void TGameplay::DrawBlackAll(char symbol)
{
SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE | BACKGROUND_INTENSITY);
DrawBlack(Igvar.pole[0],symbol);
DrawBlack(Igvar.pole[1],symbol);
DrawBlack(Igvar.pole[2],symbol);
DrawBlack(Igvar.pole[3],symbol);
DrawBlack(Igvar.pole[4],symbol);
DrawBlack(Igvar.pole[5],symbol);
DrawBlack(Igvar.pole[6],symbol);
DrawBlack(Igvar.pole[7],symbol);
DrawBlack(Igvar.pole[8],symbol);
}
void TGameplay::DrawPlayerInformation()
{
//Gracz 1
SetConsoleTextAttribute(hConsole, WHITE);
buff.X=40;
buff.Y=6;
SetConsoleCursorPosition(hConsole,buff);
printf("Gracz 1:");
buff.X=41;
buff.Y=8;
SetConsoleCursorPosition(hConsole,buff);
SetConsoleTextAttribute(hConsole, LIGHTGREEN);
printf("%s",Igvar.player[0].name);
SetConsoleTextAttribute(hConsole, WHITE);
buff.X=40;
buff.Y=10;
SetConsoleCursorPosition(hConsole,buff);
printf("Symbol gracza: %c",Igvar.player[0].symbol);
buff.X=40;
buff.Y=14;
SetConsoleCursorPosition(hConsole,buff);
printf(" Wygranych rund: %d",Igvar.player[0].win);
buff.X=40;
buff.Y=16;
SetConsoleCursorPosition(hConsole,buff);
printf("Przegranych rund: %d",Igvar.player[0].lose);
//EOGracz 1
//Gracz 2
buff.X=40;
buff.Y=24;
SetConsoleTextAttribute(hConsole, WHITE);
SetConsoleCursorPosition(hConsole,buff);
printf("Gracz 2:");
buff.X=41;
buff.Y=26;
SetConsoleCursorPosition(hConsole,buff);
SetConsoleTextAttribute(hConsole, LIGHTGREEN);
printf("%s",Igvar.player[1].name);
SetConsoleTextAttribute(hConsole, WHITE);
buff.X=40;
buff.Y=28;
SetConsoleCursorPosition(hConsole,buff);
printf("Symbol gracza: %c",Igvar.player[1].symbol);
buff.X=40;
buff.Y=32;
SetConsoleCursorPosition(hConsole,buff);
printf(" Wygranych rund: %d",Igvar.player[1].win);
buff.X=40;
buff.Y=34;
SetConsoleCursorPosition(hConsole,buff);
printf("Przegranych rund: %d",Igvar.player[1].lose);
//EOGracz 2
}
//EOTGameplay
//-----------------
//-------gvar
//------------------
void gvar::SetPlayerInformation()
{
player[0].lose=0;
player[0].win=0;
player[0].symbol='X';
strcpy(player[0].name,"Gracz");
player[1].lose=0;
player[1].win=0;
player[1].symbol='O';
strcpy(player[1].name,"Komputer");
}
//---------------
//----eogvar
//----------------
//---------------
//----gui
//-------------
void TGui::WindowResolution(unsigned int top, unsigned int left, unsigned int bottom, unsigned int right)
{
SMALL_RECT buff;
buff.Top=top;
buff.Left=left;
buff.Bottom=bottom;
buff.Right=right;
SetConsoleWindowInfo(hConsole,TRUE,&buff);
};
void TGui::DrawMainFrame(unsigned int color)
{
SetConsoleTextAttribute(hConsole,BACKGROUND_BLUE | BACKGROUND_INTENSITY);
DrawBox(0,0,60,40,' ');
SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
DrawBox(0,0,1,41,' '); // |
DrawBox(60,0,1,41,' ');// |
DrawBox(1,0,60,1,' '); // --
DrawBox(0,41,61,1,' ');// --
DrawBox(1,4,59,1,' '); // --
DrawBox(39,4,1,38,' ');// --
DrawBox(40,22,20,1,' ');//--
DrawBox(40,40,20,1,' ');//--
}
void TGui::DrawBox(unsigned int x, unsigned int y, unsigned int width, unsigned int height,char symbol)
{
COORD buff;
unsigned int i,i2;
buff.X=x;
buff.Y=y;
SetConsoleCursorPosition(hConsole,buff);
for(i=0;i<height;i++)
{
buff.Y=y+i;
SetConsoleCursorPosition(hConsole,buff);
for(i2=0;i2<width;i2++)
{
printf("%c",symbol);
}
}
}
void TGui::DrawTitle(unsigned int x, unsigned int y, unsigned int color)
{
COORD buff;
buff.X=x;
buff.Y=y;
SetConsoleCursorPosition(hConsole,buff);
SetConsoleTextAttribute(hConsole, color | BACKGROUND_BLUE | BACKGROUND_INTENSITY | FOREGROUND_INTENSITY);
printf("%s",title);
}
//------------gui
//---------------
//----------------
//end main.cpp
//main.h
#ifndef MAIN_H
#define MAIN_H
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define FAST_GAME 1
#define TOURNAMENT 2
#define GREEN 2
#define LIGHTGREEN 10
#define LIGHTCYAN 11
#define LIGHTRED 12
#define LIGHTGREEN 10
#define WHITE 15
#define BLACK 0
#define FAST_GAME 1
#define TOURNAMENT 2
#define YELLOW 14
#endif
//end main.h
//gameplay.h
#ifndef GAMEPLAY_H
#define GAMEPLAY_H
//CLASS TGameplay
class TGameplay
{
public:
COORD buff;
void ClearAllGameFields(char symbol);
void DrawBlack(COORD pos, char symbol);
void DrawBlackAll(char symbol);
void SetPositionTable();
void DrawPlayground(char symbol);
void DrawNumbers();
void DrawX(COORD pos, char symbol);
void DrawO(COORD pos, char symbol);
void DrawStaticGameText();
void DrawPlayerInformation();
void SetPlayerInformation();
};
//EOCLASS TGameplay
#endif
//end gameplay.h
//gui.h
#ifndef GUI_H
#define GUI_H
//CLASS TGui
class TGui
{
public:
void WindowResolution(unsigned int top, unsigned int left, unsigned int bottom, unsigned int right);
void DrawBox(unsigned int x, unsigned int y, unsigned int width, unsigned int height, char symbol);
void DrawTitle(unsigned int x, unsigned int y, unsigned int color);
void DrawMainFrame(unsigned int color);
};
//EOCLASS TGui
#endif
//end gui.h
//gvar.h
#ifndef GVAR_H
#define GVAR_H
//CLASS gvar
class gvar
{
public:
void SetPlayerInformation();
struct SPlayer
{
unsigned int win;
unsigned int lose;
char name[20];
char symbol;
}player[1];
COORD pole[8];
};
//EOCLASS gvar
#endif
//end gvar.h
W pliku main.cpp sa nastepujace linijki:
//Igvar.SetPlayerInformation();
//gameplay.DrawPlayerInformation();
gameplay.DrawBlackAll('-');
jak jest tak to procedura DrawBlackAll() dziala ok, ale jak te 2 wyzej sa uruchomione to DrawBlackAll ktora czysci pola od 0 do 8 wybranym znakiem na podstawie wspolrzednych z tablicy pola[8] typu COORD szaleje bo dane w tablicy pola[8] cos mi zmienia. Moze ktos mi powiedziec dlaczego tak sie dzieje? Odznaczcie sobie // i sprawdzcie. MEcze sie z tym juz 4 dzien i nie wiem dlaczego tak jest.
Przepraszam tez za nieczytelnosc kodu ale C++ ucze sie od 1 tygodnia...