总体思路
目标是做一个最基础的贪吃蛇,做一条会移动的小蛇也就够了。
- 显示小蛇
- 让他固定朝着一个头的方向移动
- 非阻塞输入
- 控制小蛇移动
显示小蛇
主要是显卡文本模式。在8086结构中,显存位于内存地址的0xB8000——0xBFFFF处,为了在屏幕上显示出文字,我们需要把必要的信息加载到内存以0xB8000起始的位置。
显卡初始化时,会形成一个25x80的文本模式(25行、80列),这部分内容的信息来自内存0xB8000——0xB8FA0,由于屏幕上的每一个字符需要2个连续字节表示,一共25x80x2 = 4000B的空间。
两个连续字节包含的信息如下:
低字节:字符的ASCII码,由于ASCII码只有7bit,这一字节的最高位置为0;其中有一部分表示信息的代码是无法显示的。
高字节:字符的属性,表示为K R G B I R G B。低4位定义的是前景色,高4位定义的是背景色,K为闪烁位,I为亮度位。
mov ax,0b800h
mov es,ax
mov bl,' '
mov bh,71h
mov si,0
mov es:[si],bx
上面可以实现一个像素的显示了,多个也就可以构成小蛇了。下一步是小蛇的移动问题。
小蛇移动
更改存放小蛇身体和头部位置的数组。
小蛇的尾部位置设为黑色,因为会朝着头的方向前进,然后从尾部到头部,靠近头的坐标给后面,头的坐标朝着头的方向前进。