1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
extern crate piston;
extern crate graphics;
extern crate glutin_window;
extern crate opengl_graphics;

use piston::window::WindowSettings;
use piston::event_loop::*;
use piston::input::*;
use glutin_window::GlutinWindow;
use opengl_graphics::{ GlGraphics, OpenGL };

struct Game{
    gl:GlGraphics,
    snek: Snek,
}

impl Game{
    fn render(&mut self, arg: &RenderArgs){
        use graphics;

        let blue: [f32; 4] = [0.0, 0.0, 1.0, 1.0];

        self.gl.draw(arg.viewport(), |_c, gl|{
            graphics::clear(blue, gl);
        });

        self.snek.render(&mut self.gl, arg);
    }
}

struct Snek{
    x: i32,
    y: i32,
}

impl Snek{
    fn render(&self, gl: &mut GlGraphics, args: &RenderArgs){
        use graphics;

        let red: [f32; 4] = [1.0, 0.0, 0.0, 1.0];

        let square = graphics::rectangle::square(self.x as f64, self.y as f64, 20_f64);

        gl.draw(args.viewport(), |c, gl|{
            let transform = c.transform;

            graphics::rectangle(red, square, transform, gl);
    });
    }
}

fn main() {
    let opengl = OpenGL::V3_2;

    let mut window: GlutinWindow = WindowSettings::new(
        "Rusty Snek Gaem",
        [512, 512]
    ).opengl(opengl)
        .exit_on_esc(true)
        .build()
        .unwrap();

    let mut game = Game{
        gl: GlGraphics::new(opengl),
        snek: Snek {x: 50, y: 50},
    };

    let mut events = Events::new(EventSettings::new());
    while let Some(e) = events.next(&mut window) {
        if let Some(r) = e.render_args() {
            game.render(&r);
        }
    }
}