?? 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 + -