Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 21:54

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++]Problem strings

Discussion on [C++]Problem strings within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Question [C++]Problem strings

Hallo Leute,
ich habe ein kleines Problemchen. Ich bin gerade dabei mein kleines 2D Spielchen zu programmieren. Auf das Problem stoße ich beim Laden der Map/Karte. Ich möchte sie in 2 Teilen sozusagen laden. Der erste Teil ist der Hintergrund, den ich ohne Probleme laden kann, danach möchte ich Objekte (Truhen, Tühren etc.) laden. Dies habe ich so bewältigt, dass ich den Bildschirm in ein 10x10 Raster aufgeteilt habe sprich bei einer Auflösung von 800x600 ist ein Kästchen 60x80 Pixel groß. Soweit so gut. Ich belege nun einfach ein char Array von 100 mit Zahlen die für Objekte stehen (bisher: 0=Nichts, 1=Truhe, 2=Tür, 3=Schlüssel, 4=Geld, 5=Menübutton). Das ist auch alles gut so (verfeiner ich später vllt. noch ein wenig, aber vorerst reichts). Jetzt zu meinem eigentlichen Problem: Ich habe nun 2 Funktionen in einer Klasse, die eine tut im großen und ganzen, dass was ich beschrieben habe und die andere überprüft ganz simple die jeweilige Zahl im Map-Array und übergibt den Namen des zu ladenden Objektes in einem string den ich zum Laden konvertiere. Und nun hab ich das Problem, dass das jeweilige Bild nicht geladen wird! Laden, zeichnen etc. passiert mit Allegro. Hier der Code, vielleicht seht ihr was ich falsch gemacht habe...
Funktion zum übergeben des Namen:

PHP Code:
std::string MAP::check_object(char object,std::string object_name){    //überprüft die Objekt nummer und giebt den Namen des zu ladenen Objektes aus


    
switch(object){   // überprüfe nummer und gebe den richtigen Namen aus (falls 0=kein name)

    
case 0:  //nichts
        
object_name="nothing";
        break;

    case 
1:  //truhe

        
object_name="objchest.bmp";
        break;

    case 
2//tür

        
object_name="objdoor.bmp";
        break;

    case 
3//schlüssel

        
object_name="objkey.bmp";
        break;

    case 
4//geld

        
object_name="objmoney.bmp";
        break;

    case 
5//menübutton

        
object_name="objmenu.bmp";
        break;

    default:

        break;


    } 
//switch

       //gebe den namen zurück
    
return object_name;



}  
//function 
Hier der Problembereich( map_count ist einfach das jeweilige Kästchen vom Raster bzw. die Zahl des Kästchens):
PHP Code:
std::string object_name//name des Objektes  

    

   
for(int r=0;r<=100;r++){    //r=rundendurchlauf(map[100])

           
map_count=r;  //stellung im Raster der map
       

           
check_object(map[map_count],object_name);  //überprüfen welches Objekt
           
           
           
           
if(map[map_count]==0){break;} //falls kein Objekt vorhanden
  

           
else{

           
object=load_bitmap(object_name.c_str(),0);                   // lade bild des jeweiligen objectes

           



           
if(object==NULL){    //überprüfen ob das Object nicht geladen wurde

               
textprintf_ex(screen,font,400,300,makecol(255,255,255),0,"Error, can not load object!!!");
               break;
           } 
P.S: Er gibt wie gewollt den Error Text aus.

Mfg
MrSimonKeks is offline  
Old 05/08/2011, 16:18   #2
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Aiaiai... Du bist dir sicher, dass du die Programmierung soweit beherrscht, dass du ein Spiel programmieren willst? D: Sieht nämlich nicht so aus...

Wenn du den Rückgabewert über die Parameter der Funktion haben willst, solltest du mit Zeigern arbeiten, sonst funktioniert das nicht... Sollte wohl klar sein. Ansonsten machst du das eben konventionell so:
Code:
std::string MAP::check_object(char object)
{
    std::string ret;
    
    switch(object)
   {
    ...
    }

    return ret;
}

...

for(int r=0;r<=100;r++)
{
       std::string object_name = (this->)/(OBJECT.)/(OBJECT->)check_object(map[r]);
       ...
}
EDIT: Achtung Pseudocode
xNopex is offline  
Thanks
1 User
Old 05/08/2011, 17:50   #3
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Achja ich versteh was du meinst, und nein bin ich nicht aber kann ja trotzdem nicht schade ;D
MrSimonKeks is offline  
Old 05/08/2011, 22:26   #4
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Wenn man ein Funktionsargument für einen Rückgabewert verwenden möchte, dann sollte man Referenzen verwenden, Zeiger wären in diesem Fall fehl am Platz.
Code:
bool MAP::check_object(char object,std::string& object_name);
So könnte dann der Funktionsprototyp aussehen, ich empfehle bool als Rückgabewert, da du so einfach Signalisieren kannst ob deine Funktion erfolgreich war oder nicht.

Außerdem schreibst du sehr viel überflüssigen Code und missachtest grundlegende Regeln für les- und wartbaren Code, die Breaks in deinem if/else Clause machen, zumindest mit dem Vorhandenen Code keinen Sinn, man sollte allgemein möglichst auf break in Schleifen verzichten, es macht den Programmfluss einfach sehr unübersichtlich und verkompliziert die Dinge unnötig.
Über dein if/else Konstrukt verhinderst du ja schon das ein Bild geladen wird falls ein Feld kein Objekt enthalten soll.
Für Konstruktive kritik zeigst du allerdings viel zu wenig Quellcode, wir müssten schon mehr über deine Klasse wissen, aber nach dem was ich bisher gesehen habe solltest du dich ersteinmal aufs Lernen besinnen, ohne das richtige Handwerkszeug wird dir das mit deinem kleinen Spiel bald keinen Spaß mehr bereiten.
Es ist wichtig dass du Grundlegende Techniken der Programmierung verstehst, es reicht nicht nur den Befehlssatz einer Sprache zu kennen, man muss auch wissen wie man diesen möglichst geschickt anwendet, allerdings beherrscht du noch nichteinmal die wichtigsten Sprachkonstrukte von C++, darum kann ich es nur wiederholen, Du musst unbedingt mehr Lernen, wenn du wirklich etwas mit C++ anfangen möchtest.
Bot_interesierter is offline  
Thanks
1 User
Old 05/08/2011, 23:43   #5
 
MrSimonKeks's Avatar
 
elite*gold: 0
Join Date: Nov 2009
Posts: 116
Received Thanks: 13
Natürlich haste Recht mit dem was du schreibst, aber schau ich bin erst 14 Jahre jung und immer lernen macht auch keinen übermäßigen Spaß und in meinem Alter brauch ich keineswegs dies alles schon unbedingt lernen. Ich mache halt gerade das was mir am meisten Spaß macht. Wenn ich nach einer Woche wieder aufhöre mit einem Projekt, da ich keine Lust mehr darauf habe dann fang ich halt mit einem neuen Projekt an wozu ich mehr Lust habe. Auf diese Weise finde ich lernt man am schnellsten ganz Unterschiedliche Dinge, auch wenn man häufig das Projekt nicht fertigstellt. Aber schau ich tue halt das was mir gerade am meisten Spaß macht mit meinen Möglichkeiten. Darum geht es doch eigentlich, Spaß beim lernen zu haben und sich nicht durchzu quälen...
MfG
Ps: Ich werde es morgen mal mit den Referenzen ausprobieren.
MrSimonKeks is offline  
Old 05/09/2011, 11:27   #6
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,426
Received Thanks: 1,888
Quote:
Originally Posted by MrSimonKeks View Post
Natürlich haste Recht mit dem was du schreibst, aber schau ich bin erst 14 Jahre jung und immer lernen macht auch keinen übermäßigen Spaß und in meinem Alter brauch ich keineswegs dies alles schon unbedingt lernen. Ich mache halt gerade das was mir am meisten Spaß macht. Wenn ich nach einer Woche wieder aufhöre mit einem Projekt, da ich keine Lust mehr darauf habe dann fang ich halt mit einem neuen Projekt an wozu ich mehr Lust habe. Auf diese Weise finde ich lernt man am schnellsten ganz Unterschiedliche Dinge, auch wenn man häufig das Projekt nicht fertigstellt. Aber schau ich tue halt das was mir gerade am meisten Spaß macht mit meinen Möglichkeiten. Darum geht es doch eigentlich, Spaß beim lernen zu haben und sich nicht durchzu quälen...
MfG
Ps: Ich werde es morgen mal mit den Referenzen ausprobieren.
Viel spaß beim versagen.
MoepMeep is offline  
Old 05/09/2011, 15:52   #7
 
xNopex's Avatar
 
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
Quote:
Zeiger wären in diesem Fall fehl am Platz.
Nö. Referenzen verwenden intern auch Zeiger. Es sieht halt nur "besser" aus.

Quote:
void ChangeMyParam( std::string* param )
{
*param = "Cool!";
}

std::string str = "Mhm.";
ChangeMyParam( &str );

void ChangeMyParam( std::string& param )
{
param = "Cool!";
}

std::string str = "Mhm.";
ChangeMyParam( str );
Liefert beides das gleiche Ergebnis.
xNopex is offline  
Reply


Similar Threads Similar Threads
KTS some empty strings
06/14/2011 - Rappelz - 14 Replies
Hier für die spezialen nubs die das immer noch nicht kennen :) Weapon, Armor, Gloves, Boots, Belt, Earrings, Necklace!Look at the last 2 Numbers! 01 move speed+evasion 02 pdef 03 atk/cast speed 04 block def 05 acc/macc 06 crit power 07 mp rec
Bekannte Strings
11/20/2010 - S4 League Hacks, Bots, Cheats & Exploits - 69 Replies
Dar ich euch nicht mehr mit Updates des Trainers versorgen kann, dachte ich mir gebe ich euch meine Liste, mit den mir Bekannten Strings. Natürlich werden sie hier oder mal dar, in irgendwelchen Threads gepostet, aber das tut nichts zur sache. Fragen, nur per PM. ________________
No Rules Strings
10/07/2010 - S4 League - 3 Replies
Nach welchen Strings muss ich nochmal suchen, und zu was muss ich sie verändern um No Rules zu bekommen?
Richtig Strings tauchen?
09/08/2010 - S4 League - 16 Replies
Also wollte mal fragen ob es möglich ist zu wissen ob man Bestimmte Strings verwenden kann bei anderen, oder ob es glückssache ist. z.B. actor_default_hp_max="100.0" müsste man doch theoretisch mit allem austauschen können, was ein ="" hat oder? weil manchmal funktioniert es nicht z.B. kann man nicht power mit ray_maxdistance austauschen...
C# relationship between chars and strings
05/04/2008 - Conquer Online 2 - 2 Replies
I know that chars are wrappers around a string, but how would I declare an array able to change one of the characters in the string?



All times are GMT +2. The time now is 21:54.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.