Class Snake
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
uno.anahata.asi.swing.games.Snake
- All Implemented Interfaces:
ActionListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible
A classic Snake game implementation with a Mapacho theme.
Features grid-based movement, randomized "cigar" spawning, and a score tracking system. Optimized for execution as a standalone easter egg from the support panel.
- Author:
- anahata
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassInner class for handling directional input.Nested classes/interfaces inherited from class JPanel
JPanel.AccessibleJPanelNested classes/interfaces inherited from class JComponent
JComponent.AccessibleJComponentNested classes/interfaces inherited from class Container
Container.AccessibleAWTContainerNested classes/interfaces inherited from class Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final intThe maximum possible tiles fitting onto the board.private intThe current length of the snake.private intThe number of cigars eaten during this round.private intThe current grid X coordinate of the cigar target.private intThe current grid Y coordinate of the cigar target.private charThe active snake movement direction (U, D, L, R).private final intThe height of the game board in pixels.private RandomRandom generator used to spawn new cigars.private booleanFlag indicating if the game loop is active.private final intThe size of a single grid square in pixels.private TimerThe animation and tick update timer.private final intThe width of the game board in pixels.private final int[]Array tracking the horizontal coordinates of all snake segments.private final int[]Array tracking the vertical coordinates of all snake segments.Fields inherited from class JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWFields inherited from class Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, PROPERTIES, SOMEBITS -
Constructor Summary
ConstructorsConstructorDescriptionSnake()Constructs a new Snake game panel, initializing keyboard events and starting the game. -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidChecks if the head has collided with a cigar.voidChecks for collisions with walls or the snake's own body.voidRenders the game elements.voidRenders the game over screen.static voidLauncher for the Mapacho Snake game.voidmove()Updates the snake's position based on the current direction.voidnewCigar()Randomly positions a new cigar on the grid.voidvoidInitializes the game state and starts the animation timer.Methods inherited from class JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUIMethods inherited from class JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, updateMethods inherited from class Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTreeMethods inherited from class Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Field Details
-
TILE_SIZE
private final int TILE_SIZEThe size of a single grid square in pixels.- See Also:
-
WIDTH
private final int WIDTHThe width of the game board in pixels.- See Also:
-
HEIGHT
private final int HEIGHTThe height of the game board in pixels.- See Also:
-
ALL_TILES
private final int ALL_TILESThe maximum possible tiles fitting onto the board.- See Also:
-
x
private final int[] xArray tracking the horizontal coordinates of all snake segments. -
y
private final int[] yArray tracking the vertical coordinates of all snake segments. -
bodyParts
private int bodyPartsThe current length of the snake. -
cigarsEaten
private int cigarsEatenThe number of cigars eaten during this round. -
cigarX
private int cigarXThe current grid X coordinate of the cigar target. -
cigarY
private int cigarYThe current grid Y coordinate of the cigar target. -
direction
private char directionThe active snake movement direction (U, D, L, R). -
running
private boolean runningFlag indicating if the game loop is active. -
timer
The animation and tick update timer. -
random
Random generator used to spawn new cigars.
-
-
Constructor Details
-
Snake
public Snake()Constructs a new Snake game panel, initializing keyboard events and starting the game.
-
-
Method Details
-
startGame
public void startGame()Initializes the game state and starts the animation timer. -
paintComponent
Handles the visual rendering of the mapacho-snake, the cigars, and the HUD (score and status messages).
- Overrides:
paintComponentin classJComponent
-
draw
-
newCigar
public void newCigar()Randomly positions a new cigar on the grid. -
move
public void move()Updates the snake's position based on the current direction. -
checkCigar
public void checkCigar()Checks if the head has collided with a cigar. -
checkCollisions
public void checkCollisions()Checks for collisions with walls or the snake's own body. -
gameOver
Renders the game over screen.- Parameters:
g- the graphics context.
-
actionPerformed
The primary game loop triggered by the timer.
- Specified by:
actionPerformedin interfaceActionListener
-
main
Launcher for the Mapacho Snake game.- Parameters:
args- command line arguments (ignored).
-

