I take it that you want to focus in 2D, tile-based games for now (at least until you finish this project)?
>1: is this how it's done? Checking what's going on every single second? I wish I knew how old games like Shin Megami Tensei on the SNES and Wizardry did this.
Yes, basically you check things every time you update your main loop.
If you read fwd_key as input, you have to immediately check whether you're clashing if the player moves forward 1 tile, and move only if that is false. I think you may learn a thing or two from downloading nethack (or any other hack variant, for that matter). The source is in C, but it's the logic of how things are done what may interest you.
>2: Having the level be a matrix is super simple and I don't know how levels are stored in games usually.
Take this with a grain of salt, but I believe it's not really different from this, other than maybe compressing it and or arranging it in a way that when you load the game from a savestate, it reads what "tile" goes where, where every object was last time you saved, and numbers such as hp, gold, etc. so you end up with some "map" for your tiles, numbers with positions for characters/objects on ground, inventories, stats, switches and other stuff.