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

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

1

23.03.2012, 18:16

[SFML 1.6] Shapes in Vector oder List

Hallo Spieleprogrammierer,

ich habe angefangen einen Tetris-Klon zu programmieren. Ich bin jetzt soweit das ein Block von oben ins Feld gerrendert wird und sich nach unten bewegt, mit der Links- und Rechtstaste kann man nach links und rechts steuern, mit der Obentaste kann man es rotieren lassen(gefällt mir zwar noch nicht so ganz aber vorerst noch nicht schlimm).

So zu meinem Problem, für ein Tetris braucht man ja mehre Blöcke die ich mit

C-/C++-Quelltext

1
sf::Shape
erstelle, jetzt weiß ich nur nicht wie und wo ich die Instanzen "speichern" soll um immer neue Blöcke erstellen zu können und trotzdem die alten Blöcke da lassen zu können wo sie sind. Ich hatte mir ja schon Gedanken gemacht, nur hängt's an der Umsetzung. Ich weiß aus dem Buch "C++ für Spieleprogrammierer" das man mit.

C-/C++-Quelltext

1
pZeiger = new Klasseninstanz



Eine Klasseninstanz an einen Zeiger übergeben kann, aber dadurch hab ich immer noch nicht mehrere Blöcke

Daher hab ich mir überlegt ob man vielleicht eine Klasseninstanz in einen Vector oder eine Verkettete Liste schreiben kann da die doch recht flexibel sind nur weiß ich jetzt eben nicht wie.
Wäre echt toll wenn mir da jemand helfen könnte :D.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

2

23.03.2012, 18:47

Willkommen im Forum.

Als erstes würd ich dir ein einfacheres Spielkonzept vorschlagen. Ein Moorhuhnklon hat sich als erstes Spiel bewährt.

Dafür bietet sich ein Vector mit der Größe(Höhe*Breite) an. Du Baust die Datenstruktur also wie ein Schacbrett auf(2d Array). So hast du direkten Zugriff auf jede Position und kannst leicht prüfen, ob der Stein liegen bleiben muss oder weiter fällt. Die Position berechnest du mit (y*Breite+x). ;)

Als Datentyp würd ich erstmal unsigned char nehmen. Darin könntest du 255 verschiedene Farben(+ einem Wert für leer) speichern. Das sollte eigentlich reichen.
"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?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (23.03.2012, 19:09)


storage

Treue Seele

Beiträge: 138

Wohnort: Bad Salzungen

  • Private Nachricht senden

3

23.03.2012, 20:09

Moorhohn ist nicht unbedingt einfacher als Tetris? Schließlich muss ich bei Moorhuhn animierte Sprites haben welche für einen ungeübten wohl eher Schwerer zu erstellen sind als ein Tetrie zu proggen.
Ist eventuell auch Ansichtssache.

Und warum ein char, er hat doch die SFML un diese bietet bei Shapes an die Farbe zu setzen mit sf::Color.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

4

23.03.2012, 20:13

Man kann ja auch einfach Zielscheiben nehmen...

Warum Char? Weil man auch leere Plätze haben können muss und noch mehr informationen speichern könnte ;)
"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?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

23.03.2012, 20:19

Für einen Anfänger wäre es aber sicherlich am einfachsten einfach alles in Objekte zu kapseln als mit irgendwelchen Werten zu hantieren. Er könnte sich auch aus irgendwelchen Bits und Bytes selbst was zusammenschustern. Ist aber an sich quatsch. Bei einem Tetris kommt es normal weniger auf Größe und Geschwindigkeit an und da kann man auch einfach alles in Objekte klatschen. Dann ist es schön übersichtlich und Dreat als vermutlich Neuling nicht überfordert.
„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.“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

6

23.03.2012, 20:22

Ich kam als Anfänger mit meiner Variante besser zurecht. Zum Glück kann er es selbst entscheiden :D
"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?

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

7

23.03.2012, 20:30

Als erstes würd ich dir ein einfacheres Spielkonzept vorschlagen. Ein Moorhuhnklon hat sich als erstes Spiel bewährt.
Hmm könnte ich auch mal versuchen stimmt.

Ich kann jetzt grade nur nicht ganz zuordnen zu was deine Tipps waren zu dem Moorhuhn oder Tetris sorry :D

Wie ich mehrere Klasseninstanzen von sf:: Shape erstelle ohne 1000 mal die gleichen Zeilen zu schreiben weiß ich aber immernoch nicht :S

Trotzdem danke für die schnelle Hilfe

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

8

23.03.2012, 20:33

Wenn du gerade anfängst, dass würde ich dir die SFML 2.0 empfehlen, diese beinhaltet einige tolle Funktionen, die in 1.6 noch nicht drin sind. ;) Zudem ist der Support für 1.6 schwindend.

Schleifen sagen dir was? Dann kannst du dir 1000 Zeilen sparen :D

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

23.03.2012, 20:34

Wurde doch jetzt einmal von Nacho Man und ein mal von mir erklärt wie du das machen kannst. Du erzeugst dir einen Vector und füllst diesen dann mit den Instanzen. Wenn du nicht weißt wie das geht dann kauf dir halt ein Buch und lern C++. Du scheinst ja nicht mal genau zu wissen was dein Problem ist und was du wissen willst. Das ist ein Zeichen dafür dass du zu wenig Grundwissen hast.
edit: Ich bin heute einfach zu langsam:D Ja und Schleifen sollten dir auch was sagen das ist richtig. Bzw du erstellst deine Blöcke ja nicht vor Spielbeginn sondern immer dann wenn sie neu ins Bild kommen. Hört sich aber alles danach an dass du dir ein Buch zu Gemüte führen solltest.
„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.“

Dreat

Frischling

  • »Dreat« ist der Autor dieses Themas

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

10

23.03.2012, 20:37

Schleifen sind mir durchaus bekannt :D

nur soll ich das dann so machen?

C-/C++-Quelltext

1
2
3
4
while(running)//events undso//Hier werden die Blöcke erstellt
for(int i; i < unendlich?; i++)
{ 
     sf::shape Block[i] //<- wenn das überhaupt geht bin mir da grade nicht sicher //Dann alle Punkte setzen für Block[i].AddPoint....usw



ich denke mal nicht das das sehr ressourcensparend ist oder? :D

Werbeanzeige