• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++ Builder] przenoszenie dynamicznie utworzonych obiektów

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
643 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez GeraltZRivii Nowicjusz (120 p.)

Witam!

Próbuję zrobić grę karcianą podobną do gwinta z Wiedźmina 3. Wczytuje z plików dane o kartach i dynamicznie tworzę na ich podstawie karty w ręce. Dynamicznie tworzę również puste miejsca, w których można te karty umieścić. Niestety nie wiem jak zrobić przeciąganie i upuszczanie tak utworzonych obiektów.

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "gwint.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
using namespace std;
string intToStr(int n)
{
     string tmp, ret;
     if(n < 0) {
      ret = "-";
      n = -n;
     }
     do {
      tmp += n % 10 + 48;
      n -= n % 10;
     }
     while(n /= 10);
     for(int i = tmp.size()-1; i >= 0; i--)
      ret += tmp[i];
     return ret;
}
AnsiString stringtoAnsi(string s)
{
        AnsiString as;
        as = s.c_str();
        return as;
}

class karta
{    public:
   char gora_dol;
   int sila;
   int rzad;
   std::string nazwa;
   std::string opis;
   void wczytaj(const int numer)
   {
        char znak;
        int s,r;
        std::string nazwa1; std::string opis1;
        std::string nr;
        nr=intToStr(numer);
        nr=nr+".txt";
        ifstream plik;
        string R = nr;
        char * S = new char[R.length() + 1];
        std::strcpy(S,R.c_str());
        plik.open(S);

       // while(plik>>s>>r>>nazwa1>>opis1)
      // while(plik>>s>>r>>nazwa1>>opis1)
       while(plik>>s>>nazwa1>>opis1)
        {
            //gora_dol=znak;
            this->sila=s;
            //this->rzad=r;
            this->nazwa=nazwa1;
            opis=opis1;
        }
        plik.close();
   }
};

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        karta t;
        vector<karta> kolekcja;
       for(int i=0;i<5;i++)
       {///karty do przenoszenia
             t.wczytaj(i);
             kolekcja.push_back(t);
            TImage *card = new TImage (this);
            card->Parent=this;
            card->Width= 105;
             card->Height=133;
             card->Hint=stringtoAnsi(t.nazwa+"\n"+t.opis+"\nSila:"+intToStr(t.sila));
             card->Name="D_reka_"+i;
             card->ShowHint=true;
             card->HelpType=htContext;
             card->Enabled=true;

             card->Picture->LoadFromFile(stringtoAnsi("C:\\Obiektowo\\gwint\\"+(intToStr(i)+".bmp")));
             card->Top=640;
             card->Left=120+((i)*128);
             card->Visible=true;

             card->Cursor=crHandPoint;
             card->DragCursor=crDrag;

       }
       for(int i=0;i<5;i++)
       {
                  TEdit *r1_moc = new TEdit (this);
                  r1_moc->Parent=this;
                  r1_moc->Height=21;
                  r1_moc->Width=41;
                  r1_moc->Visible=true;
                  r1_moc->Top=755;
                  r1_moc->Left=180+((i)*128);
                  r1_moc->Color=clGreen;
                  r1_moc->ReadOnly=true;
                  r1_moc->Text=stringtoAnsi(intToStr(kolekcja[i].sila));
       }
       for(int i=0;i<10;i++)
       {///wolne miejsca do upuszczania kart(card)
                TImage *r1_wolne = new TImage (this);
                r1_wolne->Parent=this;
                r1_wolne->Width= 105;
                r1_wolne->Height=133;
                r1_wolne->Picture->LoadFromFile("C:\\Obiektowo\\gwint\\empty.bmp");
                r1_wolne->Top=400;
                r1_wolne->Left=100+(i*128);
       }
}

 

1
komentarz 3 kwietnia 2018 przez j23 Mędrzec (195,220 p.)
std::string nr;
...

string R = nr;
char * S = new char[R.length() + 1];
std::strcpy(S,R.c_str());
plik.open(S);

Muszę przyznać, że nieźle Ci to wyszło :P Nie prościej tak:

std::string nr; 
... 
plik.open(nr.c_str());

?

 

Użyłeś new, ale o delete[] zapomniałeś.

 

intToStr możesz prościej zaimplementować:

string intToStr(int n)
{
	std::ostringstream oss;

	oss << n;
	return oss.str();
}

 

To tak nawiasem...

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 870 wizyt
pytanie zadane 8 grudnia 2015 w C i C++ przez mikra25 Użytkownik (580 p.)
0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 16 września 2017 w Programowanie przez Qnk Nowicjusz (140 p.)
0 głosów
1 odpowiedź 346 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez qsoll Początkujący (440 p.)

93,103 zapytań

142,077 odpowiedzi

321,576 komentarzy

62,445 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...