Summary
Video games have been a vehicle for learning to program since the early days of computing. Continuing in that tradition, Paul Craven created the Arcade library as a modern alternative to PyGame for use in his classroom. In this episode he explains his motivations for starting a new framework for video game development, his view on the benefits of games in computer education, and how his students and the broader community are using it to build interesting and creative projects. If you are looking for a way to get new programmers engaged, or just want to experiment with building your own games, then this is the conversation for you. Give it a listen and then give Arcade a try for yourself.
Announcements
- Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
- When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With 200 Gbit/s private networking, scalable shared block storage, node balancers, and a 40 Gbit/s public network, all controlled by a brand new API you’ve got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. Go to pythonpodcast.com/linode to get a $20 credit and launch a new server in under a minute. And don’t forget to thank them for their continued support of this show!
- You listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers you don’t want to miss out on this year’s conference season. We have partnered with organizations such as O’Reilly Media, Corinium Global Intelligence, ODSC, and Data Council. Upcoming events include the Software Architecture Conference in NYC, Strata Data in San Jose, and PyCon US in Pittsburgh. Go to pythonpodcast.com/conferences to learn more about these and other events, and take advantage of our partner discounts to save money when you register today.
- Your host as usual is Tobias Macey and today I’m interviewing Paul Craven about Arcade, an easy-to-learn Python library for creating 2D video games
Interview
- Introductions
- How did you get introduced to Python?
- Can you start by describing what Arcade is?
- What inspired you to begin working on it?
- Who is your primary audience?
- As an educator, what have you found to be most effective about using games as a vehicle for teaching programming?
- What elements of programming or computer science do you have difficulty in addressing within the context of a video game?
- For someone who wants to move on from working on games to something like web development or data analytics, what elements of software design and structure are easily translated to other domains?
- Can you describe how Arcade is implemented and how the architecture has evolved since you first began working on it?
- If you were to start over today, what would you do differently?
- What have you found to be the most interesting/unexpected/challenging aspects of building and maintaining Arcade?
- What are some of the most interesting/innovative/unexpected ways that you have seen Arcade used?
- When is Arcade the wrong platform, or at what point does someone need to move on from Arcade?
- What do you have planned for the future of Arcade?
Keep In Touch
- @professorcraven on Twitter
- pvcraven on GitHub
- Faculty Page
Picks
- Tobias
- Paul
- Fahrenheit 451 by Ray Bradbury
- “Mistakes can be profited by Man, when i was young I showed my ignorance in people’s faces. They beat me with sticks. By the time I was forty my blunt instrument had been honed to a fine cutting point for me. If you hide your ignorance, no one will hit you and you’ll never learn.”
- Fahrenheit 451 by Ray Bradbury
Closing Announcements
- Thank you for listening! Don’t forget to check out our other show, the Data Engineering Podcast for the latest on modern data management.
- Visit the site to subscribe to the show, sign up for the mailing list, and read the show notes.
- If you’ve learned something or tried out a project from the show then tell us about it! Email hosts@podcastinit.com) with your story.
- To help other people find the show please leave a review on iTunes and tell your friends and co-workers
- Join the community in the new Zulip chat workspace at pythonpodcast.com/chat
Links
- Arcade
- Simpson College
- PyGame
- SDL
- OpenGL
- Unity
- Unreal Engine
- GoDot
- Automate The Boring Stuff With Python
- Minesweeper
- Pyglet
- Spatial Hashing
- Tiled Map Editor
- Python Type Hints
- F Strings
- Data Classes
- PyMunk
- FFMPEG
- PyWeek
- Python Discord
- Arcade Enhancement Requests
The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA
Hello, and welcome to podcast dot in it, the podcast about Python and the people who make it great. When you're ready to launch your next app or want to try a project you hear about on the show, you'll need somewhere to deploy it. So take a look at our friends over at Linode. With 200 gigabit private networking, scalable shared block storage, node balancers, and a 40 gigabit public network, all controlled by a brand new API, you've got everything you need to scale up. And for your tasks that need fast computation, such as training machine learning models, they just launched dedicated CPU instances. And they also have a new object storage service to make storing data for your apps even easier.
Go to python podcast.com/linode, that's l I n o d e, today to get a $20 credit and launch a new server in under a minute. And don't forget to thank them for their continued support of this show. And you listen to this show to learn and stay up to date with the ways that Python is being used, including the latest in machine learning and data analysis. For even more opportunities to meet, listen, and learn from your peers, you don't want to miss out on this year's conference season. We have partnered with organizations such as O'Reilly Media, Corinium Global Intelligence, ODSC, and Data Council.
Upcoming events include the software architecture conference, the Strata data conference, and PyCon US. Go to python podcast dotcom/conferences to learn more about these and other events and take advantage of our partner discounts to save money when you register today. Your host as usual is Tobias Macy. And today, I'm interviewing Paul Craven about Arcade, an easy to learn Python library for creating 2 d video games. So, Paul, can you start by introducing yourself?
[00:01:49] Unknown:
Yeah. I'm Paul Craven. I teach computer science at Simpson College, which is in Indianola, Iowa. And before this, I worked in the IT industry for about 15 years before basically figuring out that my passion is really teaching, and I switched to teaching full time. Doesn't pay as much, but every day is a lot of fun. And, yeah, I'm the primary author of the open source Python arcade library and a lot of the teaching materials that go around it. And I really enjoy producing resources for people learning to program.
[00:02:18] Unknown:
And do you have much of a background in teaching before you started working at Simpson? Or was just something that you had as a result of mentoring people through working in industry or just overall interactions that you've had maybe through community and, environments?
[00:02:33] Unknown:
I've always enjoyed it. I started teaching in their evening program and Simpson College's evening program back in, like, 96 pretty soon right after I got out of grad school. And I just really liked being able to directly see my impact on people when I'm working with back end systems to refinance mortgage applications. You don't really know that you're helping anybody. It's just like work. Right? But I like working 1 on 1 with individuals because then you can figure out if you're actually helping somebody out or not and you can see the impact that you've got. So, yeah, I started then in the evening program and then just basically, enjoyed it. But it was always a side thing until around 2006 where I did full time. Yeah. And also with teaching, you end up having a much bigger
[00:03:22] Unknown:
sort of impact factor because it's not just the code that you're writing. It's you're teaching other people to be able to write their own code. And so with each new cohort of students, you're increasing the number of programmers out in the world who are able to build useful and interesting things.
[00:03:37] Unknown:
Exactly. 1 of the most gratifying things is when you're able to get back together with alumni after they've graduated and you can see the success they've had in their life, and not just programming, but we're talking about, you know, just life in general. And it's 1 of the reasons also that I like teaching at a small private nonprofit institution because our class sizes are like an average of 16 people. So I'm not in the situation where I've got 200 people in my programming class. I really get to know everybody individually.
[00:04:06] Unknown:
And do you remember how you first got introduced to Python?
[00:04:08] Unknown:
Soon after I started teaching, a student gave a presentation on Python. And after you programmed for a while, learning another language isn't exactly high on the list of things that you're jumping up and down to do. But during his presentation, I really saw how incredibly useful it'd be for teaching. Because at the time, we're introductory language was Java. And quite frankly, Java is an absolute terrible language for computer science for people to begin learning to program in. There's so many things you have to type that you just can't explain to the student until, like, at the end of the semester or even, like, the 2nd semester, and they just kinda have to blindly type. But with Python, you can start small and then basically work your way up so that everybody knows exactly what it is that they're typing in and what it's doing for the program. So I just love it as a teaching language.
[00:04:56] Unknown:
And, yeah, it was a student that actually got me started on it. And so as a means of facilitating your work on teaching people to program, you ended up creating this arcade library. So can you start by giving a bit of a description about what it is and what inspired you to first begin creating it? Well, I first started teaching using pygame and Python. I did that for,
[00:05:17] Unknown:
about 10 years ish or so. And I really like pygame. I like teaching students to begin programming via video games. But basically, after a while, I was getting kind of held back on pygame because there were just a lot of things that you had to teach to get around, such as, you could get an image that had transparency to it and pygame would make you select the color that was transparent, even though you really couldn't see what that transparent color was and why it just didn't happen automatically. If you drew an arc, there was a wire pattern on it, and that's been around there forever. You can't rotate an ellipse when you draw it. It used a game loop rather than the more modern event type system. There were just a lot of things that after I sort of fine tune the class enough from teaching it for so long, I realized that if I wanted to get more content into the class, I'd have to actually get a library that didn't force me to teach about the weird oddities of the library.
And at the time, I just kind of wanted to suggest improvements for Pygame. It's open source, but nobody was updating Pygame at the time. I mean, they are now, but at the time, it really wasn't under development. And kinda I looked at creating my own branch, but Pygame is based on SDL, and I really didn't end up liking SDL that much, even the new SDL 2 after playing around with it. Classic mistakes in computer science is to start over from And, yeah, 1 of the most classic mistakes in computer science is to start over from scratch. So I didn't make that decision lightly by any means. And then I basically wanted that library to be based on Open GL instead of SDL.
And then I just kept improving that library over time with really an eye towards not having students get tripped up on weird oddities of the library, inconsistencies in naming, that type of thing, but that they could use modern Python and still learn with and I can basically put more in the class because they don't have I don't have to teach around all these weird aspects of pygame.
[00:07:27] Unknown:
And for the arcade library itself, would you say that your primary audience is your students, or do you also have an eye towards other people who are using it maybe for building more full fledged games or for people to be able to experiment on their own? Yeah. Basically,
[00:07:43] Unknown:
the my intended audience for that is anybody who's learning to program or a hobbyist wanting to do 2 d games for fun. It's not as powerful as some of the Unity, GoDot, and other types of game engines, but it is incredibly easy to get started with. With. You don't have to worry about other template files or that, you don't even have to create classes even just to start drawing something on the screen. It's a very easy to get started with library, and sometimes hobbyists just wanna put together a 2 d game without a lot of
[00:08:20] Unknown:
upfront effort in learning how to use a new game engine. And as an educator and somebody who's using arcade and previously Pygame as a mechanism for teaching students how to program and introducing them to computer science, what have you found to be some of the most effective aspects about using games as a vehicle for that teaching? The most effective
[00:08:43] Unknown:
item that I'm really look looking towards is inspiring students to enjoy programming and keep learning. Because if you get somebody in to your class and you teach them quite a bit, but they aren't inspired to continue learning or do anything else with programming, then there really wasn't a whole lot of point to it. But if I can get students to realize that programming is something that they can do and is fun, then that's key. So inspiring students is the top thing, the aspect of visual learning so that if a number isn't quite right, they'll actually see their sprite move across the screen in a manner that they don't want rather than just a wrong number on a report that's printed out that really isn't that interesting. And when you teach using video games, you still can cover all the classic computer science based topics you would do in a normal introductory class. You just do it in more of a game centered focus to inspire the students and
[00:09:43] Unknown:
make it a lot more visual. And as you start to get into some of the more advanced computer science topics, is there any point at which video games cease to become an effective vehicle for teaching and you need to go into something else? Or do you think that video games are useful throughout and you haven't really run into any limitations
[00:10:02] Unknown:
of that as a means of addressing some of those different computer science elements? It's fairly effective for what I would consider 1st semester, where you're doing conditionals and loops and understanding basic data manipulation expressions, that type of thing. I really like it also for teaching classes because then a class actually ends up being an object on screen. It doesn't seem so artificial. But once you start getting into data structures, what I would consider 2nd semester computer science at a college level, I don't think it really applies very well, and we end up using Java for 2nd semester and Python for 1st semester. And I really liked that pairing of getting students inspired, then hitting the harder data structure items without and, yeah, and we don't use, games for that aspect of things. I do end up reintroducing games to more some of the more advanced students, particularly later on when they end up doing software engineering because it's a nice item for them to put together as a team, learn to use Git, not just solo, but as a larger group. It works its way in there fairly well. But when you do introduce computer science to students using video games, 1 of the most difficult aspects and drawbacks to doing that is that they aren't always aware of how computer science can be immediately relevant to them if they only see it in the aspect of they can use it to create video games, but they don't realize they can use it to do data analytics, physics simulations or
[00:11:34] Unknown:
crunching, you know, web scraping, any of those other types of things. Yeah. It's interesting seeing some of the different starting points people go with where a lot of people will go with video games as the entry point, or some people might use the sort of automate the boring stuff approach of here are all the different mundane tasks in your day to day life that you can automate if you learn to do a little bit of programming. So I find it interesting that by starting with video games, it maybe prevents people from seeing some of the other applications that they might be able to use it for in their day to day life. Yeah. You're you're right on that.
[00:12:06] Unknown:
I do like that at this point, we've got quite a bit of different introductory material, particularly in the Python world for individuals to get started with. The automate the boring stuff is great for people who aren't really gonna be keyed in on the aspect of creating video games. And there's just a lot of material out there depending upon a person's learning style and what they want to end up using. So I like that, but the choice can be overwhelming for someone who doesn't know where to get started. And you mentioned that in the 2nd semester, students go from using this video game approach in Python to working with data structures and algorithms in Java. And I'm wondering, what are some of the elements that are easily translated
[00:12:48] Unknown:
from their 1st semester to their 2nd semester experiences? And are there any elements that are difficult for them to be able to migrate from between those different contexts?
[00:12:59] Unknown:
Really, the concepts are pretty straightforward to transfer across. You're still working with different types of variables. I like the ability to use grid based games, you know, the Minesweeper, that type of thing. So that when you're working with matrices and AI, physics, image processing, all of that stuff is still transferable. They're pretty good with working with classes, at that point in time, when they go across. The when you want to start teaching them Java then, even just the simple aspects of printing something out to the screen, you can start talking then immediately about what is public, what is static mean, what, you know, public static void main string, args, all of that stuff that is not really something that a 1st year, 1st semester programmer needs to understand.
But once you have the foundation in Python, you've got the ability to Java language, which is a lot more verbose and formal in that regard. And with Arcade being targeted
[00:14:14] Unknown:
for your college students, what are you finding as far as being the sort of lower limit of age as far as it being useful to pick up as a teaching tool for people who are getting into programming? I've had a lot of people use it at the high school level.
[00:14:31] Unknown:
Not a ton of people use it before high school level. So right around 13, 14, seems to be the sort of what I would consider the lower limit at that point, then you're more likely to get students involved in some of the easier scratch type of learning how to program. But particularly in, oddly enough, Canada. And I've had a lot of people use it for teaching.
[00:14:57] Unknown:
And so in terms of the arcade library itself, can you describe how it's implemented and how the overall architecture has evolved since you first began working on it? Yeah. It's uses open GL 33
[00:15:10] Unknown:
above so that I can end up using shaders. And I use Piglet, the Piglet library for the Open GL bindings and for event processing, so I don't end up redoing the event processing. Piglet has their own code for managing sprites. I don't use that. I have my own sprite code written on top of the open GL to manage sprites. I've put a fair bit of work into doing spatial hashing for fast collision detection. It's a little bit different than Pygame and that pygame has a lot of the lower level sprite items actually compiled to see. I use pure Python, so there are trade offs going back and forth on that. The arcade library does include some native support for the tiled map editor. So when students wanna create their own platforms, it's really easy for them to lay out a levels in the tiled map editor and in only a few lines of code, generate the sprites for those different layers that they created in tiled map editor and put together a side scroller top down game. And the library itself, because it's using the shaders, can support somewhere between a half 1000000 and a 1000000 depending upon what kind of graphics card you've got, stationary sprites and then, a couple thousand moving sprites. So it's fairly high performance in that manner. But 1 of the things that I really think is key is the amount of documentation that goes behind the library.
And I put as much or maybe even more work into the documentation as the library itself to make it easy for people to figure out how to use that library.
[00:16:50] Unknown:
Yeah. And in looking at the documentation and the ebook that you put together for it, I thought it was interesting that you included Git right off the bat because a lot of times people will skip that until far farther down the road because they don't want to confuse students with what can be a potentially very complex system in addition to the complexities of just learning to program. But at the same time, it's definitely a very valuable skill to have both for just just being able to save the state of your work, but also because of its general ubiquity in industry once you actually become a programmer
[00:17:24] Unknown:
as your career. That's a difficult decision to make because I don't wanna head people off of starting to program when they're banging their heads against the wall with using Git. But on the other hand, if you've got experience with Git, not just like I used it once or twice in class, but I've used it for several months, then it becomes a lot easier. If someone was to learn programming on their own, I wouldn't suggest starting with Git just because it can be too easily to make that too easy to make that a distraction so that they don't end up learning the programming itself. But if you've got somebody that can actually help you through, like, when Git doesn't work and to help you figure out why it doesn't work, then getting that experience over time is a real asset. So, including Git as part of that ebook, I don't regret that I do that for students for 1st semester, but I it's not an easy thing for somebody to do if they're learning on their own and don't have somebody that they can easily ask questions for on why the heck does Git not work. Yeah. Even as a professional engineer who's been using Git for several years, I run into a number of those weirdnesses, and I have colleagues who run into weirdness as well just try to use Git in the standard fashion of committing sequential changes. And
[00:18:41] Unknown:
when you when you start trying to do fancier stuff of being able to merge multiple branches or rebase things, that's when things really start to go south. Yeah. It's helped my Git skills and that I've had a large number of students, and they have collectively
[00:18:56] Unknown:
taught me very many different ways that you can mess Git up. I had to figure out how to debug. And then as far as Arcade itself,
[00:19:05] Unknown:
looking at back at the history in the Git repository, it looks like you've been developing it for at least the past 4 years. And so in that time, there have been a number of changes to the Python language and its overall ecosystem. And I'm wondering how those changes have been reflected in Arcade as you try to keep it up to date, and if there are any of the newer language features that you've been able to take advantage of to either simplify the code base or,
[00:19:31] Unknown:
add new capabilities to it? Figuring out how far back you wanna go for support isn't an easy task. 1 of the things I liked about restarting with arcade from scratch further than using Pygame is I wasn't worried about backward compatibility. And so having the type hints is pretty nice using f strings. I really like f strings, quite a bit. The data classes are also useful, particularly in the tiled library. Even if you don't have the newer versions of Python, we go ahead and put out a warning that if you end up using this, you need to also include the data classes structure. But particularly as a teaching mechanism, I like it if the language includes aspects, particularly aspects that make it easier for new programmers to figure out how to program.
[00:20:23] Unknown:
And if you were to start the little library all over again today, are there any elements of it that you would do differently either in terms of the system design and architecture or just in terms of the overall feature set? Mainly because it was already
[00:20:38] Unknown:
a start from what pygame had, and I learned a lot in working 10 years or so with Pygame. I'm not really sure that I've got a ton of things that I veered way off course. I did kind of revamp working with the tiled map editor. So I kind of deprecated the original attempt with tiled map editor and just started a new on that 1, being able to work with those saved files. But on the whole, it's sort of progressed in a manner that I haven't really felt like I've regretted too much the roads that
[00:21:10] Unknown:
it's started on. And in terms of your experience of building and growing the library and using it to educate your students and work on building new types of games and experiences with them, what have you found to be some of the most interesting or unexpected or challenging lessons that you've learned in the process?
[00:21:29] Unknown:
Technically, the hardest thing has been getting sound support. Python doesn't have a good what I would consider any good cross platform libraries that make it easy to load in an OGT or an MP 3 and stick it out the speaker in a cross platform manner. That's been technically challenging. The nontechnical side, as far as if you've got a library that you think is really great, marketing and building a community around it is a fair bit of effort, and that has been an interesting challenge. A matter of, you know, going to PyCons, talking about it in presentations, supporting people via Discord.
How do you promote it on Reddit such that people find, hey, this is really interesting. I wanna go check it out versus, oh, wait, you're doing self promoting. We're gonna downvote you into oblivion type of thing. That aspect of once you think you have a better mousetrap, being able to get people to take a look at it. That part has been some of the, quite frankly, most challenging and a kind of fun and interesting aspect, particularly because then that gets you back into working with people 1 on 1, which is something that I just absolutely love to do. And in terms of the community that you've built around arcade, there's obviously the inbuilt community of students who have learned
[00:22:52] Unknown:
on top of it. But I'm wondering what type of reach you've been able to achieve with arcade and how the, at least, temporary lack of maintenance of Pygame has impacted the relative popularity of arcade and, yeah, just just the types of, usage that you've seen as a result? Yeah. It's hard to know exactly how
[00:23:11] Unknown:
much it's getting used. I really like it when people email and then I get to know that it's been used quite a few different places. Doing analytics on people visiting the website has been pretty good feedback to get an idea of how often it's been used. Back when I was doing pygame, the book that I wrote on pygame and website and examples that I put together, at its high point, had about 22100 unique users per day on it, and at average, like, I don't know, something lower than that, around more like 1800. But it still gets about that much. And with the arcade library, I run right around between 400 to 500 now. And you just sort of take a look at those stats and try to guess at how much you've done for inroads with the community and try to figure out what's effective and not. It's a
[00:24:08] Unknown:
it's not an exact science by any means. Yeah. It's definitely 1 of the ongoing challenges with open source is being able to get a sense of if people are using it and how. So Yeah. I've I've seen a few different approaches to trying to bridge that gap, but there's definitely no concrete solution
[00:24:27] Unknown:
that also doesn't sort of push people away with trying to be too forceful of tracking their usage of the project. Yeah. And you don't know when somebody gives you feedback such as, hey. I found this 1 thing, and it's kinda weird. Okay. Is it a hundred people found that 1 thing and it was weird and only 1 bothered to tell you? Or is it only 1 person and only 1 that person told you about it? So you don't ever are really sure on a lot of stuff, how much of an impact any particular 1 feature request or bug is making on individuals.
[00:25:01] Unknown:
And in terms of feature requests, are there any specific features that people have asked for that you have consciously decided not to implement because it would add too much complexity to the library or it would just be too difficult to maintain or anything like that? There have been some things that I thought would be good
[00:25:18] Unknown:
as separate projects. I remember I had somebody suggest, you know, creating more of an interactive turtle type graphics, such that you could sit in the command prompt and just type things in and see it appear, which I think would be a great learning tool, but I didn't really feel like that fell underneath the library's jurisdiction. And then some of the other items I've had people interested in doing more, GUI elements and get started on it. But then if somebody does pull requests and gives you code, you have to realize that you're gonna end up maintaining that code. And I've had issues where basically somebody creates something, it mostly works, and then they disappear. And then you're like, okay. Well, now I need to figure out how to get how this thing works and fix its problems myself type of thing. So, yeah, integrating code into you want to be open. You want to bring in new code. It's awesome when people suggest changes, But it's always a wild card because you don't know how much support they'll give for it and how much support you'll end up needing to do once it's integrated and the documentation and examples that needs to happen. Because we got a particle system, and there's a little bit of documentation example code on the particle system, but it really could use a much larger expansion of documentation such that it's more obvious on how exactly to use the particle system.
So it's not just, you know, adding code when you get somebody to contribute something. It's you have to look at the whole package.
[00:26:49] Unknown:
And does Arcade have any sort of plugin system for being able to add in new features from external libraries that can just be loaded alongside it, or is that something that would just be too complicated given the nature of the library and the fact that you're already drawing a lot of GUI elements and dealing with Windows systems?
[00:27:09] Unknown:
It's not like Piglet has a plug in system, but I've been able to just build off of Piglet. You can easily use the Pymunk library if you want to use 2 d physics, like a full fledged 2 d physics engine. I have a fairly simple physics engine that's oriented towards being very easy to use built in. But if you wanted to use a full 2 d physics engine, Pymunk is wonderful and integrates just great with Arcade. But I haven't really created a separate plug in system for it. It just you know, it's 1 of those things you just do coding on. Right?
[00:27:40] Unknown:
And the other element that can be challenging in Python and is something that I'm sure comes up by the nature of the fact that you're building games that students will want to share with each other is the issue of packaging. And so I'm wondering how you've approached if you've approached that at all and how you've approached it with Arcade.
[00:27:59] Unknown:
Oh, I haven't, but I wish I could. Yeah. Packaging is a huge issue in Python. Right? I don't have any good solutions for it. It's 1 of the things I really, really wish that I could easily have students be able to package up and distribute their games to their friends and show them how it works, and, you know, just have it 1 downloadable installable type of thing. But it's not easy, and I have at times done instructions for how to do it, but then the underlying library well, the arcade library changes, the underlying mechanism for packaging, you know, changes as Python evolves. And then the instructions I've got break, and yeah. I I really wish there was something better, but unfortunately, that is not something I've managed to address well.
And I don't know of an easy solution for you, but I hope that changes.
[00:28:52] Unknown:
Yeah. There are certain solutions that work for packaging for specific use cases such as deploying your web app to a server or, you know, in some cases, you can package up a executable for delivery to a desktop environment, but that seems to be a continually shifting target, and the advice changes on what seems to be a daily basis. Yeah. And then if you provide instructions on it, you gotta maintain those instructions.
[00:29:16] Unknown:
And it's been outside of the time that I've been able to, do quite frankly. And then another challenging element
[00:29:23] Unknown:
of the work that you're doing is the cross platform support for Arcade, and I'm wondering if there are any particularly interesting challenges that you've dealt with as a result of that. Again, it goes to sound.
[00:29:37] Unknown:
It is really hard. I use the FFmpeg library for importing OGG and MP 3 files, And I've that's been very problematic to get both Mac, Linux, and Windows support with that. The open GL, because we're using 3 3 and shaders, means it really does not run on Raspberry Pis, which is kind of a shame because that's a nice, small, cheap computer for students to get started programming on and to not support that platform is kind of a bummer. We did originally support it before I moved up to using shaders and open GL 3 3. So that was 1 of the things that we ended up dropping. And then we've had 1 sort of weird transient bug with a Mac that does not appear on any Mac that I've been able to sit down and debug. But programs run fine on the Mac. But as soon as you stop the program, it ends up crashing.
And it's more of a piglet based type of error, but I would love to debug that. I just have never found a Mac that I've had access to that has that error that I can sit and debug. So, yeah, doing the cross platform bit is fun, but enough people use Mac, Linux and
[00:30:49] Unknown:
Windows that I still think it's a pretty important feature to support. And as far as the work that you've done with your students or any examples that you've seen from the community, what are some of the most interesting or innovative or unexpected ways that you've seen arcade used? Yeah. I've had 1 student do a tower defense game,
[00:31:08] Unknown:
and he also had an ability where as a character you could interact with the little creatures going across that you were shooting so you could actually move around and also do some extra things. And it had this whole spell casting thing as you got experience points and whatnot. And it was incredibly impressive. I actually wasted tons of time playing that game and his manner of creation of the game because he was a newer programmer. It was really difficult to actually look at the code and figure out how he did what he did. So it it was what I still got it posted online. It's 1 of the more impressive items that I've seen people put together.
And then I had a pretty nice game, just this last semester where a student actually had created a little person that had the ability to jump, crawl, you know, with articulated arms and legs. And that was a impressive set of work from a person who's taken their 1st college class in programming. So, yeah, it's, it's fun. I've seen a lot of interesting projects come out of those classes.
[00:32:14] Unknown:
And in terms of the structure of the course, I'm curious how you approach the project requirement of how you define what is the sort of desired end state for the students to that be able to show that they have mastered all of the different elements that you're covering in the course and have enough room for creativity and self expression in the games that they develop? The course basically starts with the simplest
[00:32:40] Unknown:
you know, before they even learn how to use functions and variables. I just have them draw a picture on the screen using drawing primitives, and then they add on to that where they learn to do the animation. And they have very specific objectives on what they end up needing to do in the labs that I like layout going up to the final lab. And they still can have a fair bit of creativity in the graphics, the theme that they put together with it. That part's really nice. The 1 of the features that is a more of a recent addition that has always been a bit of a headache is that when they use their own graphics well, first off, when they use their own graphics, going from pygame to the open GL based items, it's a lot easier to scale those graphics. Having students not be aware of how to get the graphic to the size that they want is always sort of an issue. And then graphics have a lot of transparency around them and understanding the hitbox of where the item is and not using the transparency aspect of having that be part of the hitbox.
Having that automatically happen has been kind of nice, so I don't have to basically teach them that aspect. But as they progress through those different items, once they get to the final game, they'll usually split off into 2 groups. 1 group will do a text only game, which doesn't use arcade at all, but they do a text based adventure, the old Zork style colossal caves. And then the people that do the main games. The primary thing that I want them to do by that time is actually just work with a longer base of code with multiple classes that they work over with multiple weeks that they learn to iterate over. So I specifically look at an iteration 1, iteration 2, iteration 3 goals, and then it becomes a little bit less apply these computer principles, but learn how to work with a longer program.
[00:34:32] Unknown:
And in terms of community usage of Arcade, do you know if there have been any uses of it for things like Pyweek of people just using it as a way to get something started quickly to put together a game for some sort of competition like that?
[00:34:48] Unknown:
There has been. And in fact, I got an invite from the people that do the Python Discord because there was enough interest that they wanted me on the that Discord for the game development channel that they recently created. So I hang out there on a pretty regular basis. And I wish I had the ability to look it up really quick, but I think 1 of the winners or 1 of the finalists recently on the Pi week, challenge did use arcade, but I could be wrong on that. I'm just going off my recollection here. So, anyway, I know it's been used. And
[00:35:20] Unknown:
we already addressed this a little bit, but when is arcade the wrong platform? Or at what point does somebody need to move on from arcade to something more full fledged like Unity or those types of game engines that you mentioned? Yeah. Anytime you're looking to
[00:35:35] Unknown:
not make it a learning or hobbyist based game. Arcade is great for based game. Arcade is great for learning the basics of creating games, but Unity, Unreal, Godot, they all have a lot more power and options available to them. I don't like using those platforms for learning programming because then if you've worked with those platforms a lot, which I have, you can get really hung up in the UI aspect where you're placing items, where you've got this huge back end binary thing that's actually difficult to work with. Git, I wouldn't wanna start saving Unity files and get. And then you've got you can just spend so much of your time working with the UI that you forget the fundamentals of the programming.
And, basically, I would say, once you've learned how to do and create 2 d games and you want to actually create a cross platform where you can target web, mobile, that type of thing for final game, then, yeah, I would actually switch. I would I would not recommend arcade by any means.
[00:36:40] Unknown:
And as you continue to work on Arcade and improve it, what do you have planned for the future of the project? I just got done with a whole lot
[00:36:49] Unknown:
of feature implementations and bug fixes with the library itself because I'm right now on sabbatical from teaching at the college for a semester. And I'm now gonna move in towards improving the tutorial aspect of the game. With Pygame, it created a whole series of online videos that are free, commercial free on YouTube for how to learn how to program with Python. I plan on doing that again with the arcade library. Although here, I'm really looking at getting the diverse set of developers to narrate those videos. I found that I really feel like computer science should, like, open the door for anyone that wants to participate and use that as a career field or a hobby or personal improvement. But there's way too many people that don't feel like they belong in computer science. And by getting a diverse set of people to actually narrow those tutorial videos, I wanna create lessons that basically show that computer science has opportunities for everyone and have people feel like they actually belong in that community. So that's my next major goal is behind the arcade and materials that go around that. And in terms of any help or community support for the project, are there any particular
[00:38:03] Unknown:
skill sets or, projects or tasks that you are looking for assistance on? If you go to the arcade dot academy
[00:38:12] Unknown:
website, there's an enhancement list. It's a little bit further down in the whole set of links in the main page. But those are all the requested enhancements to the library that are currently open, which really kind of cover a wide variety of skill levels. I've had people do small bug fixes as well, which, of course, you can always look up what bugs are out there on GitHub. And documentation pull requests. I've had 2 for the documentation that's behind it. So it's an easy project for somebody to get started with on how to do pull requests. And then there's some fairly advanced stuff out there as well. Not to mention, you know, it's not just the library itself, but the tutorials that go behind it.
I'm always actively looking for people to help out. I on the original pygame, I've actually had that translated into about 7 different languages. The original pygame book that I've had by completely by volunteers, and I've had somebody work on 1 translation of the new arcade stuff even as well. Well, are there any other aspects of the arcade library itself
[00:39:17] Unknown:
or teaching programming or using video games as an education tool that we didn't discuss that you'd like to cover before we close out the show? But no, I think we pretty well covered it. Great. Well, for anybody who wants to get in touch with you or follow along with work that you're doing, I'll have you add your preferred contact information to the show notes. And with that, I'll move us into the picks. And keeping with the theme of video games, I'm going to choose the game Ori into the Blind Forest this week. It's really well done game.
It's very, you know, good game mechanics, good storyline. I've been having fun playing that with my kids recently, and so, definitely recommend checking that out if you're looking for a new game to play. And so with that, I'll pass it to you, Paul. Do you have any picks this week? On the learning side, I'm gonna pick out a favorite quote out of 1 of my favorite books,
[00:40:01] Unknown:
Ray Bradbury's Fahrenheit 451. My favorite quote out of this book is, when I was younger, I shoved my ignorance in people's faces. They beat me with sticks. And by the time I was 40, my blunt instrument had been honed to a fine cutting point. If you hide your ignorance, no 1 will hit you and you will never learn. I so often get students that don't wanna speak up or for fear of being proved wrong, but, I'm wrong all the time. It's how I get better. And I have no problem putting my stuff out there on the Internet for people to tell me how I'm wrong so that can be improved. And I was kind of wish that people would be more willing to do that even though yeah. It could be not fun to get critical feedback. Yeah. Definitely a great quote and a great book as well. I'll I'll second that choice. Alright. Well, thank you very much for taking the time today to join me and discuss the work that you've done with Arcade. It's definitely a very interesting project
[00:40:47] Unknown:
and 1 that I'm going to be trying out with my kids to get them more involved in programming. So thank you for all of your time and effort on that front, and I hope you enjoy the rest of your day. Yeah. Thanks a lot for having me on. Thank you for listening. Don't forget to check out our other show, the Data Engineering Podcast at data engineering podcast dotcom for the latest on modern data management. And visit the site of pythonpodcast.com to subscribe to the show, sign up for the mailing list, and read the show notes. And if you've learned something or tried out a project from the show, then tell us about it. Email host at podcastinit.com with your story.
To help other people find the show, please leave a review on Itunes and tell your friends and coworkers.
Introduction and Sponsor Message
Interview with Paul Craven: Introduction and Background
The Joy of Teaching and Impact on Students
Creating the Arcade Library
Audience and Use Cases for Arcade
Effectiveness of Using Games in Teaching
Transitioning from Games to Advanced Topics
Arcade for Different Age Groups
Implementation and Architecture of Arcade
Incorporating Git in Teaching
Evolution of Arcade with Python Updates
Challenges and Lessons Learned
Feature Requests and Community Contributions
Packaging and Distribution Challenges
Cross-Platform Support
Interesting Projects and Student Work
Course Structure and Project Requirements
Community Usage and Competitions
When to Move Beyond Arcade
Future Plans for Arcade
Community Support and Contributions
Final Thoughts and Contact Information
Closing Remarks