LimeSeed Posted November 21, 2008 Posted November 21, 2008 It's finally here, slime volleyball written entirely in autoit!! To Do List: -Make Circles and balls smoother (anyone know how to do this?) -Double Buffer -Bask In My Awesomeness expandcollapse popup#NoTrayIcon ;this is a project that i have been working on for months, and have finally finished :) whew! ;major thanks go to my Uncle Steve for helping me with the physics aspects of the game! ;click to play, and press spacebar to exit! Enjoy! I tried to make this as much like the oneslime.net game as possible! ;Also major thanks to Wedgey for making the original game! #include "guiconstants.au3" #include "misc.au3" #include "gdiplus.au3" ;creates gui $hWnd = GUICreate("Slime Volleyball by: Isaac Flaum", 750, 400) ;variables that make game function $vDll = DllOpen("user32.dll") $nWidth = 750 $nHeight = 400 $p1Diam = 100 $p2Diam = 100 $p1X = 200 $i = 0 $ballXPix = 0 $ballYPix = 0 $Winner = False $p1OldX = 0 $p1s = 5 $p2s = 5 $p1OldY = 0 $leftbound = 0 $ballRad = 25 $start = True $jump = False $nclick = True $jump2 = False $fudge = 5 $maxXV = 15 $maxYV = 22 $dx = 0 $p1Y = 0 $p2X = 800 $p2Y = 0 $p1XV = 0 $p1YV = 0 $p2XV = 0 $p2YV = 0 $ballX = 200 $ballY = 400 $ballVX = 0 $ballVY = 0 GUISetState() ;create gdi+ environment and create different paint brushes and pens for slime and ball colors _GDIPlus_Startup() $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd) $brush = _GDIPlus_BrushCreateSolid(0xFF0000FF) $yellowbrush = _GDIPlus_BrushCreateSolid(0xFFFFFF00) $greenbrush = _GDIPlus_BrushCreateSolid(0xFF00FF00) $redbrush = _GDIPlus_BrushCreateSolid(0xFFFF0000) $whitebrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) $blackbrush = _GDIPlus_BrushCreateSolid(0xFF000000) $greybrush = _GDIPlus_BrushCreateSolid(0xFF808080) $bluebrush = _GDIPlus_BrushCreateSolid(0xFF0000FF) $green = _GDIPlus_PenCreate(0xFF00FF00, 1, 2) $blue = _GDIPlus_PenCreate(0xFF0000FF, 1, 2) $red = _GDIPlus_PenCreate(0xFFFF0000, 1, 2) $yellow = _GDIPlus_PenCreate(0xFFFFFF00, 1, 2) ;draw the net, floor, and background _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) _GDIPlus_GraphicsFillRect($hGraphic, $nWidth / 2 - 2, (7 * $nHeight) / 10, 4, $nHeight / 10 + 5, $whitebrush) _GDIPlus_GraphicsFillRect($hGraphic, 0, (4 * $nHeight) / 5, $nWidth, $nHeight / 5, $greybrush) DrawScores() Sleep(1000) ;loop until spacebar is pressed, i did not want to make it listen for the 'x' button on the top to be pressed, as that slows down the script alot :-( While (Not (_IsPressed(20, $vDll))) Sleep(20);50 fps If ($start) Then StartScreen() ;get old coordinates to black out old slime positions $p1OldX = $p1X $p1OldY = $p1Y $p2OldX = $p2X $p2oldy = $p2Y $ballOldX = $ballX $ballOldY = $ballY ;restart function If (_IsPressed(52, $vDll)) Then Restart() ;instructions function If (_IsPressed(49, $vDll)) Then Instructions() ;if pressed 'A', 'W', or 'D', move ball across x and y axis' for p1 If (_IsPressed(41, $vDll)) Then $p1XV = -8 If (_IsPressed(44, $vDll)) Then $p1XV = 8 ;jump! If ((_IsPressed(57, $vDll)) And ($jump = False)) Then $p1YV = 20 $jump = True EndIf If (Not (_IsPressed(44, $vDll)) And Not (_IsPressed(41, $vDll))) Then $p1XV = 0 ;arrow keys for p2 If (_IsPressed(25, $vDll)) Then $p2XV = -8 If (_IsPressed(27, $vDll)) Then $p2XV = 8 If ((_IsPressed(26, $vDll)) And ($jump2 = False)) Then $p2YV = 20 $jump2 = True EndIf If (Not (_IsPressed(25, $vDll)) And Not (_IsPressed(27, $vDll))) Then $p2XV = 0 ;draw slimes and move balls DrawSlimes() MoveBall() $i += 1 $j = ($i / 3) ;draw net and floor but only every 3 loops If (IsInt($j)) Then _GDIPlus_GraphicsFillRect($hGraphic, 0, (4 * $nHeight) / 5, $nWidth, $nHeight / 5, $greybrush) _GDIPlus_GraphicsFillRect($hGraphic, $nWidth / 2 - 2, (7 * $nHeight) / 10, 4, $nHeight / 10 + 5, $whitebrush) EndIf ;if ball hits floor If ($ballY < 25) Then If ($ballX <= 500) Then Sleep(100) $p2s += 1 $p1s -= 1 $ballX = 800 $ballY = 400 $ballVX = 0 $ballVY = 0 _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1X = 200 $p2X = 800 DrawScores() If ($p2s = 10) Then $Winner = True ElseIf ($ballX > 500) Then Sleep(100) $p1s += 1 $p2s -= 1 $ballX = 200 $ballY = 400 $ballVX = 0 $ballVY = 0 _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1X = 200 $p2X = 800 DrawScores() If ($p1s = 10) Then $Winner = True EndIf EndIf ;if someone wins If ($Winner) Then If ($p1s = 10) Then ;if player one wins then do this _GDIPlus_GraphicsDrawString($hGraphic, "Player 1 Wins!", 250, 150, "Times New Roman", 30) While ($Winner) _GDIPlus_GraphicsDrawString($hGraphic, "Press 'R' to restart, or 'SpaceBar' to exit", 120, 200, "Times New Roman", 26) If (_IsPressed(52, $vDll)) Then Restart() $Winner = False EndIf If (_IsPressed(20, $vDll)) Then Exit WEnd Else ;if player 2 wins _GDIPlus_GraphicsDrawString($hGraphic, "Player 2 Wins!", 250, 150, "Times New Roman", 30) While ($Winner) _GDIPlus_GraphicsDrawString($hGraphic, "Press 'R' to restart, or 'SpaceBar' to exit", 120, 200, "Times New Roman", 26) If (_IsPressed(52, $vDll)) Then Restart() $Winner = False EndIf If (_IsPressed(20, $vDll)) Then Exit WEnd EndIf EndIf WEnd ;Clean up resources when exited _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_Shutdown() DllClose($vDll) Func DrawSlimes() ;black out old slime p1 $sWidth = $nWidth * $p1Diam / 1000 $sHeight = $nHeight * $p1Diam / 1000 $leftbound = $p1OldX * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p1OldY * $nHeight / 1000 _GDIPlus_GraphicsFillRect($hGraphic, $leftbound, $topbound, $sWidth, $sHeight, $brush) ;black out p2 $sWidth = $nWidth * $p2Diam / 1000 $sHeight = $nHeight * $p2Diam / 1000 $leftbound = $p2OldX * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p2oldy * $nHeight / 1000 _GDIPlus_GraphicsFillRect($hGraphic, $leftbound, $topbound, $sWidth, $sHeight, $brush) ;move it according to its velocity $p1X += $p1XV ;jump function for p1 If ($p1YV <> 0) Then $p1YV -= 1.4 $p1Y += $p1YV If ($p1Y < 0) Then $p1Y = 0 $p1YV = 0 $jump = False EndIf EndIf ;p1 boundaries If ($p1X < 50) Then $p1X = 50 If ($p1X > 445) Then $p1X = 445 ;draw new p1 $sWidth = $nWidth * $p1Diam / 1000 $sHeight = $nHeight * $p1Diam / 1000 $leftbound = $p1X * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p1Y * $nHeight / 1000 _GDIPlus_GraphicsFillPie($hGraphic, $leftbound, $topbound, $sWidth, 2 * $sHeight, 0, -180, $greenbrush) ;slimes eye $eyeLeft = $p1X + 38 * $p1Diam / 100 $eyeTop = $p1Y - 60 * $p1Diam / 100 $leftbound = $eyeLeft * $nWidth / 1000 $topbound = 4 * $nHeight / 5 - $sHeight - $eyeTop * $nHeight / 1000 $bedx = $leftbound - $ballXPix $bedy = $topbound - $ballYPix $bedist = Int(Sqrt($bedx * $bedx + $bedy * $bedy)) $eyeWidthPix = $nWidth / 50 * $p1Diam / 100 $eyeHeightPix = $nHeight / 25 * $p1Diam / 100 $p1Blink = Random(0, 30, 1) If ($p1Blink < 29) Then _GDIPlus_GraphicsFillEllipse($hGraphic, $leftbound - $eyeWidthPix, $topbound - $eyeHeightPix, $eyeWidthPix, $eyeHeightPix, $whitebrush) _GDIPlus_GraphicsFillEllipse($hGraphic, $leftbound - 4 * $bedx / $bedist - 3 * $eyeWidthPix / 4, $topbound - 4 * $bedy / $bedist - 3 * $eyeHeightPix / 4, $eyeWidthPix / 2, $eyeHeightPix / 2, $blackbrush) EndIf ;draw p2 $p2X += $p2XV ;jump function If ($p2YV <> 0) Then $p2YV -= 1.4 $p2Y += $p2YV If ($p2Y < 0) Then $p2Y = 0 $p2YV = 0 $jump2 = False EndIf EndIf ;boundaries If ($p2X > 950) Then $p2X = 950 If ($p2X < 555) Then $p2X = 555 ;draw new p2 $sWidth = $nWidth * $p2Diam / 1000 $sHeight = $nHeight * $p2Diam / 1000 $leftbound = $p2X * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p2Y * $nHeight / 1000 _GDIPlus_GraphicsFillPie($hGraphic, $leftbound, $topbound, $sWidth, 2 * $sHeight, 0, -180, $redbrush) ;p2's eye $eyeLeft = $p2X - 18 * $p2Diam / 100 $eyeTop = $p2Y - 60 * $p2Diam / 100 $leftbound = $eyeLeft * $nWidth / 1000 $topbound = 4 * $nHeight / 5 - $sHeight - $eyeTop * $nHeight / 1000 $bedx = $leftbound - $ballXPix $bedy = $topbound - $ballYPix $bedist = Int(Sqrt($bedx * $bedx + $bedy * $bedy)) $eyeWidthPix = $nWidth / 50 * $p2Diam / 100 $eyeHeightPix = $nHeight / 25 * $p2Diam / 100 $p2Blink = Random(0, 30, 1) If ($p2Blink < 29) Then _GDIPlus_GraphicsFillEllipse($hGraphic, $leftbound - $eyeWidthPix, $topbound - $eyeHeightPix, $eyeWidthPix, $eyeHeightPix, $whitebrush) _GDIPlus_GraphicsFillEllipse($hGraphic, $leftbound - 4 * $bedx / $bedist - 3 * $eyeWidthPix / 4, $topbound - 4 * $bedy / $bedist - 3 * $eyeHeightPix / 4, $eyeWidthPix / 2, $eyeHeightPix / 2, $blackbrush) EndIf EndFunc ;==>DrawSlimes Func MoveBall() ;makes ball bounce off of net If ($ballX > 480 And $ballX < 520 And $ballY < 140) Then If ($ballVY < 0 And $ballY > 130) Then $ballVY *= -1 $ballY = 130 ElseIf ($ballX < 500) Then $ballX = 480 $ballVX *= -1 Else $ballX = 520 $ballVX *= -1 EndIf EndIf ;makes ball bounce off of walls If ($ballX < 15) Then $ballX = 15 $ballVX = -$ballVX EndIf If ($ballX > 985) Then $ballX = 985 $ballVX = -$ballVX EndIf ;black out old ball $ballXPix = $ballOldX * $nWidth / 1000 $ballYPix = 4 * $nHeight / 5 - $ballOldY * $nHeight / 1000 $ballRadPix = ($ballRad + $fudge) * $nHeight / 1000 _GDIPlus_GraphicsFillRect($hGraphic, $ballXPix - $ballRadPix, $ballYPix - $ballRadPix, 2 * $ballRadPix, 2 * $ballRadPix, $brush) ;p1 collision detection $dx = 2 * ($ballX - $p1X) $dy = $ballY - $p1Y $dist = Int(Sqrt($dx * $dx + $dy * $dy)) $dvx = $ballVX - $p1XV $dvy = $ballVY - $p1YV If ($dy > 0 And $dist < $p1Diam + $ballRad And $dist > $fudge) Then $something = Int(($dx * $dvx + $dy * $dvy) / $dist) $ballX = $p1X + ($p1Diam + $ballRad) / 2 * $dx / $dist $ballY = $p1Y + ($p1Diam + $ballRad) * $dy / $dist If ($something <= 0) Then $ballVX += $p1XV - 2 * $dx * $something / $dist $ballVY += $p1YV - 2 * $dy * $something / $dist If ($ballVX < -$maxXV) Then $ballVX = -$maxXV If ($ballVX > $maxXV) Then $ballVX = $maxXV $ballVY += $p1YV - 2 * $dy * $something / $dist EndIf If ($ballVY < -$maxYV) Then $ballVY = -$maxYV If ($ballVY > $maxYV) Then $ballVY = $maxYV EndIf EndIf ;p2 collision detection $dx = 2 * ($ballX - $p2X) $dy = $ballY - $p2Y $dist = Int(Sqrt($dx * $dx + $dy * $dy)) $dvx = $ballVX - $p2XV $dvy = $ballVY - $p2YV If ($dy > 0 And $dist < $p2Diam + $ballRad And $dist > $fudge) Then $something = Int(($dx * $dvx + $dy * $dvy) / $dist) $ballX = $p2X + ($p2Diam + $ballRad) / 2 * $dx / $dist $ballY = $p2Y + ($p2Diam + $ballRad) * $dy / $dist If ($something <= 0) Then $ballVX += $p2XV - 2 * $dx * $something / $dist $ballVY += $p1YV - 2 * $dy * $something / $dist If ($ballVX < -$maxXV) Then $ballVX = -$maxXV If ($ballVX > $maxXV) Then $ballVX = $maxXV $ballVY += $p1YV - 2 * $dy * $something / $dist EndIf If ($ballVY < -$maxYV) Then $ballVY = -$maxYV If ($ballVY > $maxYV) Then $ballVY = $maxYV EndIf EndIf ;makes ball fall $ballVY -= 1 ;makes ball move on x and y axis' according to balls x and y velocity $ballY += $ballVY $ballX += $ballVX ;converts ball pixels into autoit friendly coordinates $ballRadPix = ($ballRad + $fudge) * $nHeight / 1000 $ballXPix = $ballX * $nWidth / 1000 $ballYPix = 4 * $nHeight / 5 - $ballY * $nHeight / 1000 _GDIPlus_GraphicsFillEllipse($hGraphic, $ballXPix - $ballRadPix, $ballYPix - $ballRadPix, 2 * $ballRadPix, 2 * $ballRadPix, $yellowbrush) EndFunc ;==>MoveBall Func DrawScores() ;draw the score For $s = 1 To ($p1s) Step 1 $xx = $s * 30 _GDIPlus_GraphicsFillEllipse($hGraphic, $xx, 10, 25, 25, $whitebrush) Next For $s = 1 To ($p2s) Step 1 $xx = 720 - ($s * 30) _GDIPlus_GraphicsFillEllipse($hGraphic, $xx, 10, 25, 25, $whitebrush) Next EndFunc ;==>DrawScores Func Restart() $p1X = 200 $p1Y = 0 $p2X = 800 $p2Y = 0 $ballVX = 0 $ballVY = 0 $ballX = 200 $ballY = 400 _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1s = 5 $p2s = 5 Sleep(100) DrawScores() EndFunc ;==>Restart Func StartScreen() ;button to start game $startgame = GUICtrlCreateButton("Click Here To Start 2 Player Game ('I' = Instructions)", 230, 200, 260, 40) _GDIPlus_GraphicsDrawString($hGraphic, "Slime Volleyball By: Isaac Flaum", 170, 150, "Times New Roman", 20) While ($nclick) Sleep(20) If (_IsPressed(49, $vDll)) Then Instructions() $msg = GUIGetMsg() If ($msg = -3) Then Exit If ($msg = $startgame) Then GUICtrlDelete($startgame) $start = False $nclick = False Restart() EndIf WEnd EndFunc ;==>StartScreen Func Instructions() MsgBox(0, "Slime Volleyball Instructions", "Slime Volleyball is a simple game in which 2 players battle" & Chr(13) & Chr(10) & "to get the ball on their opponents side. Once you get 10 points, you win!" & Chr(13) & Chr(10) & "The controls are as follows:" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Player 1:" & Chr(13) & Chr(10) & "Move Left: 'A'" & Chr(13) & Chr(10) & "Move Right: 'D'" & Chr(13) & Chr(10) & "Jump: 'W'" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Player 2:" & Chr(13) & Chr(10) & "Move Left: 'Left Arrow Key'" & Chr(13) & Chr(10) & "Move Right: 'Right Arrow Key'" & Chr(13) & Chr(10) & "Jump: 'Up Arrow Key'" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Spacebar: Exit" & Chr(13) & Chr(10) & "Instructions: 'I'" & Chr(13) & Chr(10) & "Restart: 'R'") EndFunc ;==>Instructions global $warming = true
gseller Posted November 21, 2008 Posted November 21, 2008 Way cool! I totally lack any skill to play it but very nice coding...
Tomb Posted November 21, 2008 Posted November 21, 2008 it looks good. a little buggy, like some flashing, and the window doesnt repaint if you minimize it or drag another on top of it. i like it.
monoceres Posted November 21, 2008 Posted November 21, 2008 Wow this is awesome! One of my all time online favorites in AutoIt I fixed #1 & #2. Hope you don't mind: CODE #NoTrayIcon ;this is a project that i have been working on for months, and have finally finished smile.gif whew! ;major thanks go to my Uncle Steve for helping me with the physics aspects of the game! ;click to play, and press spacebar to exit! Enjoy! I tried to make this as much like the oneslime.net game as possible! ;Also major thanks to Wedgey for making the original game! #include <guiconstants.au3> #include <misc.au3> #include <gdiplus.au3> ;creates gui $hWnd = GUICreate("Slime Volleyball by: Isaac Flaum", 750, 400) ;variables that make game function $vDll = DllOpen("user32.dll") $nWidth = 750 $nHeight = 400 $p1Diam = 100 $p2Diam = 100 $p1X = 200 $i = 0 $ballXPix = 0 $ballYPix = 0 $Winner = False $p1OldX = 0 $p1s = 5 $p2s = 5 $p1OldY = 0 $leftbound = 0 $ballRad = 25 $start = True $jump = False $nclick = True $jump2 = False $fudge = 5 $maxXV = 15 $maxYV = 22 $dx = 0 $p1Y = 0 $p2X = 800 $p2Y = 0 $p1XV = 0 $p1YV = 0 $p2XV = 0 $p2YV = 0 $ballX = 200 $ballY = 400 $ballVX = 0 $ballVY = 0 GUISetState() ;create gdi+ environment and create different paint brushes and pens for slime and ball colors _GDIPlus_Startup() $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd) ;;; New $bitmap=_GDIPlus_BitmapCreateFromGraphics($nWidth,$nHeight,$hGraphic) $backbuffer=_GDIPlus_ImageGetGraphicsContext($bitmap) _AntiAlias($backbuffer,4) $brush = _GDIPlus_BrushCreateSolid(0xFF0000FF) $yellowbrush = _GDIPlus_BrushCreateSolid(0xFFFFFF00) $greenbrush = _GDIPlus_BrushCreateSolid(0xFF00FF00) $redbrush = _GDIPlus_BrushCreateSolid(0xFFFF0000) $whitebrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF) $blackbrush = _GDIPlus_BrushCreateSolid(0xFF000000) $greybrush = _GDIPlus_BrushCreateSolid(0xFF808080) $bluebrush = _GDIPlus_BrushCreateSolid(0xFF0000FF) $green = _GDIPlus_PenCreate(0xFF00FF00, 1, 2) $blue = _GDIPlus_PenCreate(0xFF0000FF, 1, 2) $red = _GDIPlus_PenCreate(0xFFFF0000, 1, 2) $yellow = _GDIPlus_PenCreate(0xFFFFFF00, 1, 2) ;draw the net, floor, and background _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) _GDIPlus_GraphicsFillRect($hGraphic, $nWidth / 2 - 2, (7 * $nHeight) / 10, 4, $nHeight / 10 + 5, $whitebrush) _GDIPlus_GraphicsFillRect($hGraphic, 0, (4 * $nHeight) / 5, $nWidth, $nHeight / 5, $greybrush) DrawScores() Sleep(1000) ;loop until spacebar is pressed, i did not want to make it listen for the 'x' button on the top to be pressed, as that slows down the script alot :-( While (Not (_IsPressed(20, $vDll))) ;;; New _GDIPlus_GraphicsClear($backbuffer,0xFF0000FF) Sleep(20);50 fps If ($start) Then StartScreen() ;get old coordinates to black out old slime positions $p1OldX = $p1X $p1OldY = $p1Y $p2OldX = $p2X $p2oldy = $p2Y $ballOldX = $ballX $ballOldY = $ballY ;restart function If (_IsPressed(52, $vDll)) Then Restart() ;instructions function If (_IsPressed(49, $vDll)) Then Instructions() ;if pressed 'A', 'W', or 'D', move ball across x and y axis' for p1 If (_IsPressed(41, $vDll)) Then $p1XV = -8 If (_IsPressed(44, $vDll)) Then $p1XV = 8 ;jump! If ((_IsPressed(57, $vDll)) And ($jump = False)) Then $p1YV = 20 $jump = True EndIf If (Not (_IsPressed(44, $vDll)) And Not (_IsPressed(41, $vDll))) Then $p1XV = 0 ;arrow keys for p2 If (_IsPressed(25, $vDll)) Then $p2XV = -8 If (_IsPressed(27, $vDll)) Then $p2XV = 8 If ((_IsPressed(26, $vDll)) And ($jump2 = False)) Then $p2YV = 20 $jump2 = True EndIf If (Not (_IsPressed(25, $vDll)) And Not (_IsPressed(27, $vDll))) Then $p2XV = 0 ;draw slimes and move balls DrawSlimes() MoveBall() $i += 1 $j = ($i / 3) ;draw net and floor but only every 3 loops ; removed if ;~ If (IsInt($j)) Then _GDIPlus_GraphicsFillRect($backbuffer, 0, (4 * $nHeight) / 5, $nWidth, $nHeight / 5, $greybrush) _GDIPlus_GraphicsFillRect($backbuffer, $nWidth / 2 - 2, (7 * $nHeight) / 10, 4, $nHeight / 10 + 5, $whitebrush) ;~ EndIf DrawScores() ;if ball hits floor If ($ballY < 25) Then If ($ballX <= 500) Then Sleep(100) $p2s += 1 $p1s -= 1 $ballX = 800 $ballY = 400 $ballVX = 0 $ballVY = 0 ;~ _GDIPlus_GraphicsFillRect($backbuffer, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1X = 200 $p2X = 800 DrawScores() If ($p2s = 10) Then $Winner = True ElseIf ($ballX > 500) Then Sleep(100) $p1s += 1 $p2s -= 1 $ballX = 200 $ballY = 400 $ballVX = 0 $ballVY = 0 ;~ _GDIPlus_GraphicsFillRect($backbuffer, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1X = 200 $p2X = 800 DrawScores() If ($p1s = 10) Then $Winner = True EndIf EndIf ;if someone wins If ($Winner) Then If ($p1s = 10) Then ;if player one wins then do this _GDIPlus_GraphicsDrawString($backbuffer, "Player 1 Wins!", 250, 150, "Times New Roman", 30) While ($Winner) _GDIPlus_GraphicsDrawString($backbuffer, "Press 'R' to restart, or 'SpaceBar' to exit", 120, 200, "Times New Roman", 26) If (_IsPressed(52, $vDll)) Then Restart() $Winner = False EndIf If (_IsPressed(20, $vDll)) Then Exit WEnd Else ;if player 2 wins _GDIPlus_GraphicsDrawString($backbuffer, "Player 2 Wins!", 250, 150, "Times New Roman", 30) While ($Winner) _GDIPlus_GraphicsDrawString($backbuffer, "Press 'R' to restart, or 'SpaceBar' to exit", 120, 200, "Times New Roman", 26) If (_IsPressed(52, $vDll)) Then Restart() $Winner = False EndIf If (_IsPressed(20, $vDll)) Then Exit WEnd EndIf EndIf ;;; New _GDIPlus_GraphicsDrawImageRect($hGraphic,$bitmap,0,0,$nWidth,$nHeight) WEnd ;Clean up resources when exited _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_Shutdown() DllClose($vDll) Func DrawSlimes() ;black out old slime p1 $sWidth = $nWidth * $p1Diam / 1000 $sHeight = $nHeight * $p1Diam / 1000 $leftbound = $p1OldX * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p1OldY * $nHeight / 1000 _GDIPlus_GraphicsFillRect($backbuffer, $leftbound, $topbound, $sWidth, $sHeight, $brush) ;black out p2 $sWidth = $nWidth * $p2Diam / 1000 $sHeight = $nHeight * $p2Diam / 1000 $leftbound = $p2OldX * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p2oldy * $nHeight / 1000 _GDIPlus_GraphicsFillRect($backbuffer, $leftbound, $topbound, $sWidth, $sHeight, $brush) ;move it according to its velocity $p1X += $p1XV ;jump function for p1 If ($p1YV <> 0) Then $p1YV -= 1.4 $p1Y += $p1YV If ($p1Y < 0) Then $p1Y = 0 $p1YV = 0 $jump = False EndIf EndIf ;p1 boundaries If ($p1X < 50) Then $p1X = 50 If ($p1X > 445) Then $p1X = 445 ;draw new p1 $sWidth = $nWidth * $p1Diam / 1000 $sHeight = $nHeight * $p1Diam / 1000 $leftbound = $p1X * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p1Y * $nHeight / 1000 _GDIPlus_GraphicsFillPie($backbuffer, $leftbound, $topbound, $sWidth, 2 * $sHeight, 0, -180, $greenbrush) ;slimes eye $eyeLeft = $p1X + 38 * $p1Diam / 100 $eyeTop = $p1Y - 60 * $p1Diam / 100 $leftbound = $eyeLeft * $nWidth / 1000 $topbound = 4 * $nHeight / 5 - $sHeight - $eyeTop * $nHeight / 1000 $bedx = $leftbound - $ballXPix $bedy = $topbound - $ballYPix $bedist = Int(Sqrt($bedx * $bedx + $bedy * $bedy)) $eyeWidthPix = $nWidth / 50 * $p1Diam / 100 $eyeHeightPix = $nHeight / 25 * $p1Diam / 100 $p1Blink = Random(0, 30, 1) If ($p1Blink < 29) Then _GDIPlus_GraphicsFillEllipse($backbuffer, $leftbound - $eyeWidthPix, $topbound - $eyeHeightPix, $eyeWidthPix, $eyeHeightPix, $whitebrush) _GDIPlus_GraphicsFillEllipse($backbuffer, $leftbound - 4 * $bedx / $bedist - 3 * $eyeWidthPix / 4, $topbound - 4 * $bedy / $bedist - 3 * $eyeHeightPix / 4, $eyeWidthPix / 2, $eyeHeightPix / 2, $blackbrush) EndIf ;draw p2 $p2X += $p2XV ;jump function If ($p2YV <> 0) Then $p2YV -= 1.4 $p2Y += $p2YV If ($p2Y < 0) Then $p2Y = 0 $p2YV = 0 $jump2 = False EndIf EndIf ;boundaries If ($p2X > 950) Then $p2X = 950 If ($p2X < 555) Then $p2X = 555 ;draw new p2 $sWidth = $nWidth * $p2Diam / 1000 $sHeight = $nHeight * $p2Diam / 1000 $leftbound = $p2X * $nWidth / 1000 - $sWidth / 2 $topbound = 4 * $nHeight / 5 - $sHeight - $p2Y * $nHeight / 1000 _GDIPlus_GraphicsFillPie($backbuffer, $leftbound, $topbound, $sWidth, 2 * $sHeight, 0, -180, $redbrush) ;p2's eye $eyeLeft = $p2X - 18 * $p2Diam / 100 $eyeTop = $p2Y - 60 * $p2Diam / 100 $leftbound = $eyeLeft * $nWidth / 1000 $topbound = 4 * $nHeight / 5 - $sHeight - $eyeTop * $nHeight / 1000 $bedx = $leftbound - $ballXPix $bedy = $topbound - $ballYPix $bedist = Int(Sqrt($bedx * $bedx + $bedy * $bedy)) $eyeWidthPix = $nWidth / 50 * $p2Diam / 100 $eyeHeightPix = $nHeight / 25 * $p2Diam / 100 $p2Blink = Random(0, 30, 1) If ($p2Blink < 29) Then _GDIPlus_GraphicsFillEllipse($backbuffer, $leftbound - $eyeWidthPix, $topbound - $eyeHeightPix, $eyeWidthPix, $eyeHeightPix, $whitebrush) _GDIPlus_GraphicsFillEllipse($backbuffer, $leftbound - 4 * $bedx / $bedist - 3 * $eyeWidthPix / 4, $topbound - 4 * $bedy / $bedist - 3 * $eyeHeightPix / 4, $eyeWidthPix / 2, $eyeHeightPix / 2, $blackbrush) EndIf EndFunc ;==>DrawSlimes Func MoveBall() ;makes ball bounce off of net If ($ballX > 480 And $ballX < 520 And $ballY < 140) Then If ($ballVY < 0 And $ballY > 130) Then $ballVY *= -1 $ballY = 130 ElseIf ($ballX < 500) Then $ballX = 480 $ballVX *= -1 Else $ballX = 520 $ballVX *= -1 EndIf EndIf ;makes ball bounce off of walls If ($ballX < 15) Then $ballX = 15 $ballVX = -$ballVX EndIf If ($ballX > 985) Then $ballX = 985 $ballVX = -$ballVX EndIf ;black out old ball $ballXPix = $ballOldX * $nWidth / 1000 $ballYPix = 4 * $nHeight / 5 - $ballOldY * $nHeight / 1000 $ballRadPix = ($ballRad + $fudge) * $nHeight / 1000 ;~ _GDIPlus_GraphicsFillRect($backbuffer, $ballXPix - $ballRadPix, $ballYPix - $ballRadPix, 2 * $ballRadPix, 2 * $ballRadPix, $brush) ;p1 collision detection $dx = 2 * ($ballX - $p1X) $dy = $ballY - $p1Y $dist = Int(Sqrt($dx * $dx + $dy * $dy)) $dvx = $ballVX - $p1XV $dvy = $ballVY - $p1YV If ($dy > 0 And $dist < $p1Diam + $ballRad And $dist > $fudge) Then $something = Int(($dx * $dvx + $dy * $dvy) / $dist) $ballX = $p1X + ($p1Diam + $ballRad) / 2 * $dx / $dist $ballY = $p1Y + ($p1Diam + $ballRad) * $dy / $dist If ($something <= 0) Then $ballVX += $p1XV - 2 * $dx * $something / $dist $ballVY += $p1YV - 2 * $dy * $something / $dist If ($ballVX < -$maxXV) Then $ballVX = -$maxXV If ($ballVX > $maxXV) Then $ballVX = $maxXV $ballVY += $p1YV - 2 * $dy * $something / $dist EndIf If ($ballVY < -$maxYV) Then $ballVY = -$maxYV If ($ballVY > $maxYV) Then $ballVY = $maxYV EndIf EndIf ;p2 collision detection $dx = 2 * ($ballX - $p2X) $dy = $ballY - $p2Y $dist = Int(Sqrt($dx * $dx + $dy * $dy)) $dvx = $ballVX - $p2XV $dvy = $ballVY - $p2YV If ($dy > 0 And $dist < $p2Diam + $ballRad And $dist > $fudge) Then $something = Int(($dx * $dvx + $dy * $dvy) / $dist) $ballX = $p2X + ($p2Diam + $ballRad) / 2 * $dx / $dist $ballY = $p2Y + ($p2Diam + $ballRad) * $dy / $dist If ($something <= 0) Then $ballVX += $p2XV - 2 * $dx * $something / $dist $ballVY += $p1YV - 2 * $dy * $something / $dist If ($ballVX < -$maxXV) Then $ballVX = -$maxXV If ($ballVX > $maxXV) Then $ballVX = $maxXV $ballVY += $p1YV - 2 * $dy * $something / $dist EndIf If ($ballVY < -$maxYV) Then $ballVY = -$maxYV If ($ballVY > $maxYV) Then $ballVY = $maxYV EndIf EndIf ;makes ball fall $ballVY -= 1 ;makes ball move on x and y axis' according to balls x and y velocity $ballY += $ballVY $ballX += $ballVX ;converts ball pixels into autoit friendly coordinates $ballRadPix = ($ballRad + $fudge) * $nHeight / 1000 $ballXPix = $ballX * $nWidth / 1000 $ballYPix = 4 * $nHeight / 5 - $ballY * $nHeight / 1000 _GDIPlus_GraphicsFillEllipse($backbuffer, $ballXPix - $ballRadPix, $ballYPix - $ballRadPix, 2 * $ballRadPix, 2 * $ballRadPix, $yellowbrush) EndFunc ;==>MoveBall Func DrawScores() ;draw the score For $s = 1 To ($p1s) Step 1 $xx = $s * 30 _GDIPlus_GraphicsFillEllipse($backbuffer, $xx, 10, 25, 25, $whitebrush) Next For $s = 1 To ($p2s) Step 1 $xx = 720 - ($s * 30) _GDIPlus_GraphicsFillEllipse($backbuffer, $xx, 10, 25, 25, $whitebrush) Next EndFunc ;==>DrawScores Func Restart() $p1X = 200 $p1Y = 0 $p2X = 800 $p2Y = 0 $ballVX = 0 $ballVY = 0 $ballX = 200 $ballY = 400 _GDIPlus_GraphicsFillRect($backbuffer, 0, 0, $nWidth, (4 * $nHeight) / 5, $bluebrush) $p1s = 5 $p2s = 5 Sleep(100) DrawScores() EndFunc ;==>Restart Func StartScreen() ;button to start game $startgame = GUICtrlCreateButton("Click Here To Start 2 Player Game ('I' = Instructions)", 230, 200, 260, 40) _GDIPlus_GraphicsDrawString($backbuffer, "Slime Volleyball By: Isaac Flaum", 170, 150, "Times New Roman", 20) While ($nclick) Sleep(20) If (_IsPressed(49, $vDll)) Then Instructions() $msg = GUIGetMsg() If ($msg = -3) Then Exit If ($msg = $startgame) Then GUICtrlDelete($startgame) $start = False $nclick = False Restart() EndIf WEnd EndFunc ;==>StartScreen Func Instructions() MsgBox(0, "Slime Volleyball Instructions", "Slime Volleyball is a simple game in which 2 players battle" & Chr(13) & Chr(10) & "to get the ball on their opponents side. Once you get 10 points, you win!" & Chr(13) & Chr(10) & "The controls are as follows:" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Player 1:" & Chr(13) & Chr(10) & "Move Left: 'A'" & Chr(13) & Chr(10) & "Move Right: 'D'" & Chr(13) & Chr(10) & "Jump: 'W'" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Player 2:" & Chr(13) & Chr(10) & "Move Left: 'Left Arrow Key'" & Chr(13) & Chr(10) & "Move Right: 'Right Arrow Key'" & Chr(13) & Chr(10) & "Jump: 'Up Arrow Key'" & Chr(13) & Chr(10) & "" & Chr(13) & Chr(10) & "Spacebar: Exit" & Chr(13) & Chr(10) & "Instructions: 'I'" & Chr(13) & Chr(10) & "Restart: 'R'") EndFunc ;==>Instructions Func _AntiAlias($hGraphics, $iMode) Local $aResult $aResult = DllCall($ghGDIPDll, "int", "GdipSetSmoothingMode", "hwnd", $hGraphics, "int", $iMode) If @error Then Return SetError(@error, @extended, False) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_AntiAlias Broken link? PM me and I'll send you the file!
Andreik Posted November 21, 2008 Posted November 21, 2008 LimeSeedVery nice game, I like how their eyes spinning after ball.@monoceresHave been useful your changes.
toonboon Posted November 21, 2008 Posted November 21, 2008 (edited) I love it I remember a game called boom boom volley with two precious ladies. Add an online multiplayer version and it beat WoW Edited November 21, 2008 by toonboon [right]~What can I say, I'm a Simplistic person[/right]
walle Posted November 21, 2008 Posted November 21, 2008 (edited) Might be a little bug. The red slime can't move backwards while jumping or jump while moving backwards. Uhm, appears randomly. Great game! Edited November 21, 2008 by walle
LimeSeed Posted November 21, 2008 Author Posted November 21, 2008 @monoceres thanks alot! it looks great! and thanks everyone else for the positive comments! global $warming = true
youknowwho4eva Posted November 21, 2008 Posted November 21, 2008 Is it just me or does it bounce of greens head a lot better then it does of reds? Giggity
ludocus Posted November 21, 2008 Posted November 21, 2008 OMG..The first fun game made with autoit (for me)..Very good!!
youknowwho4eva Posted November 21, 2008 Posted November 21, 2008 (edited) I like to play it against myself. A few things I found that could be adjusted: Like I said, it doesn't seem to bounce off red as good as green If you hit the ball while moving backwards it doesn't travel far The characters move just too slow. If you sped them up a little it would still be challenging but also able to volly longer I would turn up the power of the hits and speed up the characters personally. And make the losing slime cry when they lost. Edit: I caught the ball Edited November 21, 2008 by youknowwho4eva Giggity
Rental Posted November 22, 2008 Posted November 22, 2008 dont know if its just me but when holding down WASD (one at a time) it plays a beeping noise and slows the speed of the game =\
rasim Posted November 22, 2008 Posted November 22, 2008 LimeSeedHey! Very nice work! 5 stars from me!
Valuater Posted November 22, 2008 Posted November 22, 2008 LimeSeedHey! Very nice work! 5 stars from me! Ditto!!!Reallly Good!8)
kjcdude Posted November 22, 2008 Posted November 22, 2008 great game, i didn't even realize something like this was possible with autoit
JRowe Posted November 22, 2008 Posted November 22, 2008 Kudos! This was really cool. [center]However, like ninjas, cyber warriors operate in silence.AutoIt Chat Engine (+Chatbot) , Link Grammar for AutoIt , Simple Speech RecognitionArtificial Neural Networks UDF , Bayesian Networks UDF , Pattern Matching UDFTransparent PNG GUI Elements , Au3Irrlicht 2Advanced Mouse Events MonitorGrammar Database GeneratorTransitions & Tweening UDFPoker Hand Evaluator[/center]
LimeSeed Posted November 22, 2008 Author Posted November 22, 2008 I didn't know the ball could be caught! I think I may use that image as an icon. Glad u all like it! I'll fix more bugs when I get back from vacation global $warming = true
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now