本文來源電子發燒友社區,作者:劉建華, 帖子地址:https://bbs.elecfans.com/jishu_2310612_1_1.html
前面生成了運動、生成食物的算法。這次增加吃食物的算法:
1、創建生成食物的標志build_food_state,在主程序中判斷,如果標志需要創建食物,則生成。如果食物還存在,就不生成食物。
2、吃到食物的判斷:如果生成下一個食物的坐標數組與食物的坐標數組相等,則不消除最后尾的塊,同時更新生成食物的標志為真。如果沒有吃到食物,則消除尾部塊。
# 如果加入的方塊等于食物,則不刪去尾塊
if disp_List[-1] == disp_food:
buid_food_state = 1
else:
del disp_List[0]
整體程序如下:
import os
import tqs1
import tqmain
import tqmath
#value= '1000000,1000000,1000000,1000000,1000000,1000000'
#mylist =[0x08,0x08,0x08,0x08,0x08,0x08]
myItem =[[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]]
#tqmain.serial_write_line("start")
state = True
disp_List = [[0,0]]
disp_food = []
time_state = 0
move_state = 0
buid_food_state = 1
def disp_tq():
global state,myItem
state = False
mystr =[]
for j in range(0,6):
strit = ''.join(str(i) for i in myItem[j])
mystr.append(strit)
print(mystr)
value = ','.join(mystr)
tqmain.matri_strfill_display(value)
state = False
def get_key():
global state,move_state
key_value1 = tqs1.key_get_status(2)
if key_value1 == 0:
move_state = move_state +1
if move_state > 3:
move_state = 0
print("KeyB changed,move_state:" + str(move_state))
state = True
key_value2 = tqs1.key_get_status(1)
if key_value2 == 0:
move_state = move_state -1
if move_state < 0:
move_state = 3
print("KeyA changed,move_state:" + str(move_state))
state = True
def move():
global move_state,myItem,disp_List,disp_food,buid_food_state
#先把同最前一個滅了
fisrt = disp_List[0]
myItem[fisrt[0]][fisrt[1]]=0
if move_state == 0:
tail = disp_List[-1]
print(tail)
x=tail[0]
y=tail[1]+1
if(y>6):
y=0
disp_List.append([x,y])
elif move_state == 1:
tail = disp_List[-1]
print(tail)
x=tail[0]+1
y=tail[1]
if(x>5):
x=0
disp_List.append([x,y])
elif move_state == 2:
tail = disp_List[-1]
print(tail)
x=tail[0]
y=tail[1]-1
if(y<0):
y=6
disp_List.append([x,y])
elif move_state == 3:
tail = disp_List[-1]
print(tail)
x=tail[0]-1
y=tail[1]
if(x<0):
x=5
disp_List.append([x,y])
# 如果加入的方塊等于食物,則不刪去尾塊
if disp_List[-1] == disp_food:
buid_food_state = 1
else:
del disp_List[0]
for item in disp_List:
myItem[item[0]][item[1]]=1
if len(disp_food) == 2:
myItem[disp_food[0]][disp_food[1]] = 1
# 隨機生成 坐標 食物
def build_food():
global disp_List,disp_food,buid_food_state
disp_food=[]
disp_food.append(tqmath.random(0, 5))
disp_food.append(tqmath.random(0, 6))
if disp_food in disp_List:
print(disp_food)
buid_food_state = 0
while True:
get_key()
if state == True:
move()
if buid_food_state == 1:
build_food()
disp_tq()
os.sleep(0.1)
else:
time_state = time_state + 1
if time_state == 5:
move()
if buid_food_state == 1:
build_food()
disp_tq()
time_state = 0
os.sleep(0.1)
效果見視頻。
【貪吃蛇4視頻演示】詳見作者原貼文章
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
開發板
+關注
關注
25文章
5675瀏覽量
104572
發布評論請先 登錄
相關推薦
熱點推薦
有獎丨米爾 瑞芯微RK3506開發板免費試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3506應用處理器的MYD-YR3506開發板免費試用名額來啦~~米爾提供了3塊價值299元的MYD-YR3506開發板發起

基于RK3576處理器,米爾RK3576開發板免費試用
年7月19日 ? 評測數量: 3塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發板免費試用 RISC-V開發板深度評測!頂級

搭載OpenHarmony操作系統,視美泰SC-3568HA開發板免費試用
: 10塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發板免費試用 RISC-V開發板深度評測!頂級開發板免費

基于RK處理器,創龍TL3562-MiniEVM開發板試用體驗
數量: 10塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發板免費試用 RISC-V開發板深度評測!頂級開發板免費

性能強悍!合眾HZ-RK3568開發板試用體驗
月19日 ? 評測數量: 10塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發板免費試用 RISC-V開發板深度評測!頂級開發板免費

有獎丨米爾 NXP i.MX91開發板免費試用來啦
米爾與NXP合作發布的新品基于NXPi.MX91應用處理器的MYD-LMX91開發板免費試用名額來啦~~米爾提供了3套價值588元的MYD-LMX91開發板發起


免費丨米爾 STM32MP257開發板有獎試用
米爾與ST合作發布的新品基于STM32MP257應用處理器的MYD-LD25X開發板免費試用活動來啦~~米爾提供了2塊價值488元的MYD-LD25X開發板發起試用活動您不僅可以免費

有獎丨米爾 瑞芯微YR3562開發板免費試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3562應用處理器的MYD-YR3562開發板免費試用活動來啦~~米爾提供了3塊價值599元的MYD-YR3562開發板發起

有獎丨米爾 全志T536開發板免費試用
米爾與全志合作發布的新品基于全志T536應用處理器的MYD-LT536-GK開發板免費試用活動來啦~~米爾提供了3塊價值750元的MYD-LT536-GK開發板發起

追加名額丨米爾瑞芯微RK3576開發板有獎試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3576應用處理器的MYD-LR3576開發板免費試用活動加碼啦~~米爾追加了2塊價值849元的MYD-LR3576開發板發起試用活動您不僅可以

評論