guten tag

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobbleboy

Betreff: guten tag

BeitragFr, Dez 25, 2009 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
frohe wheinachten!
seit einigen tagen bastel ich mit einem freund an einem zombie shooter in 2d.
ich habe viel durch euch gelernt und würde mich nun sehr freuen wenn ihr vielleicht eine blick über den bisherigen code wirft, da ich die vermutung habe, das sich einige fehler verstecken, die mir noch nicht bekannt sind.

die cpu auslastung ist bei mir (dua core) etwa 60%. ich frage mich nun ob das viel oder wenig ist...
die map.bmp ist eine art labyrinth (zum testen schnell mit paint gemalt).
bob2.bmp ist etwa 20*20 pixel groß.
hier kommt der code:

Code: [AUSKLAPPEN]
AppTitle = "2d shooter"
;___________Einstellungen
grax= 1000
gray= 700
timer = CreateTimer(60)
Graphics grax,gray,0,2
SetBuffer BackBuffer()
;___________bilder und sounds laden
bild1 = LoadImage ("bob2.bmp")
map = LoadImage ("map.bmp")
MidHandle map
;___________bild drehen
Dim menschturn(72)

TFormFilter 0

x#=100
y#=100
For Winkel# = 0 To 72
      menschturn(Winkel#)=LoadImage("bob2.bmp")
      MidHandle menschturn(Winkel#)
      RotateImage menschturn(Winkel#),Winkel#*5
      MaskImage menschturn(Winkel#),0,0,0
   DrawImage menschturn(winkel#) , 100 , 100
;Delay 100
Flip
Print"loading images"
Next


;Dim zombieturn(36)

;TFormFilter 0

;x#=100
;y#=100
;For Winkel# = 0 To 36
;      zombieturn(Winkel#)=LoadImage("zombiebob.bmp")
;      MidHandle zombieturn(Winkel#)
;      RotateImage zombieturn(Winkel#),Winkel#*10
;      MaskImage zombieturn(Winkel#),255,0,255
;   DrawImage zombieturn(winkel#) , 100 , 100
;Delay 100
;___________beim hauptmenu anfangen
Gosub singleplayer
Gosub hauptmenu
;___________Hauptmenu
.hauptmenu
While Not KeyDown(1)
   ClsColor 100,230,200
   Color 1,1,1
   Cls
   Locate 0.5*grax , 0.3*gray
   Print "-H A U P T M E N Ü-"
   Print"-drücke Enter um den singleplayer zu starten"
   Print "-drücke ESC um zu beenden-"
   Flip
      If KeyHit(28)
         Gosub singleplayer
      End If
   Delay 10
Wend
End
;___________singleplayer
.singleplayer
a.player=New player
a\x = 0
a\y = 110
a\xalt = a\x
a\yalt = a\y
a\bild = bild1
While Not KeyDown(1)
   Gosub kollision
   mapx = grax - a\x
   mapy = gray - a\y
   ClsColor 1,10,100
   Cls
   DrawImage map, mapx, mapy
   Gosub shoot
   Gosub movement
   Gosub sicht
   Gosub gegner
   Color 230,100,50
   Print "drücke p um zum hauptmenü zu gelangen"
   Flip
   WaitTimer timer
Wend
Gosub hauptmenu
;___________Klassen
Type player
Field name$
Field x
Field y
Field xalt
Field yalt
Field bild
Field s#
End Type

Type shell
Field x
Field y
Field dam
Field Coulor
End Type

Type gegner
Field x
Field y
Field bild
Field s#
End Type
;___________Movement
.movement
   a\xalt =xa
   a\yalt =ya
   xa = a\x
   ya = a\y
   a\s = 2
   If KeyDown(200) Or KeyDown(17) If KeyDown(203) Or KeyDown(30)
   a\s=a\s/Sqr(2)
   Print a\s
   End If
   
   If KeyDown(208) Or KeyDown(31) If KeyDown(205) Or KeyDown(32)
   a\s=a\s/Sqr(2)
   Print a\s
   End If
   
   If KeyDown(200) Or KeyDown(17) If KeyDown(205) Or KeyDown(32)
   a\s=a\s/Sqr(2)
   Print a\s
   End If
   
   If KeyDown(208) Or KeyDown(31) If KeyDown(203) Or KeyDown(30)
   a\s=a\s/Sqr(2)
   Print a\s
   End If
   
   If KeyDown(200) Or KeyDown(17);nach oben
         a\y=a\y-a\s
   End If
   If KeyDown(208) Or KeyDown(31);nach unten
         a\y=a\y+a\s
   End If
   If KeyDown(203) Or KeyDown(30);nach links
         a\x=a\x-a\s
   End If
   If KeyDown(205) Or KeyDown(32);nach rechts
         a\x=a\x+a\s
   End If
Return
;___________sicht
.sicht
Winkel1 = ATan2(MouseY() - gray/2, MouseX() - grax/2)
w#=winkel1/5
If w <0
w=72+w
End If
Locate 1,1
Print w
DrawImage menschturn(w) ,grax/2,gray/2
rb = 20
rh = 20
rx = grax/2-rb/2
ry = gray/2-rh/2
Rect rx,ry,rb,rh,0
Return
;___________shoot
.shoot
If MouseHit(1)
Line grax/2 , gray/2 ,MouseX(),MouseY()
End If
;___________gegner
.gegner
Return
;___________Kollision
.kollision
If ImageRectCollide(map, mapx, mapy, Rect, rx,ry,rb,rh)
a\x = a\xalt
a\y = a\yalt
End If
Return
 

mDave

BeitragFr, Dez 25, 2009 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Flip 0

Sonst bringt der Timer nichts. Hallo.

Ansonsten noch einrücken, der Übersicht halber.
Eventuell noch die Variablen umbenennen, damit man von dem Namen schon auf deren Funktion schließen kann.

Und warum zur Hölle ist deine Auflösung 1000*700?
Mach da bitte 1024*768 raus Wink
  • Zuletzt bearbeitet von mDave am Fr, Dez 25, 2009 14:52, insgesamt 2-mal bearbeitet

Nicdel

BeitragFr, Dez 25, 2009 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und Code-Tags statt Zitat nehmen.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Bobbleboy

BeitragFr, Dez 25, 2009 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem einrücken hat nicht so recht funktioniert, aber im code selbst ist es eingerückt.
das mit flip 0 teste ich mal


edit:
OMG
ogasm face -> Shocked
von 60% auf 8 % ....
flip 0 rockt

mpmxyz

BeitragFr, Dez 25, 2009 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Bobbleboy,
1. Das ist eine viel zu hohe Auslastung für ein so simples Programm.
2. Sie kommt daher, dass du nach Flip keine 0 stehen hast. (VSync kostet verdammt viel Leistung.)
3. Rücke mit Tabulatoren ein, damit man einen besseren Überblick hat.
4. Gosub sollte nur zusammen mit Return verwendet werden, da es sonst keinen Sinn macht. (kein Unterprogramm-Aufruf)
5. Da du Gosub wie Goto benutzt, hast du Spaghetticode. (BB-Regel #1: Goto ist böse! Twisted Evil )
6. Schaue die bei Gelegenheit Funktionen an. (Function) Ein gutes Tutorial dazu ist gerade im Aufbau.
7. Nutze einen der 2 Codetags anstatt der Zitatbox. ("Code"/"BB"-Button)

Sonst fällt mir erst einmal nichts weiteres auf.
mfG
mpmxyz
P.S.: Noch viel Spaß mit BlitzBasic!
Edit: Ich bin heute mal wieder lahm...
 

Bobbleboy

BeitragFr, Dez 25, 2009 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
mpmxyz hat Folgendes geschrieben:
Hallo Bobbleboy,
1. Das ist eine viel zu hohe Auslastung für ein so simples Programm.
2. Sie kommt daher, dass du nach Flip keine 0 stehen hast. (VSync kostet verdammt viel Leistung.)
3. Rücke mit Tabulatoren ein, damit man einen besseren Überblick hat.
4. Gosub sollte nur zusammen mit Return verwendet werden, da es sonst keinen Sinn macht. (kein Unterprogramm-Aufruf)
5. Da du Gosub wie Goto benutzt, hast du Spaghetticode. (BB-Regel #1: Goto ist böse! Twisted Evil )
6. Schaue die bei Gelegenheit Funktionen an. (Function) Ein gutes Tutorial dazu ist gerade im Aufbau.
7. Nutze einen der 2 Codetags anstatt der Zitatbox. ("Code"/"BB"-Button)

Sonst fällt mir erst einmal nichts weiteres auf.
mfG
mpmxyz
P.S.: Noch viel Spaß mit BlitzBasic!
Edit: Ich bin heute mal wieder lahm...


goto habe ich gar nicht benutzt
das mit dem einrücen ist beim kopieren ins forum passiert, der code an sich ist eingerückt
flip 0 habe ich ja schon getestet und bn überwältigt, auch wenn man das fehlende v-sync sieht...

mpmxyz

BeitragFr, Dez 25, 2009 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Goto: Ich habe auch nichts anderes behauptet. Teilweise nutzt du auch Return.
Aber beim Menü und beim Hauptteil des Spieles sehe ich keines.
Stattdessen gehst du mit einem Gosub zurück. In dem Fall macht das Gosub nichts anderes als Goto.
Zu den anderen Sachen: Ich war etwas langsam gewesen...

Übrigens, du musst nicht den ganzen vorherigen Beitrag zitieren:
das durchschnittliche BBP-Mitglied sollte sich nämlich an den Inhalt des vorherigen Beitrags erinnern können. Smile

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

count-doku

BeitragFr, Dez 25, 2009 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

das man das fehlende VSync sieht ist klar.
Da muss du mit CreateTimer einen Timer einbauen.

Beispiel Code:
BlitzBasic: [AUSKLAPPEN]
Graphics 1024,786,32,2
SetBuffer BackBuffer()

Local timer=CreateTimer(60)
Local t,x,y
Repeat
Cls
If t=0
x=Rand(2,1022)
y=Rand(2,784)
t=100
Else
t=t-1
End If
Rect x,y,5,5,1
WaitTimer timer
Flip 0
Until KeyHit(1)



Mfg,
count-doku

Nicdel

BeitragFr, Dez 25, 2009 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Er hat einen Timer.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

count-doku

BeitragFr, Dez 25, 2009 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@Nicdel,
woher weißt du das?
Er sagt, dass das fehlende VSync auffällt also wird es flimmern Arrow Kein Timer.

Oder hab ich was übersehen?

EDIT:
Tut mir leid, habs überlesen.
Embarassed
  • Zuletzt bearbeitet von count-doku am Fr, Dez 25, 2009 15:51, insgesamt einmal bearbeitet
 

Bobbleboy

BeitragFr, Dez 25, 2009 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
5te zeile im code

M0rgenstern

BeitragFr, Dez 25, 2009 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
warum hast du ein delay im menü? Afaik macht der das programm unnötig langsam etc. ↲
Ansonsten: guck dir funktionen an und verzichte auf goto bzw. Gosub.↲↲
Lg m0rgenstern.

Eingeproggt

BeitragFr, Dez 25, 2009 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Und gleich die erste Zeile ist falsch. Zur korrekten Anwendung siehe: AppTitle
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

TimBo

BeitragFr, Dez 25, 2009 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ein no-go ist auch Delay.

Warum benutzt du denn Delay beim Vorberechnen der Bilder ? Wink

Wenn du Delay wegmachst, wird dein Spiel viel schneller geladen.

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Bobbleboy

BeitragSa, Dez 26, 2009 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
M0rgenstern hat Folgendes geschrieben:
warum hast du ein delay im menü? Afaik macht der das programm unnötig langsam etc. ↲
Ansonsten: guck dir funktionen an und verzichte auf goto bzw. Gosub.↲↲
Lg m0rgenstern.


wieso eigentlich?
schließlich wird das programm dadurch ja nicht allzu übersichtlicher.
ändern wurde es ja nicht allzu viel, abgesehen von jeweils 2wörtern pro sub...
die delays habe ich mitlerweile vernichtet und stat dessen timer eingebaut.

das hauptmenu abe ich nur überbrückt, um schnell ein paar tests durchzuführen. und ja das hauptmenü soll noch verbesert werden, ein freund wollte die grafiken übernehmen und desshalb habe ich erstmal nichts daran gemacht.

was ich jetzt noch gerne wissen würde, wäre ob es möglich ist mit relativ wenig codearbeit das spiel multiplayerfähig zu machen?
wäre es realistisch sowas in den wheinachts ferien hinzubekommen?

TimBo

BeitragSa, Dez 26, 2009 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
kommt drauf an . was es für ein Spiel ist und wie viel Zeit du da rein investieren willst.

Außerdem kommt es stark drauf an, ob du dynamisch programmiert hast oder bspw. immer Statische Arrays benutzt hast.

Die Netzwerkbefehle sind alle nicht schwer zu verstehen Wink

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Bobbleboy

BeitragSa, Dez 26, 2009 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt es weitere tutorials abgesehen von "robs bb kurs?" zum thema tcp?

TimBo

BeitragSa, Dez 26, 2009 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ich wüsste von keinem Tutorial.

Eigentlich ist das nichts weiter als

OpenTcpStream

WriteByte
WriteString
etc.

auslesen kannst du das dann mit
ReadByte
ReadString
etc

schau am besten noch in der Hilfe nach.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Starwar

BeitragSo, Dez 27, 2009 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Damit kommt man schon sehr weit:
http://blitzbasic.com/codearcs...?code=2263
http://blitzbasic.com/codearcs...?code=2261
MFG

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group