Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.11.2012, 16:25

Bomberman_Problem

Challo,

ein Freund und ich versuchen uns gerade an einer sehr simplen Bomberman Version.
Wir möchten zurzeit erstmal schaffen, dass er sich richtig bewegen und eine Bombe legen kann. (Wir sind Anfänger)
Unser Problem:
Er kann sich nicht über die Bombe bewegen. Uns ist klar das die Bombe danach wieder verschwindet, darum wollen wir uns danach kümmern.

MFG Yubii und Pokemeister

Unser bisheriger Quellcode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
#include "Head.h"
#include <conio.h>
using namespace std;

void main()
{
    char Feld[24][79] = {
                            219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,
                            219,1,0,0,0,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,0,178,178,0,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,0,0,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,0,0,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,0,178,178,0,219,
                            219,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,0,0,0,2,219,
                            219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219
                            };

    char bew;

    bool gay=true;
    bool sete=true;
    bool set=true;
    bool bomb=false;
    int x=1,y=1,xx=22,yy=77;
    int px = 1,py = 1,pxx = 22,pyy = 77;
    while(gay)
    {
        if(set) 
                        {
                            if(bomb)
                            {
                                Feld[x][y] = 1;
                            }
                            else
                            {
                                Feld[px][py] = 0;
                                Feld[x][y] = 1;
                            }
                            bomb=false;
                        }
        //if(sete)
        //              {
        //                  Feld[pxx][pyy] = 0;
        //                  Feld[xx][yy] = 2;
        //              }
        if(sete||set)
            {
                for(int i =0;i<24;i++)
                {   
                    for(int j=0;j<79;j++)
                    {
                        cout<<Feld[i][j];
                    }
                    cout<<endl;
                }
                set=false;
                sete=false;
            }
        bew = getch();
        px=x;
        py=y;
        pxx=xx;
        pyy=yy;
        switch(bew)
        {
        case 'w': if(Feld[x-1][y] == 0 || Feld[x-1][y] == 224)
                  {
                    x-=1;
                    set=true;
                  }
            break;
        case 'a': if(Feld[x][y-1] == 0 || Feld[x][y-1] == 224)
                  {
                    y-=1;
                    set=true;
                  }
            break;
        case 's': if(Feld[x+1][y] == 0 || Feld[x+1][y] == 224)
                  {
                    x+=1;
                    set=true;
                  }
            break;
        case 'd': if(Feld[x][y+1] == 0 || Feld[x][y+1] == 224)
                  {
                    y+=1;
                    set=true;
                  }
            break;
        case ' ':   Feld[x][y] = 224;
                    bomb=true;
                  
            break;
        case 27: exit(1);
            break;
        //case 72: if(Feld[xx-1][yy] == 0)
        //        {
        //          xx-=1;
        //          sete=true;
        //        }
        //  break;
        //case 75: if(Feld[xx][yy-1] == 0)
        //        {
        //          yy-=1;
        //          sete=true;
        //        }
        //  break;
        //case 80: if(Feld[xx+1][yy] == 0)
        //        {
        //          xx+=1;
        //          sete=true;
        //        }
        //  break;
        //case 77: if(Feld[xx][yy+1] == 0)
        //        {
        //          yy+=1;
        //          sete=true;
        //        }
        //  break;
        }
        if(set||sete) system("cls");
    }
}

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

17.11.2012, 17:01

Habe wenig lust mich durch den Code zu lesen. Die Variablen sind schon übel benannt. "set", "sete", "gay" was soll man damit anfangen? Wofür sind diese Variablen. Auch bei kleinen Projekten musst du dir angewöhnen die Variablen gut zu benennen. Ich vermute mal ich weiß was euer Problem ist. Eure Map ist in dem Array abgespeichert. Ihr habt für ein freies Feld einen bestimmten Wert. Bei euch scheint das 224 zu sein. Wenn der Wert also 224 ist kann man sich auf das Feld bewegen. Das funktioniert für sehr einfache Spiele so. Wie ihr aber schon bemerkt habt, gibt es vielleicht verschiedene Arten von begehbaren Feldern. Ein Wert reicht also nicht aus. In einem Buch wurde es mal so gelöst, dass man festlegt, dass Werte bis zu einem bestimmten Wert begehbar sind. Also alle Zahlen von 0 bis 20 sind begehbare Flächen und alles was nicht begehbar ist bekommt einen größeren Wert. Ist aber sehr aufwendig und wenn man was anpassen will hat man viel zu tun. Was man machen kann, ist ein Dreidimensionales Array zu verwenden. Dann hast du quasi mehrere Schichten von deiner Karte. In der ersten Schicht werden Bodenflächen gespeichert. In der zweiten vielleicht Objekte, vielleicht sogar mehrere Schichten dafür und in der letzten könnten dann Daten für die Kollision gespeichert werden.
Viel besser wäre es aber, wenn du dir einen Typ Tile festlegst. Einfach eine Klasse, welche weiß, ob das Tile kollidiert oder nicht und halt alles andere weiß, was ein Tile bei euch wissen muss. Das was ihr jetzt über eure Zahlen löst, wird halt direkt dort rein geschrieben. Dann machst du dein Array einfach vom Typ dieser Tile-Klasse und kannst um einiges schöner damit arbeiten.
edit: Wenn man verschiedene begehbare Flächen hat, dann wird es schnell schwierig, wenn man in den Zellen der Karte Werte wie den Spieler etc schreibt. Besser ist es, wenn der Spieler extra gehandlet wird. Im Array sind also nur Werte die zur Map selbst gehören. Die Bomben und auch der Spieler werden extra gespeichert. Der Spieler kann doch selbst seine x und y Koordinaten kennen. So ersparst du dir viel arbeit, welche du hast, wenn der Spieler sich von einem Tile runterbewegt. Du musst dir vorher nicht merken, was für ein Tile es vorher war. Das müsstest du bei Bomben ja sonst auch machen und theoretisch für jedes Objekt was du ablegen willst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

3

17.11.2012, 23:30

Danke für deine Antwort :)

Das Ding ist es klappt ja eigentlich alles, aber bei den Abfragen
if(Feld[x-1][y] == 0 || Feld[x-1][y] == 224)
{
x-=1;
set=true;
}
müsste doch eigentlich auch über diese "Bomben" (Ó) laufen können oder nicht?

MFG Yubii und Pokemeister

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

17.11.2012, 23:41

Wenn du Ó meinst, wieso schreibst du dann nicht Ó ?

Mal wieder muss ich den Spielverderber spielen. :/
Ich finde das Bomberman-Spielprinzip ist nicht gerade einfach umzusetzen. Ich würde euch etwas einfacheres empfehlen. TicTacToe, einen Taschenrechner mit Zwischenablage und/oder einen Vokabeltrainer.
Wenn ihr genug geübt habt könnt ihr euch die SFML anschauen, einen Moorhuhnklon mit Zielscheiben oder ein Pong entwickeln. Danach sollte Bomberman wesentlich einfacher umzusetzen sein.

Deinen Code werd ich mir aus den selben Gründen wie Schorsch nicht ansehen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

17.11.2012, 23:59

Taschenrechner, oder Tic Tac Toe ist zu einfach :P

und ob ich Ó schreibe oder den Ascii Code ist doch egal oder nicht und wenn nicht wieso ?
:)

Okay also mit dem Zeichen einfach reinschreiben geht weiß zwar nicht wieso aber egal :D

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

6

18.11.2012, 10:12

Ein Taschenrechner ist zu einfach? Hm... mach mal den Windowsrechner auf und bau den nach. Mag einfach aussehen, aber um ihn "deppensicher" zu gestalten gehört doch mehr dazu als es anfangs scheint ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

18.11.2012, 11:54

Der Wert 224 kann in einem "char" nicht abgebildet werden, du solltest dein Spielfeld als "unsigned char" deklarieren dann stimmt die Abfrage:

C-/C++-Quelltext

1
2
unsigned char Feld[24][79] = {
  // ...


Ansonsten solltest du tatsächlich sprechende Variablennamen verwenden, ansonsten wird das Lesen von deinem Code ein extremer Krampf. Du hast ja bestimmt bemerkt, dass die Hilfsbereitschaft dadurch ziemlich minimal wird. Außerdem tust du dir selbst auch keinen Gefallen, mit solchen Bezeichnern. Was du dir nicht so zu Herzen nehmen musst, sind die ganzen demotivierenden Kommentare. Einfach dran bleiben und sehen ob du alle Hürden schaffst.
@D13_Dreinig

8

18.11.2012, 18:22

Alles klar, Danke David ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

18.11.2012, 20:21

Natürlich kannst du auch Asciicodes benutzen. Hast ja nun gesehen wie es richtig geht. Der Vorteil von den Charwerten direkt ist der, dass du genau siehst was du meinst. Wenn du die Zahl siehst, weißt du nicht direkt welches Zeichen gemeint ist. Dadurch wird alles unübersichtlicher. Übersicht ist extrem wichtig beim programmieren. Das wirst du mit der Zeit immer mehr erkennen. Je früher du das akzeptierst und dir angewöhnst, umso besser ist es.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

10

18.11.2012, 23:21

Generell machen wir das auch so Schorsch, aber wir dachten das vielleicht daran liegt das die If Abfrage nicht klappt und deswegen haben wir das mit dem ASCII Code probiert ;)

Werbeanzeige