国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
51單片機LCD12864液晶貪吃蛇游戲代碼和Proteus仿真
[打印本頁]
作者:
eng
時間:
2021-6-14 03:42
標題:
51單片機LCD12864液晶貪吃蛇游戲代碼和Proteus仿真
51單片機+12864液晶的貪吃蛇游戲機的詳細資料。仿真實物都做過,效果比較滿意。花的精力也比較多,代碼也全都是自己一行一行的寫下來。所以做完之后想把這些東西都整理一下,方便后面要做這些東西的人。
完整單片機c源碼和proteus仿真文件:
51單片機 12864液晶貪吃蛇游戲機(完美版).zip
(170.69 KB, 售價: 5 E幣)
2021-6-14 03:41 上傳
點擊文件名下載附件
售價: 5 E幣
[記錄]
[
購買
]
環(huán)境: keil V4.02 protues version 7.5
這個東西最主要的幾塊。
1.單片機用的是stc的,51內(nèi)核,你首先要會這個···
2.用狀態(tài)機實現(xiàn)按鍵。這個里面有別人寫的技術(shù)帖子··
3.液晶是12864,2種控制器都做過,一個控制器是ST7920帶字庫的,一個控制器是KS0108不帶字庫的。2個的英文資料我都放在里面了。首先得弄懂液晶要怎么樣和單片機連接。
要在液晶上面做游戲,推薦先看英文資料,一定要看英文,研究液晶讀寫時序和初始化方法,然后找別人的程序,實現(xiàn)液晶的基本操作,畫點,寫漢字什么的,讀液晶···然后自己寫程序?qū)崿F(xiàn)液晶的所有基本操作。這樣才能對液晶有充分的認識,才能開始在上面做游戲。有了這個基礎(chǔ),以后學別的液晶也會快的多。
4.菜單,游戲少不了要用到菜單,比如選擇難度,選擇地圖什么的。我里面放了一個別人的論文,看了之后應該就會自己寫了。(注意論文里面講的是用函數(shù)指針實現(xiàn)菜單,但是KEIL這個環(huán)境下用51函數(shù)指針會很困難,推薦像我那樣直接傳菜單號)
5.貪吃蛇游戲,推薦先不要看別人的程序,自己在電腦上面下個貪吃蛇游戲,玩的時候就觀察貪吃蛇游戲的特征···比如蛇在怎么動,蛇要怎么描述,是每個點都描述還是只要蛇頭蛇尾···蛇轉(zhuǎn)彎的時候怎么寫? 對于上面的問題,可以參考別人的程序,然后就開始動手畫圖什么的表示出來這些過程,一個功能一個功能逐一實現(xiàn)。(推薦看帶字庫的那個程序,那個程序代碼是最終優(yōu)化版本。思路很清晰···)
6.液晶的動畫,動畫實際上就是圖片一張一張的顯示,我在里面放了一個把彩色照片黑白二值化的工具,可以找到自己喜歡的GIF動畫,用提取工具把照片一張一張?zhí)崛〕鰜恚缓蠛诎锥祷缓笕∧9ぞ呷∧#缓髮崿F(xiàn)···雖然過程蠻枯燥,但是效果還不過,也可以學到不少東西。
最后希望大家在看這個的時候,特別是貪吃蛇游戲?qū)崿F(xiàn)的時候,哪一個方面有更好的辦法一定通知我,因為我覺得我實現(xiàn)貪吃蛇游戲的方法已經(jīng)很不錯了。如果能有更好的,我會非常希望學習下····
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png
(37.08 KB)
下載附件
2021-6-14 03:35 上傳
部分源碼:完整源碼見附件
struct loop_queue //利用數(shù)組實現(xiàn)循環(huán)隊列,拐點不會超過15個。所以大小選15足以。
{
unsigned int front;
unsigned int rear;
unsigned int count;
struct she dat[num];
};
//不熟悉數(shù)組實現(xiàn)循環(huán)隊列的可以在紙上畫一下操作過程
struct she tou,wei,food; //蛇的頭尾節(jié)點 和食物點
struct loop_queue queue;//循環(huán)隊列 蛇轉(zhuǎn)彎則形成拐點 將拐點入隊列 尾巴到達拐點則拐點出隊列
unsigned char flag_exit_game; //返回標志 為1時 從貪吃蛇游戲返回菜單
unsigned char flag_game_over; //結(jié)束標志 為1時 顯示游戲結(jié)束畫面 同時使返回標志為1
unsigned char tcs_key_flag; //貪吃蛇在一次移動中 只允許捕獲一次按鍵 也就是只能產(chǎn)生一個拐點
unsigned char tcs_key_state; //用于按鍵狀態(tài)機的實現(xiàn)
unsigned int tcs_df; //貪吃蛇得分
unsigned char tcs_stop;//貪吃蛇暫定功能的實現(xiàn)
unsigned char tcs_nd; //貪吃蛇難度的選擇
unsigned char tcs_dt; //貪吃蛇地圖的選擇 這2個是全局變量 在menu里面要用到
void tcs_bianjie(unsigned int he);//貪吃蛇游戲地圖的實現(xiàn)和邊界
void timer0_initial();
void timer1_initial();
//循環(huán)隊列的基本操作
void queue_initial(struct loop_queue *q);
void queue_in(struct loop_queue *q,struct she h) ;
struct she queue_out(struct loop_queue *q) ;
void tcs_game_initial();
void food_produce();
void tcs_game()
{
struct she check; //用與暫存蛇即將移動的點 從而進行判斷
unsigned int he;
unsigned char flag;//flag作為吃到食物的標志
flag_exit_game=0;
flag_game_over=0;
tcs_key_state=0;
tcs_df=0;
tcs_stop=1;
// draw_lcd_picture(&tcs_picture[0]); //貪吃蛇游戲畫面
// delay_ms(2000);
tcs_bianjie(tcs_dt); //貪吃蛇游戲邊界
tcs_game_initial();//貪吃蛇初始化 主要是設(shè)定蛇頭蛇尾 并顯示蛇
timer0_initial(); //定時器0工作在方式2 8位自動裝初值 只計數(shù)不中斷 用來產(chǎn)生隨機數(shù)
timer1_initial(); //定時器1工作在方式1 16位 10ms中斷一次掃描鍵盤
do
{
food_produce();//產(chǎn)生一個隨機數(shù) 即隨即產(chǎn)生x y value3個值確定一個點為食物
he=test_point_exist(food.x,food.y,food.value);//檢測產(chǎn)生的點的地方是否已經(jīng)有點存在
}
while(he==food.value);//如果隨機數(shù)產(chǎn)生在蛇的身體以及邊界上 則重新再產(chǎn)生一個
draw_lcd_point(food.x,food.y,food.value);//顯示食物 先讀取這個點所在xy的情況 以免破壞現(xiàn)場
queue_initial(&queue);//初始化循環(huán)隊列 使隊列空 front rear 即頭尾指針為0
while(1)
{
if(flag_exit_game==1)//如果游戲過程中按下返回鍵 則立即結(jié)束游戲 返回菜單
break;
if(flag_game_over==1)//如果游戲過程中蛇死了 則立即結(jié)束游戲 顯示結(jié)束動畫 按鍵后返回菜單
break;
ET1=1; //允許掃描按鍵 貪吃蛇游戲難度決定蛇2次移動之間的間隔時間 也就是檢測按鍵的時間
tcs_key_flag=0; //允許捕獲按鍵 在檢測按鍵時間內(nèi) 只允許生產(chǎn)一個拐點 即捕獲到一個有效的
//按鍵以后 就置一這個變量 不允許再增加拐點
while(tcs_stop==0);//暫定鍵按下會取反tcs_stop的值 從而實現(xiàn)暫停功能
switch(tcs_nd)
{
case 0: {delay_ms(10); break;}//0代表變態(tài)難度 蛇的2次移動之間只有10ms的機會檢測鍵盤按下
case 1: {delay_ms(50); break;}//難度減小 2次移動間隔增加
case 2: {delay_ms(100); break;}
}
ET1=0;
switch(tou.direction)//這個switch用來根據(jù)蛇頭的x y value值以及當前蛇頭移動的方向
//取出蛇頭要到達的下一個點 存入check中 來判斷是否撞墻 吃到食物 什么的···
{
case 0: {
check.y=tou.y;
if(tou.value==0x0001)//x的值要發(fā)生改變
{
if(tou.x==3)//蛇碰到上屏幕的右邊界 則回到左邊界
check.x=0;
else if(tou.x==11)//蛇碰到下屏幕的右邊界 則回到左邊界
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0