Piszę, bo mogę!

Podbijam.

Samurai Champloo, anime o samurajach. Polecam każdej osobie, która jeszcze tego nie widziała. :D

https://www.youtube.com/watch?v=F87LlJxgZTk

Podbijam.

Zakładam nową religię, kto jest ze mną?

Nuuuuuuuuuuuuuuuuuuudzi mi sięęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęęę poomooocyyyyyyyyyyyyy. A z projektem jak zwykle zwlekanie do statniego dnia bo nie chce się wcześniej zrobić :(

Polecam granie w crapy rozdawane na darmo na Steam. Po godzince od razu będziesz wolał nad projektem popracować :P

To sprawdź może czy syndykat ma dla ciebie nowe zadanie

Raczej dlatego, że temat się tam urywa. Chwilowo bawię się GML, ale na razie nic godnego pokazania nie stworzyłem :P

a

Podbijam.

Odbijam.

Zabijam!

sMi5oDs.gif

#include

#include

#include

#define ALLEGRO_STATICLINK

#include

#include

#include

#include

#include

#include "Person.h"

#include "Enemy.h"

int collisionCheck(Person& player, std::list enemyList);

int collisionCheck(Person player, Person exit);

int main()

{

srand(time(NULL));

char out[3]; //needed for sprintf

ALLEGRO_DISPLAY *display;

if(!al_init())

{

al_show_native_message_box(NULL, NULL, NULL, "Could not initialize Allegro 5", NULL, NULL);

}

display = al_create_display(ScreenWidth, ScreenHeight);

al_set_window_title(display, "Projekt na Politechnike");

if(!display)

{

al_show_native_message_box(NULL, NULL, NULL, "Could not create Allegro window", NULL, NULL);

}

al_clear_to_color(al_map_rgb(0, 0, 0)); // set the colot of screen 4,80,5 - green color of monitor

Person hero = Person(ScreenWidth-10, 10, "Arek"); // initializing hero object in the game

Person door = Person(10, ScreenHeight-10, "WIN"); //initializing victory condition

for(int i = 0; i < 15; i++) //initializing random enemies

{

Enemy *tempEnemy = new Enemy((rand()%ScreenHeight-100)+100, rand()%ScreenWidth-50, 30, rand()%4);

//rand arguments set up this way because 0,0 is upper left corner and we don't want enemies spawning on the same x or y as player

Creature::aliveEnemies.push_back(tempEnemy);

}

// initializing font and font file in the program

al_init_font_addon();

al_init_ttf_addon();

ALLEGRO_FONT *font = al_load_font("ob.ttf", 32, NULL); // loading font from the file .ttf

//drawing text on the screen with (loaded font, giving a color of text, x position of text, y position of text, alignment of text, text to draw)

al_init_primitives_addon();

al_install_keyboard(); //adding keyboard to program

if(!al_is_keyboard_installed())

{

al_draw_text(font, al_map_rgb(33, 33, 33), ScreenWidth / 2, ScreenHeight / 2, ALLEGRO_ALIGN_LEFT, "Error keyboard");

}

ALLEGRO_EVENT_QUEUE *event_queue = al_create_event_queue(); //initialize handler to FIFO queue of keyboard events

al_register_event_source(event_queue, al_get_keyboard_event_source()); //register source of events in this game it is keyboard

bool gameLoop = false;

al_flip_display();

while(!gameLoop)

{

ALLEGRO_EVENT events;

al_wait_for_event_timed(event_queue, &events, 0.01);

if(events.type == ALLEGRO_EVENT_KEY_DOWN)

{

switch(events.keyboard.keycode) //part to navigation of game`s hero

{

case ALLEGRO_KEY_DOWN:

hero.moveDown();

break;

case ALLEGRO_KEY_UP:

hero.moveUp();

break;

case ALLEGRO_KEY_LEFT:

hero.moveLeft();

break;

case ALLEGRO_KEY_RIGHT:

hero.moveRight();

break;

case ALLEGRO_KEY_ESCAPE:

gameLoop = true;

}

}

al_draw_text(font, al_map_rgb(33, 33, 33), ScreenWidth-100, 20, ALLEGRO_ALIGN_LEFT, hero.getname());

sprintf(out, "%d", hero.getPower());

al_draw_text(font, al_map_rgb(33, 33, 33), ScreenWidth -100, 50, ALLEGRO_ALIGN_LEFT, out);

al_draw_text(font, al_map_rgb(33, 33, 33), ScreenWidth / 2, ScreenHeight-30, ALLEGRO_ALIGN_CENTRE, "created by: Maciej Gora, Arkadiusz Jagiello");

hero.draw();

door.draw();

for(std::list::const_iterator it = Creature::aliveEnemies.begin(); it != Creature::aliveEnemies.end(); ++it)

{

if((*it)->getDirection() == 0)

{

(*it)->setY((*it)->getSpeed());

}

if((*it)->getDirection() == 1)

{

(*it)->setY(-(*it)->getSpeed());

}

if((*it)->getDirection() == 2)

{

(*it)->setX((*it)->getSpeed());

}

if((*it)->getDirection() == 3)

{

(*it)->setX((*it)->getSpeed());

}

al_draw_filled_rectangle( (*it)->getX(), (*it)->getY(), (*it)->getX()+15, (*it)->getY()+15, al_map_rgb(44, 117, 255));

}

collisionCheck(hero, Creature::aliveEnemies);

if(collisionCheck(hero, door))

{

al_show_native_message_box(display, "WIN", "WIN", "You won the game", NULL, NULL);

gameLoop = true;

}

if(hero.getPower() < 0)

{

al_show_native_message_box(display, "LOSE", "LOSE", "You lost the game", NULL, NULL);

gameLoop = true;

}

al_flip_display();

al_clear_to_color(al_map_rgb(0, 0, 0));

}

al_destroy_font(font);

al_destroy_display(display);

al_destroy_event_queue(event_queue);

return 0;

}

int collisionCheck(Person& player, std::list enemyList)

{

for(std::list::iterator enemy = enemyList.begin(); enemy != enemyList.end(); ++enemy)

{

if (!( (player.getX() > (*enemy)->getX() + 20 - 1) || // is b1 on the right side of b2?

(player.getY() > (*enemy)->getY() + 20 - 1) || // is b1 under b2?

((*enemy)->getX() > player.getX() + 10 - 1) || // is b2 on the right side of b1?

((*enemy)->getY() > player.getY() + 10 - 1)) ) // is b2 under b1?

{

//collision

player.setPower((*enemy)->getPower());

(*enemy)->removeEnemy();

return 1;

}

}

return 0;

}

int collisionCheck(Person player, Person exit)

{

if (!( (player.getX() > exit.getX() + 20 - 1) || // is b1 on the right side of b2?

(player.getY() > exit.getY() + 20 - 1) || // is b1 under b2?

(exit.getX() > player.getX() + 10 - 1) || // is b2 on the right side of b1?

(exit.getY() > player.getY() + 10 - 1)) ) // is b2 under b1?

{

//collision

return 1;

}

return 0;

}

Strasznie podoba mi się, że używasz typowego układu C++, znaczy:

if(nieistotny_warunek){    wazny_kod;}

a nie popularniejszego układu Java, który mnie odpycha i jest mniej czytelny:

if(warunek_warunek){    nie_mniej_wazny_kod;}

A Allegro w tej wersji jakiej z kumplem użyliśmy na studiach ni w ząb nie pasowało do projektu(ważne funkcje jeszcze nie były przeniesione do wersji 5) i musiałem przeskoczyć programistyczne góry, żeby działało jak trzeba. Ostatecznie był to drugi projekt w grupie i jeden z topowych w roczniku :P

Zależy czy liczymy czas rzeczywiście spędzony na robocie, czy czas od dnia jak zaczęliśmy, do dnia jak skończyliśmy :P

Generalnie połowy tego co miało tam być nie było, bo jakoś zawsze coś innego było do roboty, na przykład piwo. A nie przewidzieliśmy komplikacji jakie później wyszły.

Programiści przejmują piszę bo mogę, od teraz każdy post wymaga co najmniej 20 linijek kodu, najlepiej w Asemblerze.

Nie. #buntownik mocno