Hej, ostatnio udało mi się napisać jak na mój poziom zaawansowania dość ciekawy projekt. Jest to prosta gra do której piszemy/rysujemy poziomy w notatniku. Miał to być tylko prosty program dla ćwiczeń ale jakoś się rozrósł.
Projekt przykładowego poziomu:
Gra:
pewnie po treści wicie w czym jest problem...
Oto zasadnicze teraz kwestie programu:
1) main.cpp
#include <iostream>
#include <windows.h>
#include <string>
#include <conio.h>
#include "Game.h"
#include "Program.h"
int main() {
game::GameMap gm("testMap1.m");
bool e = gameLoop(gm);
if (e)
std::cout << "YOU WIN!" << std::endl;
else
std::cout << "GAME OVER!" << std::endl;
_getch();
}
2) Program.h
#ifndef PROGRAM_H_
#define PROGRAM_H_
#include "Game.h"
bool gameLoop(game::GameMap& gm);
void cls();
#endif
3) Program.cpp
#include "Program.h"
#include "Game.h"
#include <iostream>
#include <windows.h>
#include <string>
#include <conio.h>
///-----------------------------------------------------------------------------
bool gameLoop(game::GameMap& gm) {
int theEnd{};
while (true) {
cls(); //czyścimy ekran
std::cout << gm; //rysujemy mapę korzystając z zawartych w klasie przeciążeń (ma ona postać płaskiej dynamicznej tablicy odpowiednio wyświetlaną jako prostokąt2D za pośrednictwem metody)
theEnd = gameEvent(gm);
if (theEnd == 2 || theEnd == 1) break; //1 to wygrana a 2 to przegrana, natomiast 0 to kontynuacja
playerControl(gm);
monstersLogic(gm); // obie funkcje dotyczą ruchu przeciwników
randomMonstersMove(gm); //
playerControl(gm); // funkcji player control użyłem 2 razy, może zawsze to dać jakiś pozytywny efekt ;)
}
system("cls");
if (theEnd == 1)
return true;
return false;
}
///---------------------------------------------------------------------------------------
void cls() { //ta funkcja ustawia kursor na współrzędne zerowe ( czyli w moim zamierzeniu czyści ekran )
COORD cord;
cord.X = 0;
cord.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cord);
}
///------------------------------------------------------------------------------------------
Największe znaczenie ma tu oczywiście plik źródłowy: Program.cpp
Myślę że głębiny pliku Game.h i Game.cpp nie mają znaczenia bo same tempo gry i optymalizacje zawartych tam algorytmów nie sprawiają problemów. Oczywiście jak deklaracje klas i definicje metod/funkcji zawartych w tych plikach będą potrzebne to napiszcie.
Chociaż użyta przeze mnie własna funkcja o nazwie cls() działa a niebo lepiej niż system("cls") to dalej zwłaszcza na ścianach mapy ( znakach '#' ) widać oznaki odświeżania ekranu, tzn to miganie. Czy da się czyszczenie ekranu jeszcze bardziej usprawnić? A może problem nie jest w czyszczeniu ekranu, może trzeba ustawić pokazywanie się mapy w jakimś timerze ( np 60 razy na sekundę ) ?
Z tego jak ta gra mi wyszła jestem dość zadowolony, no ale to migane :/
Z góry dziękuje za porady ;)