BMP Per Taste Verschieben???

08/09/2010 21:11 Shadow992#46
Quote:
Originally Posted by WiiZocker View Post
Hab den Code für dem Abprallen im Inet gefunden, aber ich muss noch hinbekommen das wenn der ball auf die linke seite des Spielers fliegt, auch nach links geneigt wieder abprallt.

Der gegner ist auch noch nicht der Schlechteste.(Musste schlechteste schreiben da er bis jetzt unschlagbar ist :D)

Das sind die 2 sachen die ich noch ändern muss.

Code:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ImageSearch.au3>


HotKeySet("{F2}","Neustart")
HotKeySet("{esc}","ENDE")

HotKeySet("{Left}","SpielerNachLinks")
HotKeySet("{Right}","SpielerNachRechts")


#region Constants
; Diese Werte kann man aus dem Bild direkt auslesen
; Sagen wir also dein Bild Ball.bmp ist 22 Pixel hoch und 30 breit
; Dann musst du auch dementsprechend das machen:
; $Width_Ball=30
; $High_Ball=22
Const $Width_Spieler=121
Const $Width_Ball=22
Const $Width_Gegner=121

Const $High_Spieler=23
Const $High_Ball=22
Const $High_Gegner=23
#endregion Constants

$down=1

$Verloren = 600

$Width = 436
$Height = 638

$X_Ball = 206
$Y_Ball = 308

$X_Spieler = 160
$Y_Spieler = 592

$X_Gegner = 160
$Y_Gegner = 16

$X_SF = 0
$Y_SF = 0

$left = 214
$top = 80
$ballleft = 408
$balltop = 664

$x = Random(1,3)
$y = Random(1,3)

$Time = TimerInit()


#Region ### START Koda GUI section ### Form=C:\Users\Jan\Desktop\Pong\Daten\Spielfeld GUI.kxf
$PongGui = GUICreate("Pong By WiiZocker", $Width, $Height, $left, $top)


$Ball = GUICtrlCreatePic("Daten\Ball.bmp", $X_Ball, $Y_Ball, 22, 22, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$GUI_ONTOP))
$Spieler = GUICtrlCreatePic("Daten\Spieler.bmp", $X_Spieler, $Y_Spieler, 121, 23, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$GUI_ONTOP))
$Gegner = GUICtrlCreatePic("Daten\Gegner.bmp", $X_Gegner, $Y_Gegner, 121, 23, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$GUI_ONTOP))
$Spielfeld = GUICtrlCreatePic("Daten\Spielfeld.bmp", $X_SF, $Y_SF, 435, 637, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS,$GUI_DISABLE))

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$Abprallen = GUICtrlSetPos($ball, $X_Ball + $x, $Y_Ball + $y)

MsgBox(0,"Spielstart","Mit einem Klick auf OK startet das Spiel.")
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		EndSwitch
    Start()
    sleep(20)
	Gegner()
WEnd

Func SpielerNachLinks()
    If $X_Spieler > 15 Then
        $X_Spieler = $X_Spieler - 7
        GUICtrlSetPos($Spieler,$X_Spieler,$Y_Spieler)
    EndIf
EndFunc


Func SpielerNachRechts()
    If $X_Spieler < 295 Then
        $X_Spieler = $X_Spieler + 7
        GUICtrlSetPos($Spieler,$X_Spieler,$Y_Spieler)
    EndIf
EndFunc



Func GegnerSteuern()
	
	If $X_Gegner > 15 Or $X_Gegner < 295 Then ;Hier sollte er nicht durch die Mauer gehen. Wie kann ich das Ändern?
    
	
	$X_Gegner = $X_Ball


	        $X_Gegner = $X_Gegner - 7
        GUICtrlSetPos($Gegner,$X_Gegner,$Y_Gegner)
   EndIf
EndFunc





Func BallBewegen()
    if $down=1 Then
        $Y_Ball = $Y_Ball + 12
    else
        $Y_Ball = $Y_Ball - 12
		
    EndIf
    If  $Y_Ball >= $Verloren Then
        MsgBox(0,"Verloren","Du hast Verloren")
        Exit
    EndIf
 
    if $X_Ball < 19 Then $x  = $x * -1
	if $X_Ball > 416 - 12 Then $x = $x * -1
	if $Y_Ball < 19 then $y = $y * -1
	if $Y_Ball > 757 - 24 Then $y = $y * -1
	$X_Ball = $X_Ball + $x
	$Y_Ball = $Y_Ball + $y

	

	$BallPosition = GUICtrlSetPos($Ball,$X_Ball,$Y_Ball)



;Eine Abprall funktion für die Linke und rechte seite des Spielers/Gegners
EndFunc


Func Collision($x1,$y1,$width1,$high1,$x2,$y2,$width2,$high2)
    $hpos1=$y1+$high1
    $wpos1=$x1+$width1
    $hpos2=$y2+$high2
    $wpos2=$x2+$width2
    if (($hpos1>=$y2 and $y1<$y2) or ($hpos2>=$y1 and $y1>$y2)) Then
        if (($wpos1>=$x2 and $x1<$x2) or ($wpos2>=$x1 and $x1>$x2)) then
            return true
        else
            return false
        endif
    else
        return false
    endif

EndFunc


Func Start()
	    BallBewegen()
	
    if Collision($X_Spieler,$Y_Spieler,$Width_Spieler,$High_Spieler,$X_Ball,$Y_Ball,$Width_Ball,$High_Ball)==true Then
        $down=0
    EndIf
    if Collision($X_Ball,$Y_Ball,$Width_Ball,$High_Ball,$X_Gegner,$Y_Gegner,$Width_Gegner,$High_Gegner)==true Then
        $down=1
    EndIf
	
	
EndFunc


Func Neustart()
$X_Ball = 206
$Y_Ball = 308

$X_Spieler = 160
$Y_Spieler = 592

$X_Gegner = 160
$Y_Gegner = 16

$X_SF = 0
$Y_SF = 0
MsgBox(0,"Spielstart","Mit einem Klick auf OK startet das Spiel.")
EndFunc


Func ENDE()
    Exit
EndFunc

Func Aktuell()
GUICtrlSetPos($Gegner,$X_Gegner,$Y_Gegner)
EndFunc  


Func Gegner()
	
GegnerSteuern()

EndFunc
Und wie ändere ich das, dass der gegner nicht durch die Wand geht?

MfG Jan
Ich habe erstmal die "Engine" (ist ja nicht wirklich viel) geschrieben und das in eine Funktion gepackt bzw. auf die Allgemeinheit ausgeweitet.
Danach habe ich die "KI" gebastelt.
Ich habe also so getan als wäre die KI ein menschlicher Spieler und eben alle Regeln/Befehle für mich auch für den Gegner gemacht.
08/09/2010 22:04 WiiZocker#47
Ok, aber wie kann ich das mit dem gegner machen das er wenn er sich bewegt, nur eine bestimmte geschwindigkeit bewegt?

Jetzt habe ich es zu Testzwecken so gemacht das er IMMER den Ball folgt und dadurch TRIFFT er ja auch immer ;D

MfG Jan

Ps. Was genau ist eine KI? hab gerade keine lust zu googlen^^
Muss gleich pennen usw...schule-.-
08/09/2010 22:10 HardCore.1337#48
KI = Künstliche Intelligenz
08/09/2010 23:00 Shadow992#49
Quote:
Originally Posted by WiiZocker View Post
Ok, aber wie kann ich das mit dem gegner machen das er wenn er sich bewegt, nur eine bestimmte geschwindigkeit bewegt?

Jetzt habe ich es zu Testzwecken so gemacht das er IMMER den Ball folgt und dadurch TRIFFT er ja auch immer ;D

MfG Jan

Ps. Was genau ist eine KI? hab gerade keine lust zu googlen^^
Muss gleich pennen usw...schule-.-
Quote:
Originally Posted by HardCore.1337 View Post
KI = Künstliche Intelligenz
Sollte alles beantworten, aber eine einfache Lösung wäre das mit Zufall zu lösen:
PHP Code:
If (random(1,3,1)==1then GegnerBewegen()