Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem - śmierć przeciwników

Ostatnio zmodyfikowano 2012-11-04 17:41
Autor Wiadomość
DonChris
Temat założony przez niniejszego użytkownika
Problem - śmierć przeciwników
» 2012-11-04 16:06:26
Witam.
Ostatnio zacząłem pisać gierkę (strzelankę) polegającą na zabijaniu atakujących gracza zombie :) Gracz może zabić zombie strzelając do niego. Po śmierci wszystkich zombie respawnują się one na nowo i... po chwili pojawia się problem. Gdy tylko zombie pojawi się w okolicy w której poprzednio zginął to ginie ponownie. Czego jest to wina?
Oto kodzik:
C/C++
#include <allegro.h>
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int postac_x, postac_y, blysk_x, blysk_y, powt, runda, myhp;
int p1, p1_x, p1_y, p2, p2_x, p2_y;
int ammow, ammoq;
void hp( int g, int l, int p, int d, int h )
{
    double hp = 1;
    if( blysk_y > g )
    {
        if( postac_y < g && blysk_x > l && blysk_x < p ) hp = 0;
       
    }
    if( blysk_x > l )
    {
        if( postac_x < l && blysk_y > g && blysk_y < d ) hp = 0;
       
    }
    if( blysk_x < p )
    {
        if( postac_x > p && blysk_y > g && blysk_y < d ) hp = 0;
       
    }
    if( blysk_y < d )
    {
        if( postac_y > d && blysk_x > l && blysk_x < p ) hp = 0;
       
    }
    if( h == 1 && hp == 0 ) p1 = 0;
   
    if( h == 2 && hp == 0 ) p2 = 0;
   
}
void kolizja( int g, int l, int p, int d )
{
    if( postac_y + 20 > g )
    {
        if( postac_y < g + 2 && postac_x + 20 > l && postac_x < p ) postac_y = postac_y - 1;
       
    }
    if( postac_x + 20 > l )
    {
        if( postac_x < l + 2 && postac_y + 20 > g && postac_y < d ) postac_x = postac_x - 1;
       
    }
    if( postac_x < p )
    {
        if( postac_x > l && postac_y + 20 > g && postac_y < d ) postac_x = postac_x + 1;
       
    }
    if( postac_y < d )
    {
        if( postac_y > g && postac_x + 20 > l && postac_x < p ) postac_y = postac_y + 1;
       
    }
    if( blysk_y > g )
    {
        if( blysk_y < g + 2 && blysk_x > l && blysk_x < p ) powt = 1000;
       
    }
    if( blysk_x > l )
    {
        if( blysk_x < l + 2 && blysk_y > g && blysk_y < d ) powt = 1000;
       
    }
    if( blysk_x < p )
    {
        if( blysk_x > p - 2 && blysk_y > g && blysk_y < d ) powt = 1000;
       
    }
    if( blysk_y < d )
    {
        if( blysk_y > d - 2 && blysk_x > l && blysk_x < p ) powt = 1000;
       
    }
    if( p1_y + 20 > g )
    {
        if( p1_y < g + 2 && p1_x + 20 > l && p1_x < p ) p1_y = p1_y - 1;
       
    }
    if( p1_x + 20 > l )
    {
        if( p1_x < l + 2 && p1_y + 20 > g && p1_y < d ) p1_x = p1_x - 1;
       
    }
    if( p1_x < p )
    {
        if( p1_x > l && p1_y + 20 > g && p1_y < d ) p1_x = p1_x + 1;
       
    }
    if( p1_y < d )
    {
        if( p1_y > g && p1_x + 20 > l && p1_x < p ) p1_y = p1_y + 1;
       
    }
    if( p2_y + 20 > g )
    {
        if( p2_y < g + 2 && p2_x + 20 > l && p2_x < p ) p2_y = p2_y - 1;
       
    }
    if( p2_x + 20 > l )
    {
        if( p2_x < l + 2 && p2_y + 20 > g && p2_y < d ) p2_x = p2_x - 1;
       
    }
    if( p2_x < p )
    {
        if( p2_x > l && p2_y + 20 > g && p2_y < d ) p2_x = p2_x + 1;
       
    }
    if( p2_y < d )
    {
        if( p2_y > g && p2_x + 20 > l && p2_x < p ) p2_y = p2_y + 1;
       
    }
}
void atak( int g, int l, int p, int d )
{
    if( postac_y + 20 >= g && postac_y <= g && postac_x + 20 >= l && postac_x <= p )
    {
        myhp = myhp - 1;
    }
}
void ai( int g, int l, int p, int d, int ktory )
{
    if( ktory == 1 )
    {
        if( postac_y < g )
        {
            p1_y = p1_y - 1;
        }
        if( postac_x < l )
        {
            p1_x = p1_x - 1;
        }
        if( postac_x > p - 20 )
        {
            p1_x = p1_x + 1;
        }
        if( postac_y > d - 20 )
        {
            p1_y = p1_y + 1;
        }
    }
    if( ktory == 2 )
    {
        if( postac_y < g )
        {
            p2_y = p2_y - 1;
        }
        if( postac_x < l )
        {
            p2_x = p2_x - 1;
        }
        if( postac_x > p - 20 )
        {
            p2_x = p2_x + 1;
        }
        if( postac_y > d - 20 )
        {
            p2_y = p2_y + 1;
        }
    }
}
void kolizje()
{
    kolizja( 84, 100, 200, 234 );
    kolizja( 230, 300, 550, 290 );
    kolizja( 80, 760, 810, 110 );
    kolizja( 400, 210, 360, 520 );
    kolizja( 600, 697, 700, 897 );
}
int main()
{
    allegro_init();
    install_keyboard();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT_WINDOWED, 900, 700, 0, 0 );
    clear_to_color( screen, makecol( 128, 128, 128 ) );
    BITMAP * bufor = NULL;
    BITMAP * postac = NULL;
    BITMAP * przeciwnik = NULL;
    BITMAP * przeciwnik2 = NULL;
    BITMAP * background = NULL;
    BITMAP * blysk = NULL;
    BITMAP * blysk2 = NULL;
    bufor = create_bitmap( 900, 700 );
    postac = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/postac.tga", default_palette );
    przeciwnik = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/zombie.tga", default_palette );
    przeciwnik2 = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/zombie.tga", default_palette );
    background = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/mapa1.tga", default_palette );
    blysk = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/blysk.tga", default_palette );
    blysk2 = load_tga( "/home/donchris/Dokumenty/Projekt2/Modele/blysk2.tga", default_palette );
    postac_x = 5,
    postac_y = 200;
    p1 = p2 = 1;
    p1_y = 400;
    p1_x = 500;
    p2_y = 100;
    p2_x = 300;
    ammow = 100;
    ammoq = 100;
    myhp = 100;
    runda = 1;
    while( !key[ KEY_ESC ] )
    {
        powt = 1;
        if( key[ KEY_LEFT ] ) postac_x = postac_x - 2;
       
        if( key[ KEY_RIGHT ] ) postac_x = postac_x + 2;
       
        if( key[ KEY_UP ] ) postac_y = postac_y - 2;
       
        if( key[ KEY_DOWN ] ) postac_y = postac_y + 2;
       
        kolizje();
        clear_to_color( bufor, makecol( 150, 150, 150 ) );
        blit( background, bufor, 0, 0, 0, 0, background->w, background->h );
        textprintf_ex( bufor, font, 710, 610, makecol( 255, 255, 255 ), - 1, "Ammow: %d", ammow );
        textprintf_ex( bufor, font, 710, 620, makecol( 255, 255, 255 ), - 1, "Ammoq: %d", ammoq );
        textprintf_ex( bufor, font, 710, 630, makecol( 255, 255, 255 ), - 1, "HP: %d", myhp );
        textprintf_ex( bufor, font, 710, 640, makecol( 255, 255, 255 ), - 1, "Runda: %d", runda );
        if( p1 == 1 ) masked_blit( przeciwnik, bufor, 0, 0, p1_x, p1_y, przeciwnik->w, przeciwnik->h );
       
        if( p2 == 1 ) masked_blit( przeciwnik2, bufor, 0, 0, p2_x, p2_y, przeciwnik2->w, przeciwnik2->h );
       
        if( key[ KEY_W ] && ammow > 0 )
        {
            blysk_x = postac_x + 10;
            blysk_y = postac_y + 10;
            if( key[ KEY_LEFT ] && !key[ KEY_RIGHT ] )
            {
                do
                {
                    blit( blysk, bufor, 0, 0, blysk_x, blysk_y, blysk->w, blysk->h );
                    blysk_x = blysk_x - 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 50 );
               
            }
            if( key[ KEY_RIGHT ] && !key[ KEY_LEFT ] )
            {
                do
                {
                    blit( blysk, bufor, 0, 0, blysk_x, blysk_y, blysk->w, blysk->h );
                    blysk_x = blysk_x + 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 50 );
               
            }
            if( key[ KEY_UP ] && !key[ KEY_DOWN ] )
            {
                do
                {
                    blit( blysk, bufor, 0, 0, blysk_x, blysk_y, blysk->w, blysk->h );
                    blysk_y = blysk_y - 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 50 );
               
            }
            if( key[ KEY_DOWN ] && !key[ KEY_UP ] )
            {
                do
                {
                    blit( blysk, bufor, 0, 0, blysk_x, blysk_y, blysk->w, blysk->h );
                    blysk_y = blysk_y + 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 50 );
               
            }
            ammow = ammow - 1;
        }
        if( key[ KEY_Q ] && ammoq > 0 )
        {
            blysk_x = postac_x + 10;
            blysk_y = postac_y + 10;
            if( key[ KEY_LEFT ] && !key[ KEY_RIGHT ] )
            {
                do
                {
                    blit( blysk2, bufor, 0, 0, blysk_x, blysk_y, blysk2->w, blysk2->h );
                    blysk_x = blysk_x - 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 100 );
               
            }
            if( key[ KEY_RIGHT ] && !key[ KEY_LEFT ] )
            {
                do
                {
                    blit( blysk2, bufor, 0, 0, blysk_x, blysk_y, blysk2->w, blysk2->h );
                    blysk_x = blysk_x + 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 100 );
               
            }
            if( key[ KEY_UP ] && !key[ KEY_DOWN ] )
            {
                do
                {
                    blit( blysk2, bufor, 0, 0, blysk_x, blysk_y, blysk2->w, blysk2->h );
                    blysk_y = blysk_y - 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 100 );
               
            }
            if( key[ KEY_DOWN ] && !key[ KEY_UP ] )
            {
                do
                {
                    blit( blysk2, bufor, 0, 0, blysk_x, blysk_y, blysk2->w, blysk2->h );
                    blysk_y = blysk_y + 1;
                    powt = powt + 1;
                    kolizje();
                } while( powt < 100 );
               
            }
            ammoq = ammoq - 1;
        }
        masked_blit( postac, bufor, 0, 0, postac_x, postac_y, postac->w, postac->h );
        blit( bufor, screen, 0, 0, 0, 0, 900, 700 );
        if( postac_x < 3 ) postac_x = 3;
       
        if( postac_y < 3 ) postac_y = 3;
       
        if( postac_x > 877 ) postac_x = 877;
       
        if( postac_y > 677 ) postac_y = 677;
       
        hp( p1_y, p1_x, p1_x + 20, p1_y + 20, 1 );
        hp( p2_y, p2_x, p2_x + 20, p2_y + 20, 2 );
        if( p1 == 1 ) atak( p1_y, p1_x, p1_x + 20, p1_y + 20 );
       
        if( p2 == 1 ) atak( p2_y, p2_x, p2_x + 20, p2_y + 20 );
       
        if( p1 == 1 ) ai( p1_y, p1_x, p1_x + 20, p1_y + 20, 1 );
       
        if( p2 == 1 ) ai( p2_y, p2_x, p2_x + 20, p2_y + 20, 2 );
       
        if( p1 == 0 && p2 == 0 )
        {
            runda = runda + 1;
            ammoq = ammoq + 5;
            ammow = ammow + 20;
            p1_y = 400;
            p1_x = 500;
            p2_y = 100;
            p2_x = 300;
            p1 = 1;
            p2 = 1;
        }
    }
    destroy_bitmap( postac );
    destroy_bitmap( bufor );
    destroy_bitmap( background );
    destroy_bitmap( blysk );
    destroy_bitmap( blysk2 );
    destroy_bitmap( przeciwnik );
    allegro_exit();
    return 0;
}
END_OF_MAIN();
 
PS:Jeśli napisałem coś niejasno to proszę pytać
P-68454
Mrovqa
» 2012-11-04 16:59:51
Gdy tylko zombie pojawi się w okolicy w której poprzednio zginął to ginie ponownie. Czego jest to wina?
Czyżby ghost bullet? ;)
P-68463
DonChris
Temat założony przez niniejszego użytkownika
» 2012-11-04 17:15:59
A jak można to naprawić?
P-68465
pekfos
» 2012-11-04 17:41:44
Usuń pocisk gdy wykryjesz trafienie.
P-68468
« 1 »
  Strona 1 z 1