programm Sinnvoll?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

beni-homr

Betreff: programm Sinnvoll?

BeitragMo, Jul 07, 2008 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Hab vor ner woche mitm programmieren angefangen, als ich eigentlich für Klausuren hätte lernen müssen, und nicht nichts tun wollte^^
Dann jedoch ernsthaft spass dran bekommen, übermütig n Spiel angefangen habe zu programmieren, und es nun endlich geschafft die Übersicht zu verlieren Laughing
Kurz zur info, sollte ein sinnloses ballerspiel werden... Gegner kommen, ich mäh sie nieder, neue gegner kommen...
bis jetzt habe ich es aber zum testen so gelassen, das ich die gegner mit den taste Strg links alt und leertaste "beschwören" kann
Nun habe ich jedoch so viele felder eingebaut, das ich bezweifle, das ich die übersicht je wiedererlangen werde ^^
Ob vllt jemand so nett wäre mir zu sagen, was er von meinem code hält, und was für eine konsequenz ich ziehen sollte, wäre ich sehr dankbar... Wenns verbesserungen gibt noch besser^^
Momentane probleme sind,
- wenn die Gegnerischen ninja sterne werfen, löscht der 2te den ersten usw...
- die Sterne der Ninja "verfolgen" mich in begrenztem maße
Beide Probleme habe ich bei meinen eigenen Schüssen schon gelöst... aber nu komme ich net weiter

Aber vllt ersteinmal der code...
Code: [AUSKLAPPEN]


Graphics 1280,1024,16,1
SetBuffer BackBuffer()
Charr = LoadImage("Charr.jpg")
Bullet = LoadImage("Kugel.jpg")
PKreuz = LoadImage("PKreuz.jpg")
BBear = LoadImage("Gegner1.jpg")
AAxe = LoadImage("Gegner2.jpg")
NNinja = LoadImage("Ninja.jpg")
Ninjastern = LoadImage("Ninjastern.jpg")
MoveMouse 320,240

;Ich
Dim Char(1,5)
char(1,0)=1
xcharr = 300
ycharr = 400

;Steuerung
;---> Geschosse
Dim Kugel(20,2)
Dim Kurtx(20,2)
Dim Kurty(20,2)
Dim K#(20,2)


Dim Stern(20,20,2)
Dim Sternx(20,1)
Dim Sterny(20,1)
Dim G#(20,2)
Dim Wurf(20,1)
Dim merke2(20,2)
Dim Zeit(20)

;---->Gegner
Dim howx(20,1)
Dim howy(20,1)
Dim U#(20,1)
Dim axex(20,1)
Dim axey(20,1)
Dim K#(20,1)
Dim Ninjax(20,1)
Dim Ninjay(20,1)
Dim T#(20,1)
;Gegner
Dim Bear(20,3)
Dim Axe(20,3)
Dim Ninja(20,3)
;Hauptschleife<-----------------------------------------------------------------------------------
Repeat
Cls
If char(1,0) = 1 Then
DrawImage charr, xcharr , ycharr
EndIf

; Spieler bewegung
If KeyDown (17) = 1 Then ycharr= ycharr - 6
If KeyDown (31) = 1 Then ycharr= ycharr + 6 
If KeyDown (30) = 1 Then xcharr = xcharr - 6
If KeyDown (32) = 1 Then xcharr = xcharr + 6

;Rand einrichten
If Xcharr < 0 Then xcharr = 0
If xcharr > 1250 Then Xcharr = 1250
If Ycharr < 0 Then Ycharr = 0
If Ycharr > 980 Then Ycharr = 980

; Maus abfragen
xMouse = MouseX() -15
yMouse = MouseY() -15

;schüsse abfeuern
Feuern = GetMouse()

;Mausbestimmung beim feuern
If Feuern = 1 Then
xblub =  xMouse                 
yblub =  yMouse
EndIf

; Kugeln

If Feuern= 1  Then

Schuss = Schuss +1
If Schuss = 21 Then Schuss = 1
Kugel(Schuss,0)=1
Kugel(Schuss,1)= xcharr
Kugel(Schuss,2)= ycharr
EndIf

; Zielvorrichtung
If Feuern = 1 Then
Merke = merke +1
If merke = 21 Then merke = 1
Kurtx(merke,0) = xcharr - xblub
Kurty(merke,1) = ycharr - yblub
K#(merke,1) = 15 / ((Kurtx(merke,0)^2 +Kurty(merke,1)^2)^0.5)
EndIf

;Kugelbewegung
For I=1 To 20
 If Kugel(I,0) =1  Then
  DrawImage Bullet, Kugel(I,1), Kugel(I,2)
  Kugel(I,1) = Kugel(I,1) -  Kurtx(I,0) * K#(I,1) 
  Kugel(I,2) = Kugel(I,2) - Kurty(I,1) * K#(I,1) 
EndIf
Next

; Bear zählung
If KeyHit(57) = 1 Then
Zahl = Zahl +1
If zahl = 21 Then zahl = 1
Bear(Zahl,0) = 1
Bear(Zahl,1) = 100
Bear(Zahl,2) = 700
Bear(Zahl,3) = 800
EndIf

; Bear aufmalen und bewegen
For I = 1 To 20
If Bear(I,0) =1 Then
DrawImage BBear ,Bear(I,2), Bear(I,3)
Bear(I,2)= Bear(I,2) -  Howx(I,0) * U#(I,0)
Bear(I,3)= Bear(I,3) -  Howy(I,0) * U#(I,0)  ; Bears verschwinden bei berührung! Scheisse!!!
Howx(I,0)= Bear(I,2) - xcharr
Howy(I,0)= Bear(I,3) - ycharr
U#(I,0) = 2/ ((howx(I,0)^2 + howy(I,0)^2)^0.5)
EndIf
Next

;Kollisionsabfrage ich und Bears
For I = 1 To 20
If ImagesOverlap(Charr,xcharr, ycharr, BBear, Bear(I,2),Bear(I,3)) And Bear(I,0) = 1 Then
char(1,0) = 0
EndIf
Next

; Kollisionsabfrage Kugeln und Bears
For I = 1 To 20
For M = 1 To 20
If ImagesOverlap(Bullet,Kugel(M,1),Kugel(M,2),BBear,Bear(I,2), Bear(I,3)) And Kugel(M,0) = 1  And Bear(I,0) = 1 Then
Kugel(M,0) = 0   Bear(I,1) = Bear(I,1) - 50
If Bear(I,1) = 0 Then
Bear(I,0) = 0
EndIf
EndIf
Next
Next

; Axe zählung
If KeyHit(56) = 1 Then
Zahl2 = Zahl2 +1
If zahl2 = 21 Then zahl2 = 1
Axe(Zahl2,0) = 1
Axe(Zahl2,1) = 300
Axe(Zahl2,2) = 800
Axe(Zahl2,3) = 400
EndIf

;Axe aufmalen und bewegen

For I = 1 To 20
If Axe(I,0) =1 Then
DrawImage AAxe ,Axe(I,2), Axe(I,3)
Axe(I,2)= Axe(I,2) -  Axex(I,0) * K#(I,0)
Axe(I,3)= Axe(I,3) -  Axey(I,0) * K#(I,0)  ; Axe verschwinden bei berührung! Scheisse!!!
Axex(I,0)= Axe(I,2) - xcharr
Axey(I,0)= Axe(I,3) - ycharr
K#(I,0) = 2/ ((Axex(I,0)^2 + Axey(I,0)^2)^0.5)
EndIf
Next

;Kollisionsabfrage ich und Axe
For I = 1 To 20
If ImagesOverlap(Charr,xcharr, ycharr, AAxe, Axe(I,2),Axe(I,3)) And Axe(I,0) = 1 Then
char(1,0) = 0
EndIf
Next

; Kollisionsabfrage Kugeln und Axe
For I = 1 To 20
For M = 1 To 20
If ImagesOverlap(Bullet,Kugel(M,1),Kugel(M,2),AAxe,Axe(I,2), Axe(I,3)) And Kugel(M,0) = 1  And Axe(I,0) = 1 Then
Kugel(M,0) = 0   Axe(I,1) = Axe(I,1) - 50
If Axe(I,1) = 0 Then
Axe(I,0) = 0
EndIf
EndIf
Next
Next


;zählung von ninja
If KeyHit(29) = 1 Then
Zahl3 = Zahl3 +1
If zahl2 = 21 Then zahl3 = 1
Ninja(Zahl3,0) = 1
Ninja(Zahl3,1) = 300
Ninja(Zahl3,2) = 800
Ninja(Zahl3,3) = 400
EndIf

;Ninja aufmalen und bewegen

For I = 1 To 20
O# = 2
If ((Ninjax(I,0)^2 + Ninjay(I,0)^2)^0.5) <  300 Then O# = 0
If Ninja(I,0) =1 Then
DrawImage NNinja ,Ninja(I,2), Ninja(I,3)
Ninja(I,2)= Ninja(I,2) -  Ninjax(I,0) * T#(I,0)
Ninja(I,3)= Ninja(I,3) -  Ninjay(I,0) * T#(I,0)  ; Ninja verschwinden bei berührung! Scheisse!!!
Ninjax(I,0)= Ninja(I,2) - xcharr
Ninjay(I,0)= Ninja(I,3) - ycharr
T#(I,0) = O#/ ((Ninjax(I,0)^2 + Ninjay(I,0)^2)^0.5)

EndIf
Next

;Kollisionsabfrage ich und Ninja
For I = 1 To 20
If ImagesOverlap(Charr,xcharr, ycharr, NNinja, Ninja(I,2),Ninja(I,3)) And Ninja(I,0) = 1 Then
char(1,0) = 0
EndIf
Next

;Kollisionsabfrage Kugeln und Ninja
For I = 1 To 20
For M = 1 To 20
If ImagesOverlap(Bullet,Kugel(M,1),Kugel(M,2),NNinja,Ninja(I,2), Ninja(I,3)) And Kugel(M,0) = 1  And Ninja(I,0) = 1 Then
Kugel(M,0) = 0   Ninja(I,1) = Ninja(I,1) - 50
If Ninja(I,1) = 0 Then
Ninja(I,0) = 0
EndIf
EndIf
Next
Next

; Ninjasterne Werfen...
                                ; Probleme sind: - Die Sterne verfolgen mich noch!
                                ;                - Wird ein neuer Stern geschaffen wird der alte vernichtet!
                       

For I = 1 To 20
If  (Ninjax(I,0)^2 + Ninjay(I,0)^2)^0.5 >2 And  (Ninjax(I,0)^2 + Ninjay(I,0)^2)^0.5 < 350 And Ninja(I,2) <> 0 And MilliSecs() - Zeit(I) > 500 Then
Zeit(I) = MilliSecs()
Wurf(I,0) = Wurf(I,0) + 1
If Wurf(I,0) = 20 Then Wurf(I,0) = 1
Stern(I,Wurf(I,0),0) = 1
Stern(I,Wurf(I,0),1) = Ninja(I,2)
Stern(I,Wurf(I,0),2) = Ninja(I,3)
EndIf
Next
                                             
For I = 1 To 20
If Stern(I,Wurf(I,0),0) = 1 Then
merke2(I,0) = merke2(I,0) +1
If merke2(I,0) = 20 Then merke2(I,0) = 1
Sternx(I,0) = Ninja(I,2)- xcharr
Sterny(I,0) = Ninja(I,3) - ycharr
G#(merke2(I,0),1) = 15 / ((Sternx(I,0)^2 + (Sterny(I,0))^2)^0.5)
EndIf
Next

For I=1 To 20
 If Stern(I,Wurf(I,0),0) =1 And Ninja(I,0) = 1 Then
  DrawImage Ninjastern, Stern(I,Wurf(I,0),1), Stern(I,Wurf(I,0),2)
  Stern(I,Wurf(I,0),1) = Stern(I,Wurf(I,0),1) -  Sternx(I,0) * G#(merke2(I,0),1)
  Stern(I,Wurf(I,0),2) = Stern(I,Wurf(I,0),2) - Sterny(I,0) * G#(merke2(I,0),1)
EndIf
Next

; für die überlappung der bilder
DrawImage PKreuz, xMouse, yMouse

;Ende
Delay 10
Flip
Until KeyHit (1)

End

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragMo, Jul 07, 2008 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Heilige Scheiße!
Hast du schon mal was von Funktionen oder Types gehört? (Function Type)
Davon mal ganz abgesehen:
Warum zur Hölle benutzt du Delay?
Warum erstellst du so komische Dims wie Ninjay(20,1)?
Ninjay(20) würde es auch tun.
Wenn du schon mehrdimensionale Arrays beherrscht, warum machst du es dann nicht gleich richtig? (z.B.: NinjaPos(20, 1, 1)
Was erwartest du denn jetzt? Das jemand deinen Code (den du selbst(!) für unordentlich erklärst) auseinanderfitzt und dir die Lösung auf einem Silbertablett präsentiert?
Nee, also ..

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jul 08, 2008 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
pupilp deine Argumentation ist absolut anmaßend. Wenn beni-homr erst vor kurzem angefangen hat zu programmieren (eine Wochen halte ich hierbei für etwas sehr kurzfristig für diesen Code, außer dieser ist durch copy&paste endstanden), dann sollte man diesbezüglich etwas mehr Rücksicht nehmen. Ich will garnicht wissen wie du angefangen hast und was für welche Fragen du gestellt hast.

Nur so als Anmerkung: Was soll denn bitte an Ninjay(20,1) verkehrt sein? Vielleicht hast du es einfach nur vergessen, dass ein Array ab 0 beginnt, somit also eine 1 bereits zwei Speicherplätze besitzt. In diesem Fall von 0 bis 20 bei #,0 und nochmal von 0 bis 20 bei #,1 Evil or Very Mad

@beni-homr, ich habe leider nicht mehr so viel Zeit mehr heute, aber der Code an sich ist recht gut zusammengeschustert. Es fehlt allerdings an einer besser durchdachten Struktur vom ganzem. Soll heissen: Schüsse/Wurfsterne und andere Dinge von denen man nicht weiß wie viele es geben kann/soll, sollten mit Types gemacht werden. Types sind selbst organisierende Speicherlisten in ihrer Verwendung ersetzen sie oft mehrere Arrays. In deinem Fall könnte man eventuell die ganze untere Hälfte in nur einem Codeblock unterbringen.

Tipp: Kaum jemand wird sich ernsthaft fast 300 Zeilen Code durchsehen um Fehler zu finden. Vor allem dann nicht, wenn der Code ansich nicht selbstständig lauffähig ist. Wenn du uns zum Beispiel die LoadImage weg machst und alle DrawImage durch Rect, Oval, Line, Plot ersetzt, dann wird sich sicherlich eher jemand finden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

the FR3AK

BeitragDi, Jul 08, 2008 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich empfehle dir erstmal klein Anzufangen (Ping Pong Klon oder Sowas wie Pac Man Very Happy )
Und ich würde den Code Formatieren also Zeilen einrücken...so bekommt man wenigstens etwas übersicht im Code Wink

xaerox

BeitragDi, Jul 08, 2008 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde auch empfehlen klein anzufangen, um besser die grundlagen und besonders auch andere sachen richtig zu behärrschen...
übrigens, dass du im programmieren nicht steckenbleibst (OgottOgott, ich weiss nicht mehr was ich schreiben wollte) setze einfach mal mehr semikolone oder wie das heisst also das (Wink und dahinter kommentare, dass beschreib, was jetzt der nächste code machen soll und was genau und dann auch weclhe variable für was sind das...
Biker sind wahre Helden.
Auch Musiker.
 

beni-homr

BeitragMi, Jul 09, 2008 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,
Bin schon dabei mal n bissel ordnung reinzubringen^^
Ich dachte halt mit Functionen könne man sich NUR einzelne Werte zurückgeben lassen, nun habe ich festgestellt, dass natürlich auch das ganze Programm in solchen laufen kann...
Nun erstmal werde ich mich noch mit Types auseinandersetzen, von denen mir im Buch von Rene Meyer jedoch komischerweise abgeraten wird!
Erstmal mit was leichterem anfangen? hmm ja hab ich auch schon gedacht... mal schaun, wies sich in den nächsten tagen entwickelt..
Also danke, das ihr geantwortet habt...
Gruß Beni

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragDo, Jul 10, 2008 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss mich für meinen Post entschuldigen, ich hab das total falsch verstanden und dachte du sitzt schon eine Woche an diesem Code.
(Wer lesen kann ist klar im Vorteil, ich weiß.)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group