"Schneefall"

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

>wie kann ich die geschwindigkeit von homer ändern?
indem du mehr addierst/subtrahierst wenn du eine Taste drückst
SchlaegerX + 1

>wie mach ich nen punkte-zähler?
Du erstellst eine Vartiable (Punkte) die dann bei jedem Treffer um 10 oder so erhört wird.
Der treffer ist hier:

Code: Alles auswählen

If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
  DeleteElement(Burger()) 
  Punkte + 10 ; hier könnte das stehen
  Continue 
 EndIf
>wie kann ich in den 32-Farben modus wechseln?einfach hier oben einstellen:
OpenScreen(640,480,DA >> 16 <<DA ,"Beispiel 7_1")
OpenScreen(640,480,32,"Beispiel 7_1")


mfg
frogsoup[/quote]
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
frogsoup
Beiträge: 13
Registriert: 26.04.2008 11:22

Beitrag von frogsoup »

hmm.also die farbe, geschwindigkeit hab ich hinbekommen.



mit dem zähler klappts nicht wirklich,... hab die Variable hingesetzt aber macht nen error, kannste mir das in meinen code einsetzen pls?

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"Beispiel 7_1")

Global SchlaegerX.w
Global SchlaegerY.w
Global BewegX.w
Global BewegY.w
Global Bild1X.w
Global Bild1Y.w
Global Bild2X.w
Global Bild2Y.w
Global Burger.w
Global Punkte.w


Structure Burger
 x.l
 y.l
EndStructure
Global NewList Burger.Burger()


BewegX = - 1
BewegY = - 1
SchlaegerX = 639 - 500
SchlaegerY = 330
Bild1Y = 0
Bild1X = 0
Bild2X = 0
Bild2Y = 0

LoadSprite(2,"burger.bmp",1)
TransparentSpriteColor(2,RGB(255,0,0))


LoadSprite(1,"Maces2.bmp",1)
TransparentSpriteColor(1,RGB(255,0,0))

LoadSprite(0,"homer_sabber2.bmp",0)
TransparentSpriteColor(0,RGB(255,255,255))



Repeat


ClearScreen(0)

DisplaySprite(1,testX,testY)
DisplaySprite(0,SchlaegerX,SchlaegerY)


ExamineKeyboard()
If KeyboardPushed(#PB_Key_Right)
If SchlaegerX < 640-120
 SchlaegerX + 7
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)

If SchlaegerX > 0
SchlaegerX - 7
EndIf
EndIf

If SchlaegerY < 60
 SchlaegerY = 20
ElseIf SchlaegerY > 460 - 30
 SchlaegerY = 460 - 30
EndIf

If KeyboardPushed(#PB_Key_A)
 testX + 1
EndIf
If KeyboardPushed(#PB_Key_S)
 testX - 1
EndIf

If testY < 60
 testY = 20
ElseIf testY > 460 - 30
 testY = 460 - 30
EndIf



Pause + 1
If Pause > 150
 Pause = 0
 AddElement(Burger())
 Burger()\x = testX+Random(600)
 Burger()\y = testY
EndIf


ForEach Burger()
 Burger()\y + 1
 If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60
  DeleteElement(Burger())
  Continue
 EndIf
 If Burger()\y > 480 ; Aus dem Bildschirm
  DeleteElement(Burger())
 EndIf
 DisplayTransparentSprite(2,Burger()\x,Burger()\y)
Next

FlipBuffers()

ExamineKeyboard()

Until KeyboardPushed(1)

vielen dank
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

also du änderst mal den Abschnitt:

Code: Alles auswählen

ForEach Burger() 
 Burger()\y + 1 
 If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
  DeleteElement(Burger())
  MeinePunkte + 10
  Continue 
 EndIf 
 If Burger()\y > 480 ; Aus dem Bildschirm 
  DeleteElement(Burger()) 
 EndIf 
 DisplayTransparentSprite(2,Burger()\x,Burger()\y) 
Next 
und vor dem FlipBuffers()
kommt die Anzeige:

Code: Alles auswählen

StartDrawing(ScreenOutput())
 DrawText(0,0,Str(MeinePunkte),RGB(255,255,255), RGB(0,0,0))
StopDrawing()
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
frogsoup
Beiträge: 13
Registriert: 26.04.2008 11:22

Beitrag von frogsoup »

oki-doki. scheint alles zu funktionieren!

VIELEN DANK, sagmal falls ich nachher noch ne frage hab, kann ich dich i-wie erreichen?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

ne sry ^^

klar:
ICQ: 268767877
email: hmmpgutt@aol.com
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
frogsoup
Beiträge: 13
Registriert: 26.04.2008 11:22

Beitrag von frogsoup »

da du mir in icq nicht schreibst, meld ich mich ncohmal hier ^^

also geht soweit alles, nur würde gerne einstellen, dass der punkte abzieht, wenn der unten neben dem homer landet, also aus dem bildschirm geht. wie mach ich das?
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

hi,

mir ist noch aufgefallen das der code abstürzt wenn ein burger unten aus dem bild fällt.
um das zu verhindern muss das DisplayTransparentSprite vor dem löschen des burgers ausgeführt werden, sonst folgt ein zugriff auf ein gelöschtes listenelement.

um punkte abzuziehen musst du nur beim burger aus dem bildschirm die punkte abziehen.

Code: Alles auswählen

ForEach Burger()
    Burger()\y + 1
    DisplayTransparentSprite(2,Burger()\x,Burger()\y)
    If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60
      DeleteElement(Burger())
      MeinePunkte + 10
    EndIf
    If Burger()\y > 480 ; Aus dem Bildschirm
      DeleteElement(Burger())
      MeinePunkte - 10
    EndIf
  Next
mfG
tobe
PureBasic 4.40 (Windows - x86)
frogsoup
Beiträge: 13
Registriert: 26.04.2008 11:22

Beitrag von frogsoup »

das mit dem aus dem bildschirm fallen und crashen hab ich schon behoben, danke. aber das mit den -10 punkte wenn der bei x >640 ist klappt nicht wirklich. auch dein versuch stürzt ab :/
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Code: Alles auswählen

Burger()\y + 1 
    DisplayTransparentSprite(2,Burger()\x,Burger()\y) 
    If Abs(Burger()\x-SchlaegerX) < 60 And Abs(Burger()\y-SchlaegerY) < 60 
      DeleteElement(Burger()) 
      MeinePunkte + 10
    ElseIf Burger()\y > 480 ; Aus dem Bildschirm 
      DeleteElement(Burger()) 
      MeinePunkte - 10 
    EndIf
mach so, und sry das ich nicht bei ICQ schreibe ich bin am zocken ^^ und schreibe hier nur auf dem Lappi


Das problem war, das du etwas gelöscht hast, aber danach noch n abfrage gestellt hast.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
frogsoup
Beiträge: 13
Registriert: 26.04.2008 11:22

Beitrag von frogsoup »

Super... Ich brauch jetzt nur noch sone art menü oder titel... kann man da schnell, i-was einfaches erstellen? weil ich dieses programm nicht wirklich bedienen kann aber muss =P
Gesperrt