📄 snake.lst
字号:
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE SNAKE
OBJECT MODULE PLACED IN snake.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE snake.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*---------------------------------------------------------
2 * 贪吃蛇游戏 测试版 V0.1 snake
3 * 采用AT89S51+62256(RAM)+12864LCD(液晶)+RSM2222-001(遥控)
4 ---------------------------------------------------------*/
5 #include <AT89x52.H>
6 #include <STDLIB.H>
7 #include "snake.h"
8
9 //移动标志位 1=上,2=下,3=左,4=右(初始向右移动)
10 uchar MoveDirection = 4;
11 uchar RandCounter=0;//由于产生的随机数有问题在这加个.
12 bit UpMove = 0;//向上移动标志位
13 bit DownMove = 0;//向下移动标志位
14 bit LeftMove = 0;//向左移动标志位
15 bit RightMove = 1;//向右移动标志位
16 bit FoodFlag = 0;//食物有无标志位
17 bit Pause = 0;//暂停标志位
18 bit GameStart = 0;//游戏开始标志位
19 bit GameOver = 0;//游戏结束标志位
20 sbit Beep = P3^3; //音频输出脚
21 //存放遥控接收数据
22 uchar xdata KeyCoding[4]={0,0,0,0};
23 uchar counter; //计时用
24 uchar SnakeLong = 2;//记录蛇身的长度
25 /*Snake[0]记录蛇头的坐标位置,Snake[1]-Snake[20]记录蛇身的坐标位置,
26 蛇的移动是将蛇尾清空,在第一个蛇头位置补上*/
27 uchar xdata Snake[21]={
28 //0 1 2 3 4 5 6 7 8 9 10 11 12
29 35,34,33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
30 //13 14 15 16 17 18 19 20
31 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
32 //复制地图
33 uchar xdata Map[128];
34 /****************** 用于绘图显示 *****************/
35 uchar xdata GDRAM[1024];
36 /****************** 8X8的图形点阵数据 *****************/
37 //空=0,墙=1,食物=2,蛇身=3,蛇头=4
38 uchar code empty[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//空
39 uchar code wall[8] ={0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};//墙
40 uchar code food[8] ={0x24,0x7E,0xFF,0xFF,0xFF,0x7E,0x3C,0x18};//食物
41 uchar code body[8] ={0x3C,0x7E,0xFF,0xFF,0xFF,0xFF,0x7E,0x3C};//蛇身
42 uchar code head[8] ={0x3C,0x7E,0xFB,0xFF,0xF8,0xFF,0x7E,0x3C};//蛇头
43 /****************** 8X16格的绘图坐标 *****************/
44 uint code MoveData[128] ={
45 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
46 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
47 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,
48 384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,
49 512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,
50 640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,
51 768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,
52 896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911};
53 /****************** 8X16格的地图 *****************/
54 //空=0,墙=1,食物=2,蛇身=3,蛇头=4
55 uchar code GameMap[128]={ //地图自己可以编辑增加障碍物,增加游戏难度
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 2
56 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
57 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
58 1,3,3,4,0,0,0,0,0,0,0,0,0,0,0,1,
59 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
60 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
61 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
62 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
63 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
64
65 /*---------------------------------------------------------
66 函数:CopyMap()
67 说明:复制地图
68 ---------------------------------------------------------*/
69 void CopyMap()
70 {
71 1 uchar i;
72 1 for (i=0;i<128;i++) Map[i]= GameMap[i];
73 1 }
74
75 /**********************************************************
76 *函数名:WriteMemorizer()
77 *功 能:将图形数据写入显存
78 *pos:要显示图形的位置,*p:指针指向要显示的图形
79 **********************************************************/
80 void WriteMemorizer(uchar pos,uchar *p)
81 {
82 1 uchar i;
83 1 uint zb;
84 1 zb = MoveData[pos]; //取显存地址(显示坐标)
85 1 for (i=0;i<8;i++)
86 1 {
87 2 GDRAM[zb] = *p; //要显示的图形写入显存
88 2 p++; //下一个数据
89 2 zb+=16; //显存的下一个地址(每个地址之间的差是16)
90 2 } //或者说是间隔是16.
91 1 }
92 /**********************************************************
93 *函数名:MapCreate()
94 *功 能:地图生成程序
95 **********************************************************/
96 void MapCreate()
97 {
98 1 uchar i;
99 1 for (i=0;i<128;i++) //生成8X8的地图(64块组成)
100 1 { //每1块是8X8的点阵
101 2 switch (Map[i])//获得地图上的图形数据
102 2 { //将图形编号对应的数据写入显存
103 3 case 0:
104 3 WriteMemorizer(i,empty);//空=0
105 3 break;
106 3 case 1:
107 3 WriteMemorizer(i,wall);//墙=1
108 3 break;
109 3 case 2:
110 3 WriteMemorizer(i,food);//食物=2
111 3 break;
112 3 case 3:
113 3 WriteMemorizer(i,body);//蛇身=3
114 3 break;
115 3 case 4:
116 3 WriteMemorizer(i,head);//蛇头=4
117 3 break;
C51 COMPILER V8.08 SNAKE 06/20/2007 12:20:21 PAGE 3
118 3 }
119 2 }
120 1 }
121 /**********************************************************
122 *函数名:GameDisplay()
123 *功 能:游戏图形显示程序(从左到右,从上到下)
124 * *point指向外部RAM存储的128X64的图片数据
125 **********************************************************/
126 void GameDisplay(uchar *point)
127 {
128 1 uchar i,j;
129 1 LCDWriteCommand(0x34);//扩充指令集
130 1 LCDWriteCommand(0x36);//绘图显示开
131 1 for (i=0;i<32;i++) //写上半屏(32行)
132 1 {
133 2 LCDWriteCommand(0x80+i);//Y地址寄存器
134 2 LCDWriteCommand(0x80); //X地址(LCM自动加1)
135 2 for (j=0;j<16;j++) //16x8列
136 2 { //获得GamePic的首地址
137 3 LCDWriteData(*point);//写入一个字节图形数据
138 3 point++; //指向下一个图形字节
139 3 }
140 2 }
141 1 for (i=0;i<32;i++) //写下半屏
142 1 {
143 2 LCDWriteCommand(0x80+i);//Y地址寄存器
144 2 LCDWriteCommand(0x88); //X地址(LCM自动加1)
145 2 for (j=0;j<16;j++)//
146 2 {
147 3 LCDWriteData(*point);//写入一个字节图形数据
148 3 point++;
149 3 }
150 2 }
151 1 }
152 /*---------------------------------------------------------
153 函数:SnakeCoor()
154 说明:读取蛇头当前坐标
155 ---------------------------------------------------------*/
156 uchar SnakeCoor()
157 {
158 1 uchar i;
159 1 uchar SnakeHead;
160 1 for (i=0;i<128;i++)
161 1 {//逐个比较找出蛇头
162 2 if (Map[i]==4)
163 2 { //获得蛇头的当前坐标
164 3 SnakeHead = i;
165 3 break;//跳出循环
166 3 }
167 2 }
168 1 return (SnakeHead);
169 1 }
170 /*---------------------------------------------------------
171 函数:PlacedFood()
172 说明:放置食物
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -