friendlycyclone Posted July 5, 2013 Share Posted July 5, 2013 (edited) I am trying to understand code better, not just knowing what a function does because ,or what to do if you get this syntax error or that glitch but a fundamental understanding of what you’re asking of your program I personally spend 90% of my time on this forum looking for the meaning of certain scripts so why not make a topic about it. so here I am, with a shiny new account, asking for your help with informing this growing community and inform aspiring coders on what they are asking of their computer and in turn teaching them when it is better for certain code or another. it is in a snake game and i dont know for sure if i need to put the entire script in for it to be relivent but what i got form it it was something along the lines that when it hits a wall or eats itself it makes a new head and i just dont know Select Case $newhead[0] < 0 Or $newhead[0] > 39 Or $newhead[1] < 0 Or $newhead[1] > 39 If $snakelength > 0 Then MsgBox(0, "Your snake ate the wall.", "Your snake was "& ($snakelength + 1) & " units long") Else MsgBox(0, "Your snake ate the wall.", "You should play with your snake more.") EndIf _cleanup() Case $board[$newhead[0]][$newhead[1]] ; OK to go there $newhead[2] = GUICtrlCreateLabel("", $newhead[0] * 10, $newhead[1] * 10, 10, 10) GUICtrlSetBkColor($newhead[2], 16777215) If $board[$newhead[0]][$newhead[1]] = 2 Then ; Ate Food ; Move food Do $a = Int(Random(0, 39)) $b = Int(Random(0, 39)) Until $board[$a][$b] = 1 ; empty $board[$a][$b] = 2 ; food GUICtrlSetPos($food, $a * 10, $b * 10) $snakelength = $snakelength + 1 ReDim $snake[$snakelength + 1][3] Else GUICtrlDelete($oldtail[2]) $board[$oldtail[0]][$oldtail[1]] = 1 EndIf $board[$newhead[0]][$newhead[1]] = 0 For $i = $snakelength To 1 Step - 1 ; Array shift $snake[$i][0] = $snake[$i - 1][0] $snake[$i][1] = $snake[$i - 1][1] $snake[$i][2] = $snake[$i - 1][2] Next $snake[0][0] = $newhead[0] $snake[0][1] = $newhead[1] $snake[0][2] = $newhead[2] p.s. sorry for the confusion first post's make me Skittish Edited July 5, 2013 by friendlycyclone Link to comment Share on other sites More sharing options...
JohnOne Posted July 5, 2013 Share Posted July 5, 2013 I don't even know what you are asking here. Please try to explain yourself more clearly. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
water Posted July 5, 2013 Share Posted July 5, 2013 What's this all about My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
TheSaint Posted July 5, 2013 Share Posted July 5, 2013 In the goodness of time, this topic will be relocated to a more suitable part of the forum ... providing it of course has merit enough to remain and eventually make sense. Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 5, 2013 Moderators Share Posted July 5, 2013 friendlycyclone,The previous posters have obviously never written a snake game - I understand perfectly what the code is trying to do! Let me take a look at the code and I will see what I can do to better your "understanding" of what is happening (or perhaps not in this case). M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
JohnOne Posted July 5, 2013 Share Posted July 5, 2013 friendlycyclone, The previous posters have obviously never written a snake game - I understand perfectly what the code is trying to do! Let me take a look at the code and I will see what I can do to better your "understanding" of what is happening (or perhaps not in this case). M23 There was no mention of snake game or indeed any code earlier I still must try to play with my snake more though. TheSaint 1 AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
TheSaint Posted July 5, 2013 Share Posted July 5, 2013 Yep, the original version of the first post, was a little very confusing and sounded like it should probably end up in Chat ... though he did admit to clicking POST too soon. Who'd have thought it was about a Snake game. Anyway, I never have liked snakes, so I'm with Indy on this one, and will leave you all to it. Make sure brain is in gear before opening mouth! Remember, what is not said, can be just as important as what is said. Spoiler What is the Secret Key? Life is like a Donut If I put effort into communication, I expect you to read properly & fully, or just not comment. Ignoring those who try to divert conversation with irrelevancies. If I'm intent on insulting you or being rude, I will be obvious, not ambiguous about it. I'm only big and bad, to those who have an over-active imagination. I may have the Artistic Liesense to disagree with you. TheSaint's Toolbox (be advised many downloads are not working due to ISP screwup with my storage) Link to comment Share on other sites More sharing options...
friendlycyclone Posted July 5, 2013 Author Share Posted July 5, 2013 here is the full snake game expandcollapse popup;left arrow 25 ;up arrow 26 ;right arrow 27 ;down arrow 28 ;space bar 20 #include <GuiConstants.au3> #include <Array.au3> opt("GuiOnEventMode", 1) MsgBox(0, "Directions", "Use the arrow keys to start the game, to guide the snake and unpause the game. Use the spacebar to pause the game.") $gui = GUICreate("Snake", 400, 400) GuiSetBkColor(0x000099) GUISetState() GUISetOnEvent($gui_event_close, "_Exit") Global $clientsize = WinGetClientSize($gui) Global $speedder = 150 Global $food Global $snakelength = 0 Dim $board[40][40] ; tracks the board Dim $snake[$snakelength + 1][3] ; positions and parts of the snake Dim $food_location[2] ; not possible for multiple food locations? DllOpen("user32.dll") _start() Global $dx = 1 Global $dy = 0 _sleep() While 1 Sleep($speedder) If _IsPressed(25) Then $dx = -1 $dy = 0 EndIf If _IsPressed(27) Then $dx = 1 $dy = 0 EndIf If _IsPressed(26) Then $dx = 0 $dy = -1 EndIf If _IsPressed(28) Then $dx = 0 $dy = 1 EndIf move() If _IsPressed(20) Then _sleep() EndIf WEnd Func _start() $snakelength = 0 ReDim $snake[$snakelength + 1][3] Local $x, $y, $a, $b, $pos For $x = 0 To 39 For $y = 0 To 39 $board[$x][$y] = 1 ; empty Next Next $a = Int(Random(3, 36)) $b = Int(Random(3, 36)) $snake[0][2] = GUICtrlCreateLabel("", $a * 10, $b * 10, 10, 10) GUICtrlSetBkColor($snake[0][2], 16777215) $pos = ControlGetPos($gui, "", $snake[0][2]) $snake[0][0] = Int($pos[0] / 10) $snake[0][1] = Int($pos[1] / 10) ;MsgBox (0, "Diagnostic", $snake[0][0] & ", " & $snake[0][1]) $board[$a][$b] = 0 ; snake simplifies the "can I go there?" logic Do $a = Int(Random(0, 39)) $b = Int(Random(0, 39)) Until $board[$a][$b] = 1 ; empty $food = GUICtrlCreateLabel("", $a * 10, $b * 10, 10, 10) $pos2 = ControlGetPos($gui, "", $food) $food_location[0] = $pos2[0] / 10 $food_location[1] = $pos2[1] / 10 GUICtrlSetBkColor($food, 39219) $board[$a][$b] = 2 ; food EndFunc ;==>_start Func move() Local $newhead[3] $newhead[0] = $snake[0][0] + $dx $newhead[1] = $snake[0][1] + $dy Local $oldtail[3] $oldtail[0] = $snake[$snakelength][0] $oldtail[1] = $snake[$snakelength][1] $oldtail[2] = $snake[$snakelength][2] Select Case $newhead[0] < 0 Or $newhead[0] > 39 Or $newhead[1] < 0 Or $newhead[1] > 39 If $snakelength > 0 Then MsgBox(0, "Your snake ate the wall.", "Your snake was "& ($snakelength + 1) & " units long") Else MsgBox(0, "Your snake ate the wall.", "You should play with your snake more.") EndIf _cleanup() Case $board[$newhead[0]][$newhead[1]] ; OK to go there $newhead[2] = GUICtrlCreateLabel("", $newhead[0] * 10, $newhead[1] * 10, 10, 10) GUICtrlSetBkColor($newhead[2], 16777215) If $board[$newhead[0]][$newhead[1]] = 2 Then ; Ate Food ; Move food Do $a = Int(Random(0, 39)) $b = Int(Random(0, 39)) Until $board[$a][$b] = 1 ; empty $board[$a][$b] = 2 ; food GUICtrlSetPos($food, $a * 10, $b * 10) $snakelength = $snakelength + 1 ReDim $snake[$snakelength + 1][3] Else GUICtrlDelete($oldtail[2]) $board[$oldtail[0]][$oldtail[1]] = 1 EndIf $board[$newhead[0]][$newhead[1]] = 0 For $i = $snakelength To 1 Step - 1 ; Array shift $snake[$i][0] = $snake[$i - 1][0] $snake[$i][1] = $snake[$i - 1][1] $snake[$i][2] = $snake[$i - 1][2] Next $snake[0][0] = $newhead[0] $snake[0][1] = $newhead[1] $snake[0][2] = $newhead[2] Case Else ;eat self MsgBox(0, "Yor snake ate itself", "You snake was "& ($snakelength + 1) & " units long") _cleanup() EndSelect EndFunc ;==>move Func _cleanup() For $x = 0 To 39 For $y = 0 To 39 $board[$x][$y] = 1 ; empty Next Next GUICtrlDelete($food) For $i = 0 To $snakelength GUICtrlDelete($snake[$i][2]) Next _start() ; This is going to choke after 300 something calls _sleep() EndFunc ;==>_cleanup Func _Exit() DllClose("user32.dll") Exit EndFunc ;==>_Exit Func _sleep() Do Do Sleep(100) Until _IsPressed(25) Or _IsPressed(26) Or _IsPressed(27) Or _IsPressed(28) If _IsPressed(25) Then $dx = -1 $dy = 0 EndIf If _IsPressed(27) Then $dx = 1 $dy = 0 EndIf If _IsPressed(26) Then $dx = 0 $dy = -1 EndIf If _IsPressed(28) Then $dx = 0 $dy = 1 EndIf Until _IsPressed(25) Or _IsPressed(26) Or _IsPressed(27) Or _IsPressed(28) EndFunc ;==>_sleep Func _IsPressed($hexkey) Local $ar, $brv $hexkey = '0x' & $hexkey $ar = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexkey) If $ar[0] <> 0 Then $brv = 1 Else $brv = 0 EndIf Return $brv EndFunc ;==>_IsPressed its long though so ill put a copy as an atatchment for the sake of ease... as soon as i figure out how Link to comment Share on other sites More sharing options...
friendlycyclone Posted July 5, 2013 Author Share Posted July 5, 2013 again im really sorry about the confusion Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted July 5, 2013 Moderators Share Posted July 5, 2013 friendlycyclone,No problem - but I have house guests this weekend so I may not have too much time to look at it for a while. Just do not hold your breath - or if you do, hope that someone else steps in! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
friendlycyclone Posted July 5, 2013 Author Share Posted July 5, 2013 a bit off topic but i also would like to know if there were any simple ways to make an object that you can manipulate in the snake program it seemed like it was changing the color of the board arays were the "snake" would be as aposed to having the snake move over the board. so i would like to know two things. 1) is it possible to have an objects that moves independantly of eachother 2) how do you set the color of a certain place in an array (or something along those lines) p.s. im trying to make it look like legend of zelda were it will change when i get to the edge of the screen so if that is impossible well then poop Link to comment Share on other sites More sharing options...
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