Fertig mit dem tutorial, und jetzt?/ "Großprojekt" (tut.at)

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
nervensaege
Beiträge: 31
Registriert: Sa Sep 12, 2009 9:31 pm

Fertig mit dem tutorial, und jetzt?/ "Großprojekt" (tut.at)

Beitrag von nervensaege » Fr Okt 02, 2009 11:58 am

Moin

ich hab mich inzwischen durch das tutorial von tutorials.at durchgearbeitet und bin auch der meinung das zumindest bis zu den zeigern relativ gut hinzbekommen. Meine frage ist jetzt wie macht man am besten weiter?
Prinzipiell möchte ich vorallem auch noch gerne was in die richtung GUI lernen aber von dem level bin ich wohl nochn stücken entfernt :D .
So nun zum "großprojekt" das im Betreff genant wurde.
um das tutorial nachzuvollziehen hab ich halt bei jeder sich ergebenden möglichkeit irgendwelche programme geschrieben.
Zum abschluss hab ich mich an etwas gewagt das zumindest für meine verhältnisse ein echtes großprojekt ist.
Das ganze soll ein rundenbasiertes spiel werden wo man sich einen palast zusammenbastelt ( da ich keine ahnung von gui hab leider alles auffer konsole)
erstens wollte ich dazu wissen wieviel sinn so ein Projekt überahupt hatt und dann wollte ich alles an anmerkungen was euch zum bisherigen code halt einfällt. :)

Code: Alles auswählen

#include <stdio.h>

int main()
{
    int i,bestaetiger,rundenanzahl,ressi[3],punktzahl,impro[6],rundenzeit,gold,stein,arbeiter;
    char spielername[20];
    double bauzeit;

    ressi[0] = 100;
    ressi[1] = 1000;
    ressi[2] = 10;
    ressi[3] = 0;

    for (i=0;i<7;i++)
    {
        impro[i] = 0;

    }


    printf("In diesem Spiel ist man ein Architekt\nder mit einem anderen um den Bau eines Palastes konkuriert.\nEine ausfuehrliche Beschreibung folgt spaeter.\n");

        for (i=0;i==0;i++)
        {

        printf("\nWie ist Euer Name? ");
        scanf("%s",&spielername);
        printf("\nIst Euer Name : %s?",spielername);

        printf("\nDruecke 0 fuer Nein und 1 fuer Ja\n");
        scanf("%d",&bestaetiger);
            switch (bestaetiger)
            {
                case 0: --i;

                case 1: break;
            }
        }

    printf("\nWieveile Runden wollt ihr spielen?: ");
    scanf("%d",&rundenanzahl);
    printf("\nIhr spielt %d Runden",rundenanzahl);

        for (i=0;i<rundenanzahl;i++)
        {

        printf("\n\nWas wollt ihr tun?");
        printf("\n0: Rohstoffe verwalten\n1: Palast ausbauen\n2: Steinbrueche ausbauen/verwalten\n3: Arbeiter einstellen\n4: Prestiege in Gold umwandeln\n");
        scanf("%d",&bestaetiger);
        switch (bestaetiger)
        {
           case 0: printf("\nGold: %d\nSteine: %d\nArbeiter: %d\nPrestige: %d\n", ressi[0], ressi[1], ressi[2], ressi[3]);
                    --i;
                    break;


           case 1: printf("\nIhr koennt folgende Gebauede Bauen:");
                    printf("\nAlee Stufe: %d ausbauen (0)\nGaerten Stufe: %d ausbauen(1)\nMauern Stufe: %d ausbauen (2)\nHaupthaus Stufe: %d ausbauen (3)\nWohnfluegel Stufe %d ausbauen (4)\nPrunkfluegel Stufe %d ausbauen (5)", impro[0], impro[1], impro[2], impro[3], impro[4], impro[5]);
                    printf("\nWas wollt ihr bauen? ");
                    scanf("%d",&bestaetiger);

                        switch (bestaetiger)
                        {
                            case 0:printf("\nIhr baut die Alee auf Stufe %d aus",impro[0] + 1);

                            gold = 10;
                            stein = 200;
                            gold*=(2*(impro[0] + 1));
                            stein*=(3*(impro[0] + 1));
                            printf("\nKosten: %d Gold %d Steine",gold,stein);

                            printf("\nWieviele Arbeiter sollen eingesetzt werden? ");
                            scanf("%d",arbeiter);

                            bauzeit = 10;
                            bauzeit=bauzeit*(2*(impro[0] + 1));
                            bauzeit=bauzeit/arbeiter+0.9;
                            rundenzeit=(int)bauzeit; /*hier liegt noch irgendwo ein böser Fehler*/


                            printf("\nBauzeit: %d",rundenzeit);
                            printf("\nbestaetigen ? 0 fuer nein 1 fuer ja");

                            scanf("%d",bestaetiger);

                            switch (bestaetiger)
                            {
                            case 0: --i;
                            break;

                            case 1: break;

                            } /*hier ist auch noch ein fehler, außerdem sollte man aus dem ganzen ding ne subroutine machen sonst schreibt man sich ja dämlich*/
                        }
                    break;


           default: printf("\nUngueltige Eingabe!");
                    --i;
                    break;

        }

        }

    printf("Das spiel ist zu ende Eure Punktzahl ist: %f",punktzahl);


    return 0;
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fertig mit dem tutorial, und jetzt?/ "Großprojekt"

Beitrag von Xin » Fr Okt 02, 2009 12:23 pm

nervensaege hat geschrieben:Moin

ich hab mich inzwischen durch das tutorial von tutorials.at durchgearbeitet und bin auch der meinung das zumindest bis zu den zeigern relativ gut hinzbekommen. Meine frage ist jetzt wie macht man am besten weiter?
Ich kenne das Tutorial von tut.at nicht sonderlich gut, von daher wäre erstmal interessant nachzuvollziehen, was Du inzwischen kannst.

Ich versuche das also aus deinem Sourcecode herauszulesen, also in der Art, wie Du derzeit programmierst.
nervensaege hat geschrieben:Prinzipiell möchte ich vorallem auch noch gerne was in die richtung GUI lernen aber von dem level bin ich wohl nochn stücken entfernt :D .
So nun zum "großprojekt" das im Betreff genant wurde.
Wie weit Du von GUIs entfernt bist, ist abhängig davon, wieviel Wissen Du in dem geposteten Code nicht angewandt hast.
Ich sehe in dem Code einige Dinge nicht, die noch zum grundlegenden Wissen gehören, damit man sich als Entwickler frei bewegen kann. Allerdings weiß ich nicht, ob Du diese Dinge noch nicht gelernt hast, oder ob Du sie in dem Code einfach nicht verwendet hast.

Der Sourcecode, den Du hier zeigst, ist noch recht einfach aufgebaut. Dir scheint es switch angetan zu haben - aber das ist auch nicht ganz verkehrt. ;-)
nervensaege hat geschrieben:Das ganze soll ein rundenbasiertes spiel werden wo man sich einen palast zusammenbastelt ( da ich keine ahnung von gui hab leider alles auffer konsole)
erstens wollte ich dazu wissen wieviel sinn so ein Projekt überahupt hatt und dann wollte ich alles an anmerkungen was euch zum bisherigen code halt einfällt. :)
Ich kenne das Konzept Deines Spiels nicht, von daher kann ich Dir auch nicht sagen wieviel Sinn das Programm hätte. Du steckst jetzt in der Anfangszeit, wo Du lernen musst, Deinen Quelltext zu organisieren und eben auch Kontakt mit der Außenwelt aufzunehmen. Bisher bist Du auf die Konsole beschränkt, nun wäre es an der Zeit, sich neue Wege zu suchen, mit der Außenwelt zu kommunizieren. Das können GUIs sein, das können aber auch Dateien sein.

Was mir in Deinem Quelltext auffällt ist, dass Dein Programm nur eine Struktur hat: nämlich die, die Deine Variablen vorgeben. Die sind aber vollkommen unstrukturiert. i und bestaetiger haben vermutlich ganz andere Hintergründe als gold, stein und arbeiter. Trotzdem stehen sie im gleichem Kontext als lokale Variable der Funktion main().
Schau Dir dafür mal etwas über Strukturen an, falls Du das noch nicht getan hast.

Wenn Du mit Arrays gut klar kommst, würde ich mir Dateien mal vornehmen, dort kannst Du Dich mit fopen() und fread auseinandersetzen.
Ich hoffe, Du hast gelernt Speicher anzufordern: malloc(), free().

Wenn Du diese Themen durch hast, würde ich sagen, ist der Weg frei für Neues, wie eine GUI.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nervensaege
Beiträge: 31
Registriert: Sa Sep 12, 2009 9:31 pm

Re: Fertig mit dem tutorial, und jetzt?/ "Großprojekt" (tut.at)

Beitrag von nervensaege » Fr Okt 02, 2009 4:23 pm

erstmal vielen dank für die schnelle und umfangreiche antwort.
was struct angeht ich bin jetzt schon am umschreieben des codes ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Fertig mit dem tutorial, und jetzt?/ "Großprojekt" (tut.at)

Beitrag von Xin » Fr Okt 02, 2009 4:44 pm

nervensaege hat geschrieben:auch wenn die frage jetzt dumm sein mag
wozu sind malloc und free nötig/gut?
Es gibt keine dummen Fragen, ich kann von einem Anfänger schließlich keine Fragen über höhere Softwaretechnik erwarten. Und mit dem Wissen steigen ja auch erst die Möglichkeiten.

Unter Softwaretechnik versteht man die Techniken, Software aufzubauen, zu organisieren und herzustellen.
Du strukturierst Deine Daten soeben, das bedeutet, dass Du Deine Programme nicht mehr auf ein Chaos von Variablen loslässt, sondern sie bearbeiten strukturierte Daten. Eine Struktur enthält die Daten, die notwendig sind, um ein Problem/Status/Spielstand/Datensatz zu beschreiben. Dein Algorithmus bekommt nun diesen Datensatz und kann entsprechend den Satz überarbeiten.

Dabei spielt es für den Algorithmus keine Rolle mehr, wo die Struktur steht: Du kannst ihm einen Zeiger übergeben und damit beliebige Datensätze durch den Algorithmus schleusen.

Mit malloc() und free() kannst Du Dir nun Speicher mehrere Datensätze besorgen. In Deinem Spiel könnten das also mehrere Reiche sein, in einem Texteditor mehrere Texte, die jeweils mehrere Zeilen enthalten, in einem Webbrowser mehrere Tabs, die mehrere Frames enthalten, welche jeweils mehrere Grafiken enthalten. Für jeden einzelnen Datensatz gibt es eine entsprechende Datenstruktur, die man bei bedarf mit malloc() anfordern kann und mit free() wieder freigeben kann, wenn sie nicht weiter benötigt wird.

Malloc und Free brauchst Du dann, wenn Du Speicher benötigst, von dem Du beim Programmstart noch nicht weißt: Du weißt als Texteditor nicht, wie groß der zu ladene Text ist und wieviele Zeilen er hat; und als Browser weißt Du nicht, auf welche Website der User möchte. Also musst Du Dir nach dem Start den Speicher beschaffen, den Du für Deine Aufgabe benötigst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten