

pacgo - A Pac Man clone written in Go (with emojis!)
source link: https://www.tuicool.com/articles/hit/n2A7Nve
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

pacgo
A Pac Man clone written in Go (with emojis!)
Introduction
Welcome to Pac Go! This project is a tutorial to introduce people to the Go programming language .
Why a new tutorial?
We have a lot of great tutorials out there, but the whole idea about this tutorial is to make something different and fun while learning Go. Yes, we need to know about APIs and CRUDs on a daily basis, but while tackling something new, why not making a game instead?
Go is one of the languages that is known for making programming fun again, and what could be more fun than writing a game? Interested? Great, let's move on!
We will be writing a Pac Man clone for the terminal. While writing a game you are exposed to several interesting requirements that make a very good ground for exploring many features of the language, including input, output, functions, pointers, concurrency and a bit of math.
You also learn a bit more about the terminal and it's magical escape sequences.
Pre-requisites
It's recommended to have:
- Basic understanding on how programming languages work, as we won't be covering the basics
- Basic terminal knowledge (know how to use command line applications)
Of course, if you don't have the above, but is a curious spirit and want to try anyway, please feel free to do so.
Compatibility
This tutorial has been tested on both Linux and Mac OSX environments. For Windows environments you may need to install a terminal emulator.
Please beware that since it relies on the terminal rendering the "graphics" it could produce different results for different kinds of terminals. If you have an issue feel free to raise it so we can find a proper solution, naming both your OS and terminal names and versions.
Note:it is a known issue that the terminal window on VS Code doesn't render the game correctly at this moment.
Setup
In order to start, make sure you have Go installed in your system.
If you don't, please follow the instructions in golang.org
How to use this tutorial
In every step, including step 0 (this one), we will describe the task in the README.md file followed by the code that does it and an explanation of how it work.
Every step is located in its separate folder except for this one. Look for the folders stepXX for any given step.
We will be editing a file called main.go
. All the code in this tutorial will reside in this file. A proper program would usually have multiple source code files, but for the sake of simplicity we are keeping this program limited to one source.
The README.md for each step will explain the intent and show the modifications needed to proceed. You should make then in your own main.go
file.
You can also use the main.go
in step 00 as a starting point and modify it incrementaly when progressing through the steps.
If you get lost, every step has it's own main.go
file with the changes to that step already applied. That also means that if you want to fast track to a given step you can start with the main.go
from the previous step.
Step 00: Hello (Game) World
We are going to start by laying the ground a skeleton of what a game program looks like.
Pick a diretory to be your work dir (ie: tutorial
under your home folder) and create a file called main.go
with the content below.
Note: alternatively you can just clone this repository and edit the main.go
file on it's root.
package main import "fmt" func main() { // initialize game // load resources // game loop for { // update screen // process input // process movement // process collisions // check game over // Temp: break infinite loop fmt.Println("Hello, Pac Go!") break // repeat } }
Running your first Go program
Now that we have a main.go
file ( .go
is the file extension for Go source code), you can run it by using the command line tool go
. Just type:
$ go run main.go Hello, Pac Go!
That's how we run a single file in Go. You can also build it as an executable program with the command go build
. If you run go build
it will compile the files in the current directory in a binary with the name of the directory. Then you can run it as a regular program, for example:
$ go build $ ./pacgo Hello, Pac Go!
For the purposes of this tutorial we are using only a single file of code ( main.go
), so you may use either go build
and run the command or just go run main.go
as it does both automatically.
Understanding the program
Now let's have a close look of what the program does.
First line is the package
name. Every valid Go program must have one of these. Also, if you want to make a runnable
program you must have a package called main
and a main
function, which will be the entry point of the program.
We are creating an executable program so we are using package main
on the top of the file.
Next are the import
statements. You use those to make code in other packages accessible to your program.
Finally the main
function. You define function in Go with the keyword func
followed by it's name, it's parameters in between a pair of parenthesis, followed by the return value and finally the function body, which is contained in a pair of curly brackets {}
. For example:
func main() { // I'm a function body }
This is a function called main
which takes no parameters and return nothing. That's the proper definition of a main function in Go, as opposed to the definitions in other languages where the main function may take the command line arguments and/or return an integer value.
We have different ways to deal with the command line arguments and return values in Go, which we will see in Step 10.
In the game main function we have some comments (any text after //
is a comment) that are acting as placeholders for the actual game code. We will use those to drive each modification in a orderly way.
The most important concept in a game is what is called the game loop. That's basically an infinite loop where all the game mechanics are processed.
A loop in Go is defined with the keyword for
. The for
loop can have an initializer, a condition and a post processing step, but all of those are optional. If you omit all you have a loop that never ends:
for { // I never end }
We can exit an infinite loop with a break
statement. We are using it in the sample code to end the infinite loop after printing "Hello, Pac Go!" with the Println
function from the fmt
package (comments omitted for brevity):
func main() { for { fmt.Println("Hello, Pac Go!") break } }
Of course, in this case the infinite loop with a non-conditional break is pointless, but it will make sense in the next steps!
Congratulations, step 00 is complete!
Contributing
This project is open source under the MIT license. If you want to contribute just submit a pull request.
If you are looking for inspiration you may browse the open issues or have a look at the TODO list. Everything on the TODO list should be planned as a new step on the tutorial unless otherwise noted.
License
See LICENSE
Contact Information
If you have any questions, please reach out to [email protected] .
Recommend
-
7
通过.PAC进行网络钓鱼 Evi1cg ·...
-
44
README.md pacgo A Pac Man clone written in Go (with emojis!) Introduction Welcome to Pac Go! This project is a tutorial to introduce pe...
-
88
Join GitHub today GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
-
41
You all know famous Pac-Man video game , right? The game is fun and building an animated Pac-Man character in HTML and CSS is just as fun! I’ll show you how to create one while leverag...
-
19
📅 2020年11月12日 · ☕ 3 分钟 PAC介绍介绍PAC之前,先重新捋一捋Kerberos协议的流程AS_REQ Client使用自己的hash加密时间戳发送给kdc请求TGTAS_REP kdc使用Client Hash解密验证时间戳,如果正确则就返回...
-
7
pacman中的Pac-Man - 暗无天日 pacman中的Pac-Man 这算是pacman中的一个小彩蛋吧. 编辑 /etc/pacman.conf,在 # Misc options 下增加两行 Color ILoveCandy 随后使用pacman安装...
-
11
作者: wzt 本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送! 投稿邮箱:[email protected] 内核pac key初始化 common_start mrs x0, S3_4_C15_C0_4 and x1, x0, #0x2 cbz x1, 0xff...
-
9
直连模式、PAC模式 和 全局模式 之间区别 日期:2022年04月06日 · 分类:闲言碎语 已阅读 98 次 经常使用网络代理客户端的都知...
-
19
Shadowsocks手动添加和编辑 PAC中的网址规则 经常会遇到有人想要添加和编辑 PAC中的网址规则,但是不知道该怎么添加。 优质加速器梯子推荐:
-
4
Waka waka — 1D Pac-Man is the best game I’ve played in 2024 (so far) An appreciation of "small games" and the people who make them....
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK