mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 10:12:45 +00:00 
			
		
		
		
	 1682f0b760
			
		
	
	
		1682f0b760
		
	
	
	
	
		
			
			SPDX License Identifiers are a more compact / standardized way of representing file license information. See: https://spdx.dev/resources/use/#identifiers This was done with the `ambr` search and replace tool. ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/CircularQueue.h>
 | |
| #include <AK/NonnullRefPtrVector.h>
 | |
| #include <LibGUI/Widget.h>
 | |
| 
 | |
| class SnakeGame : public GUI::Widget {
 | |
|     C_OBJECT(SnakeGame)
 | |
| public:
 | |
|     virtual ~SnakeGame() override;
 | |
| 
 | |
|     void reset();
 | |
| 
 | |
| private:
 | |
|     SnakeGame();
 | |
|     virtual void paint_event(GUI::PaintEvent&) override;
 | |
|     virtual void keydown_event(GUI::KeyEvent&) override;
 | |
|     virtual void timer_event(Core::TimerEvent&) override;
 | |
| 
 | |
|     struct Coordinate {
 | |
|         int row { 0 };
 | |
|         int column { 0 };
 | |
| 
 | |
|         bool operator==(const Coordinate& other) const
 | |
|         {
 | |
|             return row == other.row && column == other.column;
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     struct Velocity {
 | |
|         int vertical { 0 };
 | |
|         int horizontal { 0 };
 | |
|     };
 | |
| 
 | |
|     void game_over();
 | |
|     void spawn_fruit();
 | |
|     bool is_available(const Coordinate&);
 | |
|     void queue_velocity(int v, int h);
 | |
|     const Velocity& last_velocity() const;
 | |
|     Gfx::IntRect cell_rect(const Coordinate&) const;
 | |
|     Gfx::IntRect score_rect() const;
 | |
|     Gfx::IntRect high_score_rect() const;
 | |
| 
 | |
|     int m_rows { 20 };
 | |
|     int m_columns { 20 };
 | |
| 
 | |
|     Velocity m_velocity { 0, 1 };
 | |
|     Velocity m_last_velocity { 0, 1 };
 | |
| 
 | |
|     CircularQueue<Velocity, 10> m_velocity_queue;
 | |
| 
 | |
|     Coordinate m_head;
 | |
|     Vector<Coordinate> m_tail;
 | |
| 
 | |
|     Coordinate m_fruit;
 | |
|     int m_fruit_type { 0 };
 | |
| 
 | |
|     size_t m_length { 0 };
 | |
|     unsigned m_score { 0 };
 | |
|     String m_score_text;
 | |
|     unsigned m_high_score { 0 };
 | |
|     String m_high_score_text;
 | |
| 
 | |
|     NonnullRefPtrVector<Gfx::Bitmap> m_fruit_bitmaps;
 | |
| };
 |