use bevy::prelude::*; struct SnakeHead; struct Materials { head_material: Handle, } fn setup(commands: &mut Commands, mut materials: ResMut>) { commands.spawn(Camera2dBundle::default()); commands.insert_resource(Materials { head_material: materials.add(Color::rgb(0.7, 0.7, 0.7).into()), }); } fn spawn_snake(commands: &mut Commands, materials: Res) { commands .spawn(SpriteBundle { material: materials.head_material.clone(), sprite: Sprite::new(Vec2::new(10.0, 10.0)), ..Default::default() }) .with(SnakeHead); } fn snake_movement( keyboard_input: Res>, mut head_positions: Query<&mut Transform, With>, ) { for mut transform in head_positions.iter_mut() { if keyboard_input.pressed(KeyCode::Left) { transform.translation.x -= 2.; } if keyboard_input.pressed(KeyCode::Right) { transform.translation.x += 2.; } if keyboard_input.pressed(KeyCode::Down) { transform.translation.y -= 2.; } if keyboard_input.pressed(KeyCode::Up) { transform.translation.y += 2.; } } } fn main() { App::build() .add_startup_system(setup.system()) .add_startup_stage("game_setup", SystemStage::single(spawn_snake.system())) .add_system(snake_movement.system()) .add_plugins(DefaultPlugins) .run(); }