久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機+ILI9163 TFT設計的經典懷舊游戲貪吃蛇源碼
[打印本頁]
作者:
sjd
時間:
2018-6-1 09:36
標題:
51單片機+ILI9163 TFT設計的經典懷舊游戲貪吃蛇源碼
利用51單片機設計經典懷舊游戲貪吃蛇。
0.png
(49.59 KB, 下載次數: 31)
下載附件
2018-6-2 04:04 上傳
ILI9163液晶屏+單片機源程序如下:
/**************************************************************************
mini80 或者 mini80E 按鍵,上 s6,下 s14,左 s11, 右 s9, s4 重新開始
可以按照自己需要重新定義鍵盤掃描程序中的值,在key_sweep.h 中
****************************************************************************/
#include "reg52.h"
#include "KEY_SWEEP.H"
#include "SNAKE.h"
#include "9325tp.h"
//=========================================主程序========================================//
main()
{
ILI9325_Initial();
Init_SNAKE();
while(1)
{
Run_SNAKE();
Key();
}
}
復制代碼
/***********************************************************************************
/* 文件名稱: SNAKE.c
/* 功 能: 貪吃蛇游戲代碼
/* 署 名: 張先永(原作者)
/* 時 間: 2009年10月11日
/* 備 注:
/* 游戲按鍵由于需要快速的響應,所有按鍵通過線與擴展為中斷按鍵
/* LCD 液晶顯示器在PO口 需要上拉電阻
/***********************************************************************************/
#include <reg52.H>
#include <KEY_SWEEP.H>
#include"9325tp.h"
#include "SNAKE.h"
#define uchar unsigned char
//=================================================================
// 使用結構體定義變量 使程序的名稱更加的清楚
//=================================================================
struct
{
uchar X;
uchar Y;
uchar Yes;
}Food; //食物結構體
#define SNAKE_Max_Long 20 //最大長度
struct
{
uchar X[SNAKE_Max_Long];
uchar Y[SNAKE_Max_Long];
uchar Long;
uchar Life;
uchar Score; //蛇的分數
uchar Level; //蛇的等級
}Snake; //蛇結構體
uchar Key_V_temp=0; //取出上次按鍵值
//=================================================================
//函數功能:1ms延時函數
//晶 振:11.0592 M
//入口參數:n
//出口參數:無
//=================================================================
void Delay_1mS(unsigned int n)
{
unsigned int i;
unsigned char j;
for(i=0;i<n;i++)
for(j=0;j<120;j++) ;
}
//=================================================================
//函數名稱:void Init_time0 (void)
//函數功能:初始化定時器1 用于產生隨機數種子 ,用于放置實物
//入口參數:無
//出口參數:無
//=================================================================
void Init_time0 (void)
{
EA=1;
ET1=1;
TMOD|=0x10;
TH1=0X00;
TL1=0X00;
TR1=1;
}
void time1 (void) interrupt 3
{
TH1=0X00;
TL1=0X00;
}
//=================================================================
//函數名稱:Trun_On_Point Trun_Off_Point (uchar x,uchar y)
//函數功能:點亮或者熄滅 一個點。用于顯示蛇身體
//入口參數:無
//出口參數:無
//特別說明:此 Trun_On,函數換成其他的就可以兼容其他的液晶
// 入8*8 點陣 12864 等
//=================================================================
void Trun_On_Point (uchar x,uchar y,uchar color)
{
Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),color);
}
void Trun_Off_Point (uchar x,uchar y)
{
Bar((4*(x+2)),(4*(y+2)),(4*(x+3)),(4*(y+3)),0xBE5F);
}
//=================================================================
//函數名稱:void Init_SNAKE(void)
//函數功能:繪制游戲界面,初始化游戲等級等參數
//入口參數:無
//出口參數:無
//=================================================================
void Init_SNAKE(void)
{
uchar i;
Init_time0();
//***********繪制游戲界面********************//
CLR_Screen(0xBE5F);
Rectangle(8,8-1,85,120,0xaa);//繪制一個矩形框, 0-127
LCD_PutString(88,8,"Score",0x00ff,0xBE5F);
LCDShow_uCharNumber(96,24,Snake.Score,0x00ff,0xBE5F);
LCD_PutString(88,81,"LEVEL",0x00ff,0xBE5F);
LCDShow_uCharNumber(96,97,Snake.Level,0x00ff,0xBE5F);
//***********初始化蛇參數********************//
Snake.Long=2; //定義初始化蛇的長度
Snake.Life=0; //初始化蛇還活著
Snake.Score=0;
Food.Yes=1;
Key_Value=0;
Key_V_temp=0;
for(i=0;i<Snake.Long;i++) //將蛇給賦值
{
Snake.X[i]=i+2;
Snake.Y[i]=2;
}
for(i=0;i<Snake.Long;i++) //將蛇給畫出來
{
Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
}
}
//=================================================================
//函數名稱:void Display_dead(uchar i)
//函數功能:顯示死亡界面
//入口參數:無
//出口參數:無
//=================================================================
void Display_dead(void)
{
LCD_PutString(10,40,"GAME OVER",0x00ff,0xBE5F);
while(Key_Value!=Key_Enter)
{
Key();
}
Init_SNAKE();
}
//=================================================================
//函數名稱:void Display_Pass(uchar i)
//函數功能:顯示過關界面
//入口參數:無
//出口參數:無
//=================================================================
void Display_Pass(void)
{
Snake.Level++;
LCD_PutString(18,40,"You are",0xcc88,0xBE5F);
LCD_PutString(34,56,"WIN!",0xcc88,0xBE5F);
while(Key_Value!=Key_Enter)
{
Key();
}
Init_SNAKE();
}
//=================================================================
//函數名稱:void Run_SNAKE(void)
//函數功能:蛇運動函數 (游戲精華)
//入口參數:無
//出口參數:無
//=================================================================
void Run_SNAKE(void)
{
uchar i=0;
/*********************根據按鍵選擇蛇的運動方向*******************/
if((Key_Value==Key_Right&&Key_V_temp!=Key_Left)||(Key_Value==Key_Left&&Key_V_temp==Key_Right))
{
Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾給熄滅掉
for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
{
Snake.X[i]=Snake.X[i+1];
Snake.Y[i]=Snake.Y[i+1];
}
Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+1;
Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇頭向你要求的方向移動
for(i=0;i<Snake.Long;i++) //這個讓蛇顯示出來的函數
{
Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
}
Key_V_temp=Key_Right;
}
if((Key_Value==Key_Left&&Key_V_temp!=Key_Right)||(Key_Value==Key_Right&&Key_V_temp==Key_Left))
{
Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾給熄滅掉
for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
{
Snake.X[i]=Snake.X[i+1];
Snake.Y[i]=Snake.Y[i+1];
}
Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]-1;
Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+0; //蛇頭向你要求的方向移動
for(i=0;i<Snake.Long;i++) //這個讓蛇顯示出來的函數
{
Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
}
Key_V_temp=Key_Left;
}
if(( Key_Value==Key_Up&&Key_V_temp!=Key_Down)||( Key_Value==Key_Down&&Key_V_temp==Key_Up))
{
Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾給熄滅掉
for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
{
Snake.X[i]=Snake.X[i+1];
Snake.Y[i]=Snake.Y[i+1];
}
Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]-1; //蛇頭向你要求的方向移動
for(i=0;i<Snake.Long;i++) //這個讓蛇顯示出來的函數
{
Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
}
Key_V_temp=Key_Up;
}
if(( Key_Value==Key_Down&&Key_V_temp!=Key_Up)||( Key_Value==Key_Up&&Key_V_temp==Key_Down))
{
Trun_Off_Point(Snake.X[0],Snake.Y[0]); //先把蛇尾給熄滅掉
for(i=0;i<Snake.Long-1;i++) //蛇身都是它前一段的蛇身的位置
{
Snake.X[i]=Snake.X[i+1];
Snake.Y[i]=Snake.Y[i+1];
}
Snake.X[Snake.Long-1]=Snake.X[Snake.Long-2]+0;
Snake.Y[Snake.Long-1]=Snake.Y[Snake.Long-2]+1; //蛇頭向你要求的方向移動
for(i=0;i<Snake.Long;i++) //這個讓蛇顯示出來的函數
{
Trun_On_Point(Snake.X[i],Snake.Y[i],0xaa);
}
Key_V_temp=Key_Down;
}
/****************根據按鍵選擇蛇的運動程序結束*******************/
/////////////////////////////////////////////////////////////////
/************************判斷蛇是否死亡***********************/
if(Snake.X[Snake.Long-1]>=19||Snake.Y[Snake.Long-1]>=28)//判蛇頭是否撞到墻壁
{
Snake.Life=1;
}
for(i=3;i<Snake.Long;i++)//從第三節開始判斷蛇頭是否咬到自己
{
if(Snake.X[i]==Snake.X[0]&&Snake.Y[i]==Snake.Y[0])
{
Snake.Life=1;
}
}
if(Snake.Life==1) //if the snake over
{
Display_dead();
}
/******************判斷蛇是否死亡程序結束***********************/
/////////////////////////////////////////////////////////////////
/************************判斷蛇是否最長了**********************/
if(Snake.Long==SNAKE_Max_Long)
{
Display_Pass();
}
/////////////////////////////////////////////////////////////////
/*************************判蛇是否吃到食物**********************/
if(Snake.X[Snake.Long-1]==Food.X&&Snake.Y[Snake.Long-1]==Food.Y)//
{
//Trun_Off_Point(Food.X,Food.Y); //消隱食物
Snake.Long++;//蛇節數加1
Snake.X[Snake.Long-1]=Food.X;
Snake.Y[Snake.Long-1]=Food.Y;
Snake.Score+=10;
LCDShow_uCharNumber(96,24,Snake.Score,0x00ff,0xBE5F);
Food.Yes=1; //食物標志置1
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
2.4 貪吃蛇實驗.rar
(186.78 KB, 下載次數: 26)
2018-6-1 09:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
超碰人人人人
|
国内精品久久久久
|
国内精品在线视频
|
男女羞羞视频在线免费观看
|
99精品视频免费观看
|
91一区二区在线观看
|
日韩欧美国产精品
|
高清av一区
|
久久久久国产一区二区三区
|
日韩色在线
|
九九热在线观看视频
|
国产一区二区三区在线
|
亚洲入口
|
国产精品污www一区二区三区
|
999免费观看视频
|
在线观看免费av片
|
午夜视频免费在线观看
|
亚洲毛片在线
|
日韩电影中文字幕在线观看
|
亚洲精品aⅴ
|
日本三级电影免费观看
|
99色综合
|
欧美福利在线
|
精品一区二区三区视频在线观看
|
欧美精品在线免费观看
|
91亚洲国产成人久久精品网站
|
黄毛片
|
免费成人高清在线视频
|
国产高清在线观看
|
成人在线中文字幕
|
99热都是精品
|
国产精品国产精品国产专区不蜜
|
国产免费观看一级国产
|
久久av资源网
|
一级高清视频
|
成人欧美一区二区三区色青冈
|
91中文字幕在线
|
欧美在线观看黄色
|
伊人网国产
|
av国产精品
|
欧美手机在线
|