ziglings/exercises/038_structs2.zig

59 lines
1.5 KiB
Zig
Raw Normal View History

2021-02-06 21:54:56 +01:00
//
// Grouping values in structs is not merely convenient. It also allows
// us to treat the values as a single item when storing them, passing
// them to functions, etc.
2021-02-15 22:55:44 +01:00
//
2021-02-06 21:54:56 +01:00
// This exercise demonstrates how we can store structs in an array and
// how doing so lets us print them using a loop.
2021-02-06 21:54:56 +01:00
//
const std = @import("std");
const Role = enum {
2021-02-06 21:54:56 +01:00
wizard,
thief,
bard,
warrior,
};
2021-02-15 22:55:44 +01:00
const Character = struct {
role: Role,
2021-02-06 21:54:56 +01:00
gold: u32,
health: u8,
experience: u32,
};
pub fn main() void {
var chars: [2]Character = undefined;
// Glorp the Wise
chars[0] = Character{
.role = Role.wizard,
2021-02-15 22:55:44 +01:00
.gold = 20,
.health = 100,
2021-02-06 21:54:56 +01:00
.experience = 10,
};
// Please add "Zump the Loud" with the following properties:
//
// role bard
2021-02-06 21:54:56 +01:00
// gold 10
// health 100
// experience 20
//
// Feel free to run this program without adding Zump. What does
// it do and why?
// Printing all RPG characters in a loop:
for (chars, 0..) |c, num| {
2021-02-15 22:55:44 +01:00
std.debug.print("Character {} - G:{} H:{} XP:{}\n", .{
num + 1, c.gold, c.health, c.experience,
});
2021-02-06 21:54:56 +01:00
}
}
// If you tried running the program without adding Zump as mentioned
// above, you get what appear to be "garbage" values. In debug mode
// (which is the default), Zig writes the repeating pattern "10101010"
// in binary (or 0xAA in hex) to all undefined locations to make them
// easier to spot when debugging.