Piszę, bo mogę!
Podbijam.
Samurai Champloo, anime o samurajach. Polecam każdej osobie, która jeszcze tego nie widziała.
https://www.youtube.com/watch?v=F87LlJxgZTk
Podbijam.
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ć
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
a
Podbijam.
Odbijam.
Zabijam!
#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
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
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