Removed useless code borrowed from Rusty_Golfy

This commit is contained in:
2022-05-18 11:55:35 +02:00
commit 3d5c4af0a2
4 changed files with 581 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/target

117
Cargo.lock generated Normal file
View File

@@ -0,0 +1,117 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "getrandom"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
dependencies = [
"cfg-if",
"libc",
"wasi",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
[[package]]
name = "ppv-lite86"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
[[package]]
name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
"rand_chacha",
"rand_core",
]
[[package]]
name = "rand_chacha"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
"rand_core",
]
[[package]]
name = "rand_core"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
dependencies = [
"getrandom",
]
[[package]]
name = "rusty_jumpy"
version = "0.1.0"
dependencies = [
"rand",
"sdl2",
]
[[package]]
name = "sdl2"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
dependencies = [
"bitflags",
"lazy_static",
"libc",
"sdl2-sys",
]
[[package]]
name = "sdl2-sys"
version = "0.35.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
dependencies = [
"cfg-if",
"libc",
"version-compare",
]
[[package]]
name = "version-compare"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
[[package]]
name = "wasi"
version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"

10
Cargo.toml Normal file
View File

@@ -0,0 +1,10 @@
[package]
name = "rusty_jumpy"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
sdl2 = "0.35.2"
rand = "0.8.5"

453
src/main.rs Normal file
View File

@@ -0,0 +1,453 @@
use sdl2::pixels::Color;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::keyboard::Scancode;
use std::time::Duration;
use sdl2::rect::Point;
use sdl2::rect::Rect;
use rand::Rng;
const WINDOW_WIDTH:i32 = 1000;
const WINDOW_HEIGHT:i32 = 500;
const DEBUG_FX_SIZE_RATIO:i32 = 3;
const DEFAULT_BALL_WIDTH:i32 = 20;
const BALL_SPEED:i32 = 2;
const MAX_SPEED:i32 = 20;
const ARROW_PARTS:i32 = 10;
const ARROW_WIDTH:i32 = 3;
const ARROW_SIZE_RATIO:i32= DEBUG_FX_SIZE_RATIO;
const DEFAULT_START_BALL_LOCATION_X:i32 = WINDOW_WIDTH /2 - DEFAULT_BALL_WIDTH / 2;
const DEFAULT_START_BALL_LOCATION_Y:i32 = WINDOW_HEIGHT /2 - DEFAULT_BALL_WIDTH / 2;
const BOUNCE_RATIO:i32 = 80;
const DEFAULT_MAP_WIDTH:i32 = 50;
const DEFAULT_MAP_HEIGHT:i32 = 25;
const DEFAULT_MAP:&[Tile] = &[
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky, Tile::sky,Tile::sky,Tile::sky,Tile::sky,Tile::sky,
Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock,
Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock,
Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock,
Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock,
Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock, Tile::rock,Tile::rock,Tile::rock,Tile::rock,Tile::rock,
];
#[derive(Clone)]
enum Tile{
sky,
grass,
rock,
sand,
debug,
}
pub struct Map{
size:Point,
grid:Vec<Tile>,
}
impl Map{
fn new() -> Self{
//let (width,height) = (DEFAULT_MAP_WIDTH,DEFAULT_MAP_HEIGHT);
Map{
size:Point::new(DEFAULT_MAP_WIDTH,DEFAULT_MAP_HEIGHT),
//grid:vec![;width as usize * height as usize],
grid:DEFAULT_MAP.to_vec(),
}
}
fn randomize(&mut self){
let mut rng = rand::thread_rng();
for x in 0..self.size.x{
for y in 0..self.size.y{
let index = x + self.size.x * y;
//4 because there are 0-3 tiles possibles
let rnd:i32 = rng.gen_range(0..4);
let tile:Tile;
match rnd{
0=>{
tile = Tile::sky;
}
1=>{
tile = Tile::grass;
}
2=>{
tile = Tile::rock;
}
3=>{
tile = Tile::sand;
}
_=>{tile = Tile::debug}
}
self.grid[index as usize] = tile;
}
}
}
pub fn render(&mut self,ctx:&mut sdl2::render::Canvas<sdl2::video::Window>,debug:bool){
let width = WINDOW_WIDTH / self.size.x;
let height = WINDOW_HEIGHT / self.size.y;
for x in 0..self.size.x{
for y in 0..self.size.y{
let rect = Rect::new(x * width,y * height,width as u32,height as u32);
let index = x + self.size.x * y;
let debug_color:Color = Color::RGB(0xFF, 0xFF, 0xFF);
let tile_bg:Color;
match self.grid[index as usize]{
Tile::sky => {
tile_bg = Color::RGB(0x81,0xC3,0xD7);
}
Tile::grass =>{
tile_bg = Color::RGB(0x58, 0x81, 0x57);
}
Tile::rock =>{
tile_bg = Color::RGB(0x28, 0x36, 0x18);
}
Tile::sand =>{
tile_bg = Color::RGB(0xFE, 0xFA, 0xE0);
}
_ => {
//uuuuuuh... whatever d100d1
tile_bg = Color::RGB(0xd1, 0x00, 0xd1);
},
}
ctx.set_draw_color(tile_bg);
ctx.fill_rect(rect).expect("Could not render grid");
if debug{
ctx.set_draw_color(debug_color);
ctx.draw_rect(rect).expect("Could not render debug grid");
}
}
}
}
}
pub struct Game{
main_ball:Entity,
draw_debug:bool,
map:Map,
}
impl Game{
pub fn render(&mut self,ctx:&mut sdl2::render::Canvas<sdl2::video::Window>){
let main_ball_color:Color = Color::RGB(0xFA, 0xFD, 0xF6);
let main_ball_outline:Color = Color::RGB(0x17, 0x2A, 0x33);
let background_color:Color = Color::RGB(0xFF,0xFF,0xFF);
let velocity_color:u8 = ((self.main_ball.velocity.x * 4).abs() + (self.main_ball.velocity.y * 4).abs()) as u8;
let arrow_color:Color = Color::RGB(velocity_color,0x00,0x00);
let arrow_outline:Color = Color::RGB(0x00,0x00,0x00);
ctx.set_draw_color(background_color);
ctx.clear();
//map
self.map.render(ctx,self.draw_debug);
//ball
let center:Point = Point::new(self.main_ball.shape.x + (self.main_ball.shape.width() / 2) as i32,self.main_ball.shape.y + (self.main_ball.shape.width() / 2) as i32);
if self.draw_debug {
ctx.set_draw_color(main_ball_color);
ctx.fill_rect(self.main_ball.shape).expect("Could not fill the rectangle");
ctx.set_draw_color(main_ball_outline);
ctx.draw_rect(self.main_ball.shape).expect("Could not ouline the rectangle");
let apex:Point = Point::new(center.x + (self.main_ball.velocity.x * DEBUG_FX_SIZE_RATIO) as i32,center.y + (self.main_ball.velocity.y * DEBUG_FX_SIZE_RATIO) as i32);
ctx.draw_line(center,apex).expect("Could not render the Debug FX");
}else{
fill_circle(ctx, center.x, center.y,self.main_ball.shape.width() as i32 / 2, main_ball_color);
draw_circle(ctx,center.x,center.y,self.main_ball.shape.width() as i32 / 2, main_ball_outline);
draw_circle(ctx,center.x,center.y,self.main_ball.shape.width() as i32 / 2 + 1, main_ball_outline);
let apex:Point = Point::new(center.x + (self.main_ball.velocity.x * ARROW_SIZE_RATIO) as i32,center.y + (self.main_ball.velocity.y * ARROW_SIZE_RATIO) as i32);
let offset = Point::new(((apex.x - center.x) as f32 / ARROW_PARTS as f32) as i32,((apex.y -center.y) as f32 / ARROW_PARTS as f32) as i32);
for i in 0..ARROW_PARTS{
ctx.set_draw_color(arrow_color);
let center = Point::new(center.x + i*offset.x,center.y + i*offset.y);
fill_circle(ctx, center.x, center.y, ARROW_WIDTH, arrow_color);
draw_circle(ctx, center.x, center.y, ARROW_WIDTH + 1, arrow_outline);
}
}
}
pub fn up(&mut self){
self.main_ball.velocity.y -= BALL_SPEED as i32;
}
pub fn down(&mut self){
self.main_ball.velocity.y += BALL_SPEED as i32;
}
pub fn left(&mut self){
self.main_ball.velocity.x -= BALL_SPEED as i32;
}
pub fn right(&mut self){
self.main_ball.velocity.x += BALL_SPEED as i32;
}
pub fn toggle_debug(&mut self){
self.draw_debug = !self.draw_debug;
}
pub fn left_click(&mut self,mouse_position:Point){
// moves the bloc at the cursor position
self.main_ball.shape.set_x(mouse_position.x - (self.main_ball.shape.width() / 2) as i32);
self.main_ball.shape.set_y(mouse_position.y - (self.main_ball.shape.height() / 2) as i32);
}
pub fn right_click(&mut self,_mouse_position:Point){
// Removes any vectors
self.main_ball.velocity = Point::new(0,0);
}
pub fn update(&mut self){
let bloc = &mut self.main_ball;
let mut posx = bloc.shape.x;
let mut posy = bloc.shape.y;
let width = bloc.shape.width() as i32;
let height = bloc.shape.height() as i32;
//Window Collision Detection
if posy + height >= WINDOW_HEIGHT{
posy = WINDOW_HEIGHT - height;
bloc.velocity.y = bounce(bloc.velocity.y);
}
if posy <= 0{
posy = 0;
bloc.velocity.y = bounce(bloc.velocity.y);
}
if posx + width >= WINDOW_WIDTH{
posx = WINDOW_WIDTH - width;
bloc.velocity.x = bounce(bloc.velocity.x);
}
if posx <= 0{
posx = 0;
bloc.velocity.x = bounce(bloc.velocity.x);
}
//Uggly way to maintain the bloc in a normal speed
if bloc.velocity.x > MAX_SPEED as i32{
bloc.velocity.x = MAX_SPEED as i32;
}
if bloc.velocity.x < -MAX_SPEED as i32{
bloc.velocity.x = -MAX_SPEED as i32;
}
if bloc.velocity.y > MAX_SPEED as i32{
bloc.velocity.y = MAX_SPEED as i32;
}
if bloc.velocity.y < -MAX_SPEED as i32{
bloc.velocity.y = -MAX_SPEED as i32;
}
posx += bloc.velocity.x;
posy += bloc.velocity.y;
bloc.shape.set_x(posx);
bloc.shape.set_y(posy);
}
}
pub fn bounce(acceleration:i32)->i32{
-(acceleration as f32 / 100.0 * BOUNCE_RATIO as f32) as i32
}
//https://stackoverflow.com/questions/65723827/sdl2-function-to-draw-a-filled-circle ## Translated to Rust
pub fn fill_circle(ctx:&mut sdl2::render::Canvas<sdl2::video::Window>, x:i32, y:i32, radius:i32, color:Color)
{
ctx.set_draw_color(color);
let diameter = radius * 2;
for w in 0..diameter{
for h in 0..diameter{
let dx = radius - w; // horizontal offset
let dy = radius - h; // vertical offset
if (dx*dx + dy*dy) <= (radius * radius)
{
ctx.draw_point(Point::new(x + dx, y + dy)).expect("Trouble rendering the circle");
}
}
}
}
// https://stackoverflow.com/questions/38334081/howto-draw-circles-arcs-and-vector-graphics-in-sdl ## Translated to Rust
pub fn draw_circle(ctx:&mut sdl2::render::Canvas<sdl2::video::Window>, centre_x:i32, centre_y:i32, radius:i32, color:Color)
{
ctx.set_draw_color(color);
let diameter = radius * 2;
let mut x:i32 = radius - 1;
let mut y:i32 = 0;
let mut tx:i32 = 1;
let mut ty:i32 = 1;
let mut error:i32 = tx - diameter;
while x >= y
{
// Each of the following renders an octant of the circle
ctx.draw_point(Point::new(centre_x + x, centre_y - y)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x + x, centre_y + y)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x - x, centre_y - y)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x - x, centre_y + y)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x + y, centre_y - x)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x + y, centre_y + x)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x - y, centre_y - x)).expect("Trouble rendering the circle");
ctx.draw_point(Point::new(centre_x - y, centre_y + x)).expect("Trouble rendering the circle");
if error <= 0{
y+= 1;
error += ty;
ty += 2;
}
if error > 0{
x -= 1;
tx += 2;
error += tx - diameter;
}
}
}
pub struct Entity{
shape:Rect,
velocity:Point,
}
fn is_up_pressed(e: &sdl2::EventPump) -> bool {
e.keyboard_state().is_scancode_pressed(Scancode::W) || e.keyboard_state().is_scancode_pressed(Scancode::Up)
}
fn is_down_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::S) || e.keyboard_state().is_scancode_pressed(Scancode::Down)
}
fn is_left_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::A) || e.keyboard_state().is_scancode_pressed(Scancode::Left)
}
fn is_right_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::D) || e.keyboard_state().is_scancode_pressed(Scancode::Right)
}
fn is_random_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::R)
}
fn is_tab_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::Tab)
}
fn is_space_pressed(e: &sdl2::EventPump)-> bool{
e.keyboard_state().is_scancode_pressed(Scancode::Space)
}
fn check_mouse_left_pressed(e: &sdl2::EventPump) -> Point{
if e.mouse_state().left(){
return Point::new(e.mouse_state().x(),e.mouse_state().y());
}else{
return Point::new(-1,-1);
}
}
fn check_mouse_right_pressed(e: &sdl2::EventPump) -> Point{
if e.mouse_state().right(){
return Point::new(e.mouse_state().x(),e.mouse_state().y());
}else{
return Point::new(-1,-1);
}
}
pub fn main_loop(canvas: &mut sdl2::render::Canvas<sdl2::video::Window>,event_pump:&mut sdl2::EventPump,game:&mut Game){
//let (mut up_state,mut down_state,mut left_state,mut right_state) = (false,false,false,false);
let (mut tab_state,mut space_state) = (false,false);
let mut quit = false;
loop{
if is_up_pressed(event_pump){
game.up();
}
if is_down_pressed(event_pump){
game.down();
}
if is_left_pressed(event_pump){
game.left();
}
if is_right_pressed(event_pump){
game.right();
}
if is_random_pressed(event_pump){
game.map.randomize();
}
if is_tab_pressed(event_pump){
if tab_state == false{
//Keydown
tab_state = true;
game.toggle_debug();
}
}else{
if tab_state == true{
//keyUp
tab_state = false
}
}
if is_space_pressed(event_pump){
if space_state == false{
//KeyDown
space_state = true;
}
}else{
if space_state == true{
//KeyDown
space_state = false;
}
}
let mut mouse_position:Point = check_mouse_left_pressed(event_pump);
if mouse_position.x >=0 && mouse_position.y >= 0{
game.left_click(mouse_position);
}
mouse_position = check_mouse_right_pressed(event_pump);
if mouse_position.x >=0 && mouse_position.y >= 0{
game.right_click(mouse_position);
}
for event in event_pump.poll_iter() {
match event {
Event::Quit {..} |
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
quit = true;
break
},
_ => {}
}
}
// MAIN LOOP
game.update();
game.render(canvas);
// MAIN LOOP
canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
if quit{
break;
}
}
}
pub fn main() {
let sdl_context = sdl2::init().unwrap();
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem.window("Rusty Jumpy", WINDOW_WIDTH as u32, WINDOW_HEIGHT as u32)
.position_centered()
.build()
.unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let mut event_pump = sdl_context.event_pump().unwrap();
canvas.set_draw_color(Color::RGB(0x6D, 0x6D, 0x64));
let main_ball_rectangle = Rect::new(
DEFAULT_START_BALL_LOCATION_X,DEFAULT_START_BALL_LOCATION_Y, DEFAULT_BALL_WIDTH as u32, DEFAULT_BALL_WIDTH as u32);
let main_ball_velocity = Point::new(0,0);
let main_entity = Entity{
shape:main_ball_rectangle,
velocity:main_ball_velocity
};
let mut game = Game{main_ball:main_entity,draw_debug:false,map:Map::new()};
main_loop(&mut canvas,&mut event_pump,&mut game);
}