>From a design standpoint, I don't see why the Battle class needs to
have a DrawBattle object... I would decouple those and just let the
Battle class handle the data for the armies, player characters, etc
and let the DrawBattle read the data as needed (almost like a
client/server relationship). That way, you can have multiple battle
objects, perhaps, but there will always be one and only one DrawBattle
object that handles the screen display.

On Dec 27, 2007 10:06 AM, Michael Sullivan <[EMAIL PROTECTED]> wrote:
> OK.  New code and error messages:
>
> [EMAIL PROTECTED] ourrpg $ nl battle.h
>      1  #ifndef __BATTLE_H__
>      2  #define __BATTLE_H__
>      3
>      4  #include <SDL/SDL.h>
>      5  #include "SDL/SDL_ttf.h"
>      6  #include <string>
>      7  #include "character.h"
>      8  #include "ally.h"
>      9
>     10  using namespace std;
>     11
>     12  class DrawBattle;
>     13  class Battle
>     14  {
>     15     public:
>     16        Battle();
>     17        ~Battle();
>     18        Ally* getParty() { return party; }
>     19        Ally* getParty(int i) { return &party[i]; }
>     20
>     21        bool initialize();
>     22        bool destroy();
>     23
>     24     private:
>     25        Ally party[4];
>     26        DrawBattle db;
>     27  };
>     28
>     29  class DrawBattle
>     30  {
>     31     public:
>     32        DrawBattle() {}
>     33        DrawBattle(Battle *ba);
>     34        ~DrawBattle();
>     35
>     36        bool initialize();
>     37        bool destroy();
>     38
>     39        void loadImage(int index, string filename);
>     40        void drawStats();
>     41        void drawLines();
>     42
>     43        SDL_Surface* drawString(int x, int y, string dsMessage);
>     44        SDL_Surface* getScreen() { return screen; }
>     45        SDL_Surface* getImage(int i) { return image[i]; }
>     46        SDL_Surface** getStatus() { return status; }
>     47        Uint32 getColorKey() { return colorkey; }
>     48
>     49     private:
>     50        SDL_Surface *screen, *image[4], *status[4];
>     51        SDL_Rect src[4], dest[4];
>     52        Uint32 colorkey;
>     53        TTF_Font *font;
>     54        Ally party[4];
>     55        Battle *b;
>     56
>     57  };
>     58
>     59  #endif
>
> [EMAIL PROTECTED] ourrpg $ nl battle.cpp
>      1  #include <stdio.h>
>      2  #include <stdlib.h>
>      3  #include <SDL/SDL.h>
>      4  #include <SDL/SDL_image.h>
>      5  #include <SDL/SDL_gfxPrimitives.h>
>      6  #include <stdlib.h>
>      7  #include <string.h>
>      8  #include "battle.h"
>      9  #include "character.h"
>     10
>     11  int i;
>     12
>     13
>     14  Battle::Battle()
>     15  {
>     16
>     17  //TEMP This block is temporary - don't forget to remove it
> later
>     18     party[0] = Ally("Michael", 10, 7);
>     19     party[1] = Ally("Amy", 8, 13);
>     20     party[2] = Ally("Feli", 12, 15);
>     21     party[3] = Ally("Jelli", 9, 4);
>     22  }
>     23
>     24  Battle::~Battle()
>     25  {
>     26  }
>     27
>     28  bool Battle::initialize()
>     29  {
>     30     db = DrawBattle(this);
>     31  }
>     32
>     33  bool Battle::destroy()
>     34  {
>     35  }
>     36
>     37
>     38
>
> [EMAIL PROTECTED] ourrpg $ nl drawbattle.cpp
>      1  #include "battle.h"
>      2
>      3  bool DrawBattle::initialize()
>      4  {
>      5     if (SDL_Init(SDL_INIT_VIDEO) != 0)
>      6     {
>      7        printf("Unable to initialize SDL:  %s\n", SDL_GetError());
>      8        return false;
>      9     }
>     10     atexit(SDL_Quit);
>     11
>     12     if( TTF_Init() == -1 )
>     13     {
>     14        printf("Could not intialize the font:  %s\n",
> SDL_GetError());
>     15        return false;
>     16     }
>     17     font = TTF_OpenFont( "lazy.ttf", 18 );
>     18
>     19     if( font == NULL )
>     20     {
>     21        printf("Error loading font:  %s\n", SDL_GetError());
>     22        return false;
>     23     }
>     24     SDL_WM_SetCaption( "OurRPG - Battle Screen", NULL );
>     25     screen =  SDL_SetVideoMode(1000, 675, 16, SDL_DOUBLEBUF |
> SDL_HWSURFACE);
>     26     if (screen == NULL)
>     27     {
>     28        printf("Unable to set video mode:  %s\n", SDL_GetError());
>     29        return false;
>     30     }
>     31
>     32     for (int i = 0; i < 4; i++)
>     33     {
>     34        status[i] = NULL;
>     35        party[i].setX(600);
>     36        party[i].setY(i * 100);
>     37
>     38     }
>     39
>     40     return true;
>     41  }
>     42
>     43  bool DrawBattle::destroy()
>     44  {
>     45     if (screen != NULL) SDL_FreeSurface(screen);
>     46     if (font != NULL) TTF_CloseFont(font);
>     47     for (int i = 0; i < 4; i++)
>     48     {
>     49        SDL_FreeSurface(image[i]);
>     50        SDL_FreeSurface(status[i]);
>     51     }
>     52  }
>     53  SDL_Surface* DrawBattle::drawString(int x, int y, string
> dsMessage)
>     54  {
>     55     SDL_Surface *message;
>     56     SDL_Color textColor = { 255, 255, 255 };
>     57     message = TTF_RenderText_Solid( font, dsMessage.c_str(),
> textColor );
>     58
>     59     if( message == NULL )
>     60     {
>     61        printf("Error rendering text:  %s\n", SDL_GetError());
>     62        return NULL;
>     63     }
>     64
>     65     SDL_Rect dest1, src1;
>     66     src1.x = 0;
>     67     src1.y = 0;
>     68     src1.w = message->w;
>     69     src1.h = message->h;
>     70     dest1.x = x;
>     71     dest1.y = y;
>     72     dest1.w = message->w;
>     73     dest1.h = message->h;
>     74
>     75     SDL_BlitSurface(message, &src1, screen, &dest1);
>     76
>     77     return message;
>     78  }
>     79  void DrawBattle::drawLines()
>     80  {
>     81     /*Draw the battle screen lines*/
>     82     i = hlineColor(screen, 0, 1000, 0, 0xFFFFFFFF);
>     83     i = vlineColor(screen, 0, 0, 400, 0xFFFFFFFF);
>     84     i = hlineColor(screen, 0, 1000, 400, 0xFFFFFFFF);
>     85     i = vlineColor(screen, 700, 0, 400, 0xFFFFFFFF);
>     86     i = hlineColor(screen, 700, 1000, 0, 0xFFFFFFFF);
>     87     i = hlineColor(screen, 700, 1000, 100, 0xFFFFFFFF);
>     88     i = hlineColor(screen, 700, 1000, 200, 0xFFFFFFFF);
>     89     i = hlineColor(screen, 700, 1000, 300, 0xFFFFFFFF);
>     90     i = vlineColor(screen, 1000, 0, 400, 0xFFFFFFFF);
>     91
>     92     SDL_UpdateRect(screen, 0, 0, 0, 0);
>     93  }
>     94  void DrawBattle::drawStats()
>     95  {
>     96     char tmp[255];
>     97     for (i = 0; i < 4; i++)
>     98     {
>     99        status[i] = drawString((party[i].getX() + 110),
> (party[i].getY() + 10), party[i].getName());
>    100
>    101        sprintf(tmp, "HP: %ld/%ld", party[i].getCurrentHP(),
> party[i].getMaxHP());
>    102        status[i] = drawString((party[i].getX() + 110),
> (party[i].getY() + 50), tmp);
>    103
>    104        sprintf(tmp, "MP: %ld/%ld", party[i].getCurrentMP(),
> party[i].getMaxMP());
>    105        status[i] = drawString((party[i].getX() + 110),
> (party[i].getY() + 70), tmp);
>    106     }
>    107
>    108  }
>    109  void DrawBattle::loadImage(int index, string filename)
>    110  {
>    111     image[index] = IMG_Load(filename.c_str());
>    112     if (image[index] == NULL)
>    113     {
>    114        printf("Unable to load image %s:  %s\n", filename,
> SDL_GetError());
>    115     }
>    116
>    117     colorkey = SDL_MapRGB(image[index]->format, 0, 255, 0);
>    118     SDL_SetColorKey(image[index], SDL_SRCCOLORKEY, colorkey);
>    119
>    120     src[index].x = 0;
>    121     src[index].y = 0;
>    122     src[index].w = image[index]->w;
>    123     src[index].h = image[index]->h;
>    124
>    125     dest[index].x = 600;
>    126     dest[index].y = index * 100;
>    127     dest[index].w = image[index]->w;
>    128     dest[index].h = image[index]->h;
>    129  }
>    130
>    131  void DrawBattle::drawScreen()
>    132  {
>    133
>    134     //Draw allies
>    135     for (i = 0; i < 4; i++)
>    136     {
>    137        SDL_BlitSurface(image[i], &src[i], screen, &dest[i]);
>    138     }
>    139
>    140     //Draw enemies
>    141
>    142     drawStats();
>    143
>    144     /*Draw the battle screen lines*/
>    145     drawLines();
>    146     SDL_Flip(screen);
>    147  }
>    148
>    149  DrawBattle::DrawBattle(Battle *ba)
>    150  {
>    151     b = ba;
>    152  }
>    153  DrawBattle::~DrawBattle()
>    154  {
>    155     delete b;
>    156  }
>
> [EMAIL PROTECTED] ourrpg $ make
> g++ `sdl-config --cflags` -I/usr/local/include/mysql++/
> -I/usr/include/mysql -L/usr/local/lib -c battle.cpp
> battle.h:26: error: field 'db' has incomplete type
> battle.cpp: In member function 'bool Battle::initialize()':
> battle.cpp:30: error: 'db' was not declared in this scope
> make: *** [battle.o] Error 1
>
> Why does db have an incomplete type, and why was db "not declared in
> this scope"?
>
>
>
> To unsubscribe, send a blank message to <mailto:[EMAIL PROTECTED]>.
> Yahoo! Groups Links
>
>
>
>



-- 
------------------------------------------------------------
"In the rhythm of music a secret is hidden;
    If I were to divulge it, it would overturn the world."
               -- Jelaleddin Rumi

Reply via email to