zelda
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- using System;
- using System.Collections.Generic;
- partial class GAME : Game
- {
- static void Main() { new GAME().Run(); }
- GraphicsDeviceManager graphics;
- SpriteBatch sprite_batch;
- int draw_scale = 3;
- Matrix scale_matrix;
- const int NES_W = 256;
- const int NES_H = 224;
- const int HUD_H = 56;
- XY SCREEN_SIZE = new XY(16, 11) * new XY(16, 16);
- Dictionary<string, Texture2D> pngs;
- Texture2D bg_png;
- Vector2 link_pos;
- XY link_dir;
- float link_speed;
- bool using_sword;
- Vector2 sword_pos;
- ANIM link_anim;
- ANIM sword_anim;
- class FRAME
- {
- public string png;
- public XY xy;
- public static FRAME EMPTY = new FRAME("", 0, 0);
- public FRAME() { }
- public FRAME(string png, int x, int y) { this.png = png; xy.x = x; xy.y = y; }
- }
- class ANIM
- {
- public bool repeats;
- public int frame;
- public FRAME[] frames;
- public ANIM() { }
- public ANIM(FRAME[] frames) { this.frames = frames; }
- }
- Dictionary<string, ANIM> anims;
- void reset_anim(ANIM anim) { anim.frame = 0; }
- void update_anim(ANIM anim)
- {
- if (anim.frame < anim.frames.Length) anim.frame++;
- if (anim.frame == anim.frames.Length && anim.repeats) anim.frame = 0;
- }
- bool anim_done(ANIM anim) { return anim.frame >= anim.frames.Length; }
- string anim_png(ANIM anim)
- {
- if (anim.frame >= anim.frames.Length) return null;
- return anim.frames[anim.frame].png;
- }
- XY anim_offset(ANIM anim)
- {
- if (anim.frame >= anim.frames.Length) return XY.ZERO;
- return anim.frames[anim.frame].xy;
- }
- // from anims.cs //
- void init_anims()
- {
- anims = new Dictionary<string, ANIM>();
- // just pulled one dir of each //
- anims.Add("link_walk_e", new ANIM(new FRAME[]
- {
- new FRAME("link_walk_e1", 0, 0), // 0
- new FRAME("link_walk_e1", 0, 0), // 1
- new FRAME("link_walk_e1", 0, 0), // 2
- new FRAME("link_walk_e1", 0, 0), // 3
- new FRAME("link_walk_e1", 0, 0), // 4
- new FRAME("link_walk_e1", 0, 0), // 5
- new FRAME("link_walk_e2", 0, 0), // 6
- new FRAME("link_walk_e2", 0, 0), // 7
- new FRAME("link_walk_e2", 0, 0), // 8
- new FRAME("link_walk_e2", 0, 0), // 9
- new FRAME("link_walk_e2", 0, 0), // 10
- new FRAME("link_walk_e2", 0, 0), // 11
- })); anims["link_walk_e"].repeats = true;
- anims.Add("link_attack_e", new ANIM(new FRAME[]
- {
- new FRAME("link_attack_e", 0, 0), // 0
- new FRAME("link_attack_e", 0, 0), // 1
- new FRAME("link_attack_e", 0, 0), // 2
- new FRAME("link_attack_e", 0, 0), // 3
- new FRAME("link_attack_e", 0, 0), // 4
- new FRAME("link_attack_e", 0, 0), // 5
- new FRAME("link_attack_e", 0, 0), // 6
- new FRAME("link_attack_e", 0, 0), // 7
- new FRAME("link_attack_e", 0, 0), // 8
- new FRAME("link_attack_e", 0, 0), // 9
- new FRAME("link_attack_e", 0, 0), // 10
- new FRAME("link_attack_e", 0, 0), // 11
- new FRAME("link_walk_e2", 0, 0), // 12
- new FRAME("link_walk_e1", 0, 0), // 13
- }));
- anims.Add("sword_e", new ANIM(new FRAME[]
- {
- FRAME.EMPTY, // 0
- FRAME.EMPTY, // 1
- FRAME.EMPTY, // 2
- FRAME.EMPTY, // 3
- new FRAME("sword_e", +11, 0), // 4
- new FRAME("sword_e", +11, 0), // 5
- new FRAME("sword_e", +11, 0), // 6
- new FRAME("sword_e", +11, 0), // 7
- new FRAME("sword_e", +11, 0), // 8
- new FRAME("sword_e", +11, 0), // 9
- new FRAME("sword_e", +11, 0), // 10
- new FRAME("sword_e", +11, 0), // 11
- new FRAME("sword_e", +8, 0), // 12
- new FRAME("sword_e", +4, 0), // 13
- }));
- }
- public GAME()
- {
- graphics = new GraphicsDeviceManager(this);
- set_backbuffer_size(NES_W * draw_scale, NES_H * draw_scale);
- IsMouseVisible = true;
- }
- protected override void LoadContent()
- {
- sprite_batch = new SpriteBatch(GraphicsDevice);
- scale_matrix = Matrix.CreateScale(draw_scale);
- pngs = load_pngs(".");
- pngs.Add("", null);
- init_anims();
- bg_png = pngs["background"];
- link_anim = anims["link_walk_n"];
- link_dir = XY.UP;
- link_pos = new Vector2(120, 136);
- link_speed = 1.5f;
- using_sword = false;
- }
- protected override void Update(GameTime gameTime)
- {
- update_keyboard();
- if (using_sword)
- {
- update_anim(link_anim);
- update_anim(sword_anim);
- sword_pos = link_pos + anim_offset(sword_anim);
- if (anim_done(sword_anim))
- {
- using_sword = false;
- if (link_dir == XY.UP) link_anim = anims["link_walk_n"];
- else if (link_dir == XY.DOWN) link_anim = anims["link_walk_s"];
- else if (link_dir == XY.LEFT) link_anim = anims["link_walk_w"];
- else if (link_dir == XY.RIGHT) link_anim = anims["link_walk_e"];
- reset_anim(link_anim);
- }
- }
- if (!using_sword)
- {
- if (keydown(Keys.X))
- {
- using_sword = true;
- char dir_c = '\0';
- if (link_dir == XY.UP) dir_c = 'n';
- else if (link_dir == XY.DOWN) dir_c = 's';
- else if (link_dir == XY.LEFT) dir_c = 'w';
- else if (link_dir == XY.RIGHT) dir_c = 'e';
- link_anim = anims["link_attack_" + dir_c];
- sword_anim = anims["sword_" + dir_c];
- reset_anim(link_anim);
- reset_anim(sword_anim);
- sword_pos = link_pos + anim_offset(sword_anim);
- }
- else if (keydown(Keys.Up))
- {
- update_anim(link_anim);
- if (link_dir != XY.UP)
- {
- link_dir = XY.UP;
- link_anim = anims["link_walk_n"];
- reset_anim(link_anim);
- }
- link_pos += link_dir * link_speed;
- }
- else if (keydown(Keys.Down))
- {
- update_anim(link_anim);
- if (link_dir != XY.DOWN)
- {
- link_dir = XY.DOWN;
- link_anim = anims["link_walk_s"];
- reset_anim(link_anim);
- }
- link_pos += link_dir * link_speed;
- }
- else if (keydown(Keys.Left))
- {
- update_anim(link_anim);
- if (link_dir != XY.LEFT)
- {
- link_dir = XY.LEFT;
- link_anim = anims["link_walk_w"];
- reset_anim(link_anim);
- }
- link_pos += link_dir * link_speed;
- }
- else if (keydown(Keys.Right))
- {
- update_anim(link_anim);
- if (link_dir != XY.RIGHT)
- {
- link_dir = XY.RIGHT;
- link_anim = anims["link_walk_e"];
- reset_anim(link_anim);
- }
- link_pos += link_dir * link_speed;
- }
- }
- base.Update(gameTime);
- }
- protected override void Draw(GameTime gameTime)
- {
- GraphicsDevice.Clear(Color.Black);
- start_batch(scale_matrix);
- draw_sprite(bg_png, Vector2.Zero, null, Color.White);
- if (using_sword) draw_sprite(pngs[anim_png(sword_anim)], (XY)sword_pos, null, Color.White);
- draw_sprite(pngs[anim_png(link_anim)], (XY)link_pos, null, Color.White);
- end_batch();
- base.Draw(gameTime);
- }
- }
Pasted 2026-08-21 12:21:50
Short link:
Short link:
Recent Public Pastes