SantaBalls - Clone

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Ted1406

Betreff: SantaBalls - Clone

BeitragSa, Apr 24, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Aloha,

ich bin neu hier, und absoluter Beginner im Bereich BlitzBasic.

Um irgendwann einmal die 3D-Fähigkeiten dieser Programmiersprache nutzen zu können, dachte ich mir... ich fange mal mit den 2D-Funktionen an.

Also hab ich viel gelesen... bin etliche Tut's durch... und weiß erstmal dem Grunde nach worum es geht... Programmiererfahrungen aus dem Bereich VBA bringe ich mit... ebenfalls Kenntnisse in SQL, was mir allerdings für BlitzBasic wenig bringt... Smile

Ich dachte mir, bevor ich mir großartige Gedanken um ein eigenes Spiel mache, wersuche ich ein bestehendes Spiel zu klonen.

Opfer soll hier nun das Spiel 'SantaBalls 2' sein.

Das Spielbrett hab ich, die Kugeln (bei mir Sterne) hab ich... die xy-Positionen der 77 Felder hab ich (zweidimensionales Dim-Feld).

Wie bekomme ich es nun hin, dass die Sterne (es gibt zunächst 4 verschiedene Farben) zufällig auf das Spielfeld verteilt werden?

Danke.
Ted1406

regaa

BeitragSa, Apr 24, 2004 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
seedrnd millisecs()
pos_x=rnd(1,600)
pos_y=rnd(1,480)

oder wie auch immer, schau einfach in der Hilfe auf blitzbase.de unter Zufall nach.

Das sollte ein Gedankenstoss sein, also wenn du da nicht erkennst das der bereich von 1-640, und 1-480 gehen sollte, dann weiß ich auch nicht weiter Rolling Eyes .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
  • Zuletzt bearbeitet von regaa am So, Apr 25, 2004 12:01, insgesamt einmal bearbeitet
 

Ted1406

BeitragSo, Apr 25, 2004 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Aloha,

also... ohne den Code zu integrieren... erkennt mein ungeschultes Auge, dass dies nicht ganz zum Erfolg führen wird... diese Zeilen würden ja wie wild auf dem Screen meine Sterne verteilen... die Positionen sind mir jedoch schon bekannt... wie bereits erwähnt... Smile

Ted1406
 

graythread

BeitragSo, Apr 25, 2004 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann gibst du eben sowas in etwa ein?

seedrnd millisecs()
pos_x=rnd(0,77)
pos_y=rnd(0,77)

Und dann Multiplizierst du das Ergebnis mit der Breite/Länge eines jeden Feldes. Das Problem ist, ich weiß nicht genau, wie den Feld aussieht, Skizze wäre hilfreich.

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Gute frage

BeitragSo, Apr 25, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit den Sechseck-Formen ist glaub ich ziemlich schwer. zum beispiel müsste da ja jede zweite Zeile Verstzt werden und ich kenne jedenfalls kenne keinen Befehl, der angibt, ob eine Zahl gerade oder ungerade ist. Probier es besser erstmal mit Quadraten.

Was die Sterne betrifft, die solltest du erstmal alle definieren:

Code: [AUSKLAPPEN]
Dim Stern(30,30)


Dann gibst du jedem Stern seine Eigenschaften:

Code: [AUSKLAPPEN]
For Zeile = 1 to 30
For Spalte = 1 to 30
Stern(Zeile,Spalte) = Rand(1,4)
Next
Next


Das Rand(1,4) repräsentiert die Eigenschaft. Und vergiss
Code: [AUSKLAPPEN]
SeedRnd Millisecs()

nicht

Außerdem, sag mal, wie ist es eigentlich so auf Hawaii?
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

walski

Ehemaliger Admin

BeitragSo, Apr 25, 2004 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
1.
Zitat:

ich kenne jedenfalls kenne keinen Befehl, der angibt, ob eine Zahl gerade oder ungerade ist.


Code: [AUSKLAPPEN]

;returns 1 if a given number is even, 0 if it's not
Function Even(Number)
   If Number Mod 2 = 0 Then
      Return 0
   Else
      Return 1
   EndIf
End Function

;returns 1 if a given number is odd, 0 if it's not
Function Odd(Number)
   If Number Mod 2 = 0 Then
      Return 1
   Else
      Return 0
   EndIf
End Function



2.
Wieso so kompliziert?
Gib doch einfach jedem Stern einen zusätlichen Parameter (Im Array eine extra Dimension, wenn du Types nutzt eben ein extra Feld), der das Feld (dessen "ID") angibt.
Wenn du nun die Felder zeichnest prüfst du dabei gleich noch ob ein Stern die gleiche "ID" hat wie das jeweilige Feld und wenn ja, dann zeichest du den gleich mit.

walski
buh!
 

Ted1406

BeitragMo, Apr 26, 2004 7:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Aloha,

vorab... wie es auf Hawai ist, durfte ich bis heute leider nicht am eigenen Leibe erfahren... Smile

Ich bin begeistert davon, welche Resonanz einem Neuling in diesem Forum entgegengebracht wird... Danke dafür.

Wie ich lese, hat sich der eine oder andere tatsächlich die Mühe gemacht... und sich mal das 'Original' meines Klon-Versuches angesehen...

'graythread' bat um Skizzierung meiner Idee... das macht das Ganze wahrscheinlich wirklich einfacher für alle... also

Das hier ist der Stand meiner bisherigen Arbeit.

Das Spielbrett (einschließlich Kreise) ist Hintergrundgrafik... die Sterne (derzeit 4 verschiedene Farben) sind einzelne Grafiken.

Ich habe mich zunächst an den ersten Posts hier im Thread orientiert... und mich mit der zufälligen Auswahl und Verteilung der Sterne beschäftigt.

Hier mal der komplette Code... und nicht vergessen... ich übe noch... Smile

Code: [AUSKLAPPEN]

AppTitle "TedStars"
SetBuffer BackBuffer()
Graphics 800, 600, 16, 2
SeedRnd MilliSecs()

Brett = LoadImage ("Spielbrett.bmp")
Rot   = LoadImage ("SternRot.bmp")
Gelb  = LoadImage ("SternGelb.bmp")
Gruen  = LoadImage ("SternGruen.bmp")
Lila  = LoadImage ("SternLila.bmp")

MaskImage Rot,255,0,255
MaskImage Gelb,255,0,255
MaskImage Gruen,255,0,255
MaskImage Lila,255,0,255

DrawBlock Brett, 0, 0

pos_y=101
For felderneun = 1 To 5

   pos_x=254

   For feld = 1 To 9
   Sternzahl=Rnd(1,4)
   Select Sternzahl
   Case 1
      Stern = Rot
   Case 2
      Stern = Gelb
   Case 3
      Stern = Gruen
   Case 4
      Stern = Lila
   End Select

   DrawImage Stern, pos_x, pos_y
   pos_x = pos_x + 50
   Next
pos_y = pos_y + 88
Next

pos_y=145
For felderacht = 1 To 4

   pos_x=278

   For feld = 1 To 8
   Sternzahl=Rnd(1,4)
   Select Sternzahl
   Case 1
      Stern = Rot
   Case 2
      Stern = Gelb
   Case 3
      Stern = Gruen
   Case 4
      Stern = Lila
   End Select

   DrawImage Stern, pos_x, pos_y
   pos_x = pos_x + 50
   Next
pos_y = pos_y + 88
Next


Diese Lösung bringt zwar das gewünschte Ergebnis auf den Screen... nur kann ich damit in der weiteren Überlegung noch nichts anfangen, da das Programm ja nun immer noch nicht weiß, welcher Stern auf welchem Feld liegt... Sad

Also werde ich mich mit Arrays beschäftigen müssen... wahrscheinlich sogar mit Types...

Ich hatte versucht mich anhand dieses Beitrags zur orientieren... aber das ist mir noch eine Spur zu weit fortgeschritten... Sad

Ich verstehe dort die Verwendung des 2-dimensionalen Arrays für die xy-Positionen nicht... Sad

Ted1406

BladeRunner

Moderator

BeitragMo, Apr 26, 2004 8:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo....
und Willkommen hier bei uns auch von mir.
Wenn ich dich richtig Verstanden Habe, willst Du wissen wie Du speichern kannst in Welchem Feld der Karte welche Farbe vorliegt.
Deine Karte ist 9*9 Felder groß, daher machen wir ein ebensogroßes Dimfeld:
Code: [AUSKLAPPEN]
Dim Karte(8,8)
8 deswegen weil Dims bei null beginnen, Du hast jetzt also folgendes Feld im Rechner:
Zitat:

_ 0 1 2 3 4 5 6 7 8 <--erster Wert (=x) bei Karte(x,y)
0 <-- 2.er Wert(=y) bei Karte(x,y)
1
2
3
4
5
6
7
8

Du kannst jetzt also mit Karte(x,y) jedes deiner Felder erreichen, zB:
Zitat:

Karte(2,5) -->das ist das 3e Feld in der 6en Reihe.

Wenn du nun mit Rnd eine Farbe zuweist, sollte jede der Farben einen festen Codewert haben, zB rot=0, Blau=1, Grün=2, Gelb=3
Diesen Wert schreibst du in das entsprechende Feld:
Code: [AUSKLAPPEN]


for x=0 to 8
  for y=0 to 8
    Karte(x,y)=rnd(0,3)
  next
next

danach hat jedes der Felder zufällig eine Farbe erhalten, und diese ist zur weiteren Verwendung in deinem Dim "karte" gespeichert.

beim Zeichnen der Sterne musst du nur bei jedem Feld den Farbwert auslesen und einen passend gefärbten stern einzeichen. Et voila...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

graythread

BeitragMo, Apr 26, 2004 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ganz verstanden hab ich das jetzt nicht BladeRunner Wink

Aber auf jeden Fall muss sein Array 77 Felder groß sein (Immer wechselnd zwischen 9 und 8 pro Reihe).
Demnach ists wohl nicht ganz so einfach...

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Achja

BeitragMo, Apr 26, 2004 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja, Genau, Mod! gib den Rest an, ich hatte es gerade nicht im Kopf und was man nicht im Kopf hat, muss man in den Beinen haben Very Happy [/code]
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

BladeRunner

Moderator

BeitragMo, Apr 26, 2004 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
PSEUDO:
Code: [AUSKLAPPEN]

if (y and 1) then ;ist y ungerade ?
 ;position um ein halbes feld eingerückt
 ;und mal nur von x=0 bis x=7
else
 ;mal alle x-e ohne Einrückung
end if


Is doch so einfach, gray.... Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

HOT-BIT

Gast

BeitragMo, Apr 26, 2004 17:02
Antworten mit Zitat
Hi !

da ich ja auch so eine Art Iso bei meinem AKI habe, möchte ich meine Lösung bereit stellen.
Wer daraus nicht klug wird, braucht sich nicht zu ärgern. Ich kapier es auch nicht Smile

Code: [AUSKLAPPEN]
zaehler=0
x1=-1
For y=0 To 12
    For x=0 To 12
         x1=x1+1
         Read map(x,y)
         If map(x,y)=1 zaehler=zaehler+1
         hexi_x(x,y)=60+(x1 And 1)+(x*51)
         hexi_y(x,y)=60+y*21 
    Next
Next


Die Variable >zaehler< zählt mit, wieviele Felder gesetzt sind.
Hier gibt es ein Array mit 13X13 Feldern.


Toni

regaa

BeitragDi, Apr 27, 2004 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
HOT-BIT hat Folgendes geschrieben:

Code: [AUSKLAPPEN]

hexi_x(x,y)=60+(x1 And 1)+(x*51)



Das ist ja mal ne strange zeile, also echt, benutzt das hier wer regelmäßig? Oda ist das ne Noob Frage von mir? Laughing
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

HOT-BIT

Gast

BeitragDi, Apr 27, 2004 8:44
Antworten mit Zitat
Hallo !

löl

Nein, das wird nicht regelmäßig so gemacht.
Ist eine sehr spezifische Angelegenheit !

Dachte mir schon beim posten, daß wenig Antworten da drauf folgen werden Smile

Toni
 

Ted1406

BeitragDi, Apr 27, 2004 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So... nun hab ich mich also für's Dimensionieren entschieden... Types fallen wohl erst mal flach, das es ja um eine feste Größe von Sternen geht...

Code: [AUSKLAPPEN]

AppTitle "TedStars"
SetBuffer BackBuffer()
Graphics 800, 600, 16, 2
SeedRnd MilliSecs()

;Spielbrett laden und anzeigen
Brett = LoadImage ("Spielbrett.bmp")
DrawBlock Brett, 0, 0

;Sterne laden und transparente Farbe auf Pink setzen
Rot   = LoadImage ("SternRot.bmp")
Gelb  = LoadImage ("SternGelb.bmp")
Gruen  = LoadImage ("SternGruen.bmp")
Lila  = LoadImage ("SternLila.bmp")
MaskImage Rot,255,0,255
MaskImage Gelb,255,0,255
MaskImage Gruen,255,0,255
MaskImage Lila,255,0,255

;Spielfeld dimensionieren (77 Felder, x-Position in 0, y-Position in 1)
Dim Sternfeld (76,1)

;Startwerte
Stern = -1
PosX = 254
PosY = 101

;Sterne den 77 Spielfeldern zuordnen
For FeldZaehler = 0 To 76
Stern = Stern + 1
Sternfeld (Stern,0) = PosX
Sternfeld (Stern,1) = PosY
PosX = PosX + 50

   If PosX = 704 Then
      PosX = 278
      PosY = PosY + 44
   End If

    If PosX = 678 Then
      PosX = 254
      PosY = PosY + 44
   End If
Next


Nun muss ich nur noch die Farben den Feldern zuordnen.

Ist das bisher ungünstig gelöst?

Ted1406[/code]
 

HOT-BIT

Gast

BeitragDi, Apr 27, 2004 14:24
Antworten mit Zitat
JA

Mach es doch mit Types !
Hast ja viel mehr Möglichkeiten und ist echt easy !

Z.B:

Code: [AUSKLAPPEN]
Type SternFeld
  Field x,y,Farbe ; ........ 
End Type

;Startwerte
PosX = 254
PosY = 101

;Sterne den 77 Spielfeldern zuordnen
For FeldZaehler = 0 To 76
   star.SternFeld=New SternFeld
   star\x=PosX
   star\y=Posy
   star\Farbe= Rand(255) ; oder Bild oder aus Datei oder Data's auslesen 
;  star\irgendwas ......   
   PosX = PosX + 50
   If Posx=704 Posx=278 : Posy=Posy+44
   If Posx=678 Posx=254 : Posy=Posy+44
Next

For star.SternFeld=Each SternFeld
  ;DrawImage SternBild,star\x, star\y ;, star\Frame
  Oval star\x, star\y, 40, 40
Next

WaitKey



Hmmm, wobei ich voraussetze, daß du mit Types umgehen kannst !
Ansonsten ist es für einen Newbie doch besser, mal mit Array's zu üben. Man hat da für einen Anfänger leichteren Zugang zu den Variablen. Sprich Feldern.


Toni

soli

BeitragDi, Apr 27, 2004 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
So... nun hab ich mich also für's Dimensionieren entschieden... Types fallen wohl erst mal flach, das es ja um eine feste Größe von Sternen geht...


Endlich mal einer der Types richtig versteht.
solitaire

regaa

BeitragDi, Apr 27, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
HOT-BIT hat Folgendes geschrieben:
Hallo !

löl

Nein, das wird nicht regelmäßig so gemacht.
Ist eine sehr spezifische Angelegenheit !

Dachte mir schon beim posten, daß wenig Antworten da drauf folgen werden Smile

Toni

`
Phooo, ich hab gedacht mir ist echt was entgangen. Laughing
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group