Learning To Program Python By Building Video Games With Arcade - Episode 249
February 11, 2020
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.
Do you want to try out some of the tools and applications that you heard about on Podcast.__init__? Do you have a side project that you want to share with the world? Check out Linode at linode.com/podcastinit or use the code podcastinit2020 and get a $20 credit to try out their fast and reliable Linux virtual servers. They’ve got lightning fast networking and SSD servers with plenty of power and storage to run whatever you want to experiment on.
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
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?
“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.”
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 [email protected]) with your story.
To help other people find the show please leave a review on iTunes and tell your friends and co-workers
Hello, and welcome to podcast, 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'll get everything you need to scale up. For your tasks that need fast computation such as training machine learning models, they just launched dedicated CPU instances. They also have a new object storage service to make storing data for your apps even easier. Go to Python podcast.com slash linode. That's l i n o d today to get a $20 credit and launch a new server and 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 chronium Global intelligence, od sc and data Council. Upcoming events include the software architecture conference, the strata data conference, and pi con us go to Python podcast.com slash 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 and easy to learn Python library for creating 2d video games. So Paul, can you start by introducing yourself?
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 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.
And do you have much of a background in teaching before you started working at Simpson? Or was it 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,
I've always enjoyed it. I started teaching in their evening program and some colleges 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 one on one 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 them 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.
And also with teaching, you end up having a much bigger 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.
Exactly. One 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 one 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. I've got 200 people in my programming class, I really get to know everybody individually.
Soon after I started teaching, a student gave a presentation on Python. And after you program for a while learning another language isn't exactly high on the list of things you're jumping up and down to do. But during his presentation, I really saw how incredibly useful would be for teaching, because at the time we were, introductory language was Java. And quite frankly, Java is an absolute terrible language for computer science for people to begin learning to program. And 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 second semester, and they just kind of 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. 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 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 about 10 years or so, at I really like pi game. I like teaching students to begin programming via video games. But basically, after a while, I was getting kind of held back on pi game, 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 pie game 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 and ellipse when you dry. It used a game loop rather than the more modern An 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 that really wasn't under development, and kind of I looked at creating my own branch, but pygame was based on SDL. And they really didn't end up liking SDL that much, even the new SDL too, after playing around with it. So eventually, I just decided to start a new library. And yeah, one of those classic mistakes and computer sciences 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 OpenGL. 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 and consistencies in naming that type of thing. But that they could use modern Python and still learn with, 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 my game. 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, the my intended audience for that is anybody who's learning to program or a hobbyist wanting to do 2d games for fun. It's not as powerful as some of the Unity go dot and other these types of game engines but it is is incredibly easy to get started with. You don't have to worry about other template files or that you even have to create a classes even just to start drawing something on the screen. It's a very easy to get started with library and sometimes hobbyists just want to put together 2d game without a lot of upfront effort in learning how to use a new game engine.
And as an educator and somebody who's using arcade and previously pi game 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 item that I'm really looking towards it's 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, than 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 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 ceased 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 it? Do any limitations of that as a means of addressing some of those different computer science elements,
it's fairly effective for what I would consider first semester where you're doing conditionals and loops at 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 doesn't seem so artificial. But once you start getting into data structures, what I would consider second semester Computer Science at a college level, I don't think it really applies very well. And we end up using Java for second semester and Python for first semester. And I've really liked that pairing of getting students inspired, then hitting the harder data structure items, without any 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 get 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, one 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 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 is 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 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 may be prevents people from seeing somebody The other applications that they might be able to use it for their day to day life.
Yeah, you're right on that. 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 are really going to 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 second 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 from their first semester to their second semester experiences? And are there any elements that are difficult for them to be able to migrate from between those different contexts,
realize a content apps are pretty straightforward to transfer crush, 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 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, arcs, all of that stuff that is not really something that a first year first semester programmer needs to understand. But once you have the foundation in Python, you've got the ability to explain to people they've created classes they've created attributes, they've created methods. And they can then apply that to the Java language, which is a lot more verbose and formal in that regard.
And with arcade being targeted 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, not a ton of people use it before high school level. So right around 1314 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, oddly enough, Canada, and I've had a lot of people use it for teaching.
Yeah, it's uses OpenGL three, three. Above that I can end up using shaders. And I use Piglet, the Piglet library for the OpenGL bindings and for event processing, so I don't end up redoing the vent processing pickle, it has their own code for managing sprites, I don't use that I have my own sprite code written on top of the OpenGL to manage sprites. I've put a fair bit of work into doing spatial hashing for fashio collision detection. It's a little bit different than high game and that pi game has a lot of the lower level sprite items actually compiled to see or 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 want to create their own platforms, it's really easy for them to You 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 and 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 million and a million depending on what kind of graphics card you've got stationary sprites, and then a couple of thousand moving sprites. So it's fairly high performance in that manner. But one of the things that I really think is key is the amount of documentation that goes behind the library. And I've 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.
Yeah, and in looking at the documentation and the ebook they put together for it. I thought it was interesting that you included get right off the bat because a lot of times, people We'll skip that until far further 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 being able to save the state of your work. But also because of its general ubiquity in industry. Once you actually become a programmer as your career.
That's a difficult decision to make because I don't want to head people off of starting a program when they're banging their heads against the wall with using get but on the other hand, if you've got experience with get 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 wants to learn programming on their own. I wouldn't suggest starting with get 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 get 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 get as part of that ebook. I don't regret that I do that for students for first 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 to get
not work? Yeah, even as a professional engineer, who's been using it for several years I run into a number of those weirdness is that I have colleagues who run into weirdness as well, just trying to us get in the standard fashion of committing sequential changes. And 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.
debug. And then as far as arcade itself, looking at back at the history in the get repository looks like you've been developing it for at least the past four 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 either simplify the code base or add new capabilities to it.
Figuring out how far back you want to go for support isn't an easy task. One of the things I liked about restarting with arcade from scratch rather than using pi games, 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.
And if you were to start the 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 cuz it was already a start from what pygame had, and I learned a lot and 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 to deal on that one being able to work with Those saved files. But on the hall is sort of progressed in a manner that I haven't really felt like I've regretted too much the roads that 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?
Technically, the hardest thing has been getting sound support. Python doesn't have a good but I would consider any good cross platform libraries that make it easy to load in an O GG or an mp3 and stick it out the speaker in a cross platform manner that's been technically challenging the non technical 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. That has been an interesting challenge matter of you know going to pi cons talking about it and presentations, supporting people via Discord. How do you promote it on Reddit such that people find Hey, this is really interesting. I want to go check it out versus Oh wait, you're doing self promoting, we're going to 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 them, quite frankly, most challenging and kind of fun and interesting aspect particularly because then that gets you back into working with people one on one, 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 on top of it, but I'm wondering what type of reach you've been able to achieve with arcade and how the least temporary lack of maintenance So pi game 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 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 has been used back when I was doing pi game, the book that I wrote on pi game and website and the examples that I put together at its high point had about 2200 unique users per day on it and average, like, I don't know something lower than that around 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 up. It's not an exact science by any means. Yeah, it's
definitely one of the ongoing challenges with open source is being able to get a sense of if people are using it and how, yeah, I've seen a few different approaches to trying to bridge that gap. But there's definitely no concrete solution 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 one thing and it's kind of weird. Okay, is it 100 people found that one thing and it was weird and only one bother to tell you or is it only one person and only one that person told you about it, so you never really sure on a lot of stuff. How much of an impact any particular one feature request or bug is making on individ Jules.
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
have been some things that I thought would be good as separate projects. I remember I had somebody suggest, you know, creating a more of an interactive turtle type graphics such that you could sit at 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 going to end up maintain 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 is 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.
And does arcade have any sort of plugin system for being able to add a 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 window systems.
It's not like Piglet has a plugin system, but I've been able to just build off of Piglet, you can easily use the PI monk library. If you want to use 2d physics like a full fledged 2d 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 2d physics engine pi monk is wonderful and integrates just great with our K but really created a separate plugin system for it just, you know, it's one of those things you just do coding on, right.
And the other element that can be challenging and Python, and 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?
Oh, I haven't, but I I wish I could, yeah, packaging is a huge issue in Python, right? I don't have any good solutions for it. It's one 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 one 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 yet, but I hope that changes.
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.
And then another challenging element 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.
is really hard. I use the FFmpeg library for importing rgg and mp3 files. And I've that's been very problematic to get both Mac Linux and Windows support with that the OpenGL because we're using three three and shaders means it really does not run on Raspberry Pi's, 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 OpenGL three, three. So that was one of the things that we ended up dropping. And then we've had one sort of weird transit 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 air that I can sit and debug. So yeah, doing the cross platform that is fine. But enough people use Mac Linux and 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 Innovative or unexpected ways that you've seen arcade used? Yeah, I've had one
student do a tower defense game. 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 have this whole spell casting thing is 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 was what I still got it posted online is one 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 student actually had created a little person that had the ability to jump crawl, you know, with articulate arms and legs. And that was A impressive set of work from a person who's taken their first college class and programming. So yeah, it's a, it's fun, there's been a lot of interesting projects come out of those classes. 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 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 and the games that they develop? The course basically starts with the simplest 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 or 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 one 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 pi game to the OpenGL 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 was 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 two groups. One group will do a text only game which doesn't use arcade at all. They do a text based adventure, the old sorc 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 learned to iterate over. So I specifically look at an iteration one iteration to iteration three goals and then it becomes a little bit less apply these computer principles but learn how to work with a longer program.
And in terms of community usage of arcade Do you know if there's been any uses of it for things like pi week of people just using it as a way to get something started quickly to put together game for some sort of competition like that?
There has been and in fact I got an invite from people that do the Python discord because there was enough interest that they want to be 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 one of the winners or one 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 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 not make it a learning or hobbyist based game arcade is great for learning the basics of creating games. But unity, unreal goes out. 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 get, I wouldn't want to 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 2d 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.
I just got done with a whole lot 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 going to move in towards Improving the tutorial aspect of the game with PI game and created a whole series of online videos that are free commercial free on YouTube for how to learn how to program with Python. I'm doing that again with the arcade library. Although here, I'm really looking at getting into a 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 near at those tutorial videos. I want to 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
if you go to the arcade dot academy 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 bugs are out there on GitHub, and documentation, a pull requests I've had to 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 pi game. I've actually had that translated into about seven different languages, the original pi game book that I've had by completely by volunteers, and I've had somebody work on one translation of the new arcade stuff even as well.
Well, are there any other aspects of the arcade library itself, or teaching programming or using video games as an educational tool that we didn't discuss that you'd like to cover before we close out the show?
Great. Well, for anybody who wants to get in touch with you or follow along with the 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 pics and keeping with the theme of video games. I'm going to choose the game orient the Blind Forest this week. It's really well done game. Very, you know, good game mechanics, good storyline. But having fun playing that with my kids recently, and so I definitely recommend checking that out if you're looking for a new game to play. So with that, I'll pass it to you Paul. Do you have any pics this week?
On the learning side? I'm going to pick out a favorite quote out of one of my favorite Books 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 14, my blunt instrument had been honed to a fine cutting point. If you hide your ignorance, no one will hit you and you will never learn. I so often get students that don't want to speak up or for fear of being proved wrong, but I'm wrong all the time is 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 can be not fun to get critical feedback.
Definitely a great quote and a great book as well. I'll second that choice. All right. Well, thank you very much for taking the time today to join me and discuss the work that you've done with arcade. That's definitely very interesting project and one 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 your day.
Thank you for listening. Don't forget to check out our other show the data engineering podcast at data engineering podcast com for the latest on modern data management. And visit the site at Python podcasts calm 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 and the show then tell us about it. Email host at podcast in a.com with your story to help other people find the show, please leave a review on iTunes and tell your friends and coworkers
Liked it? Take a second to support Podcast.__init__ on Patreon!