最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

蛇貪吃-代碼

2021-12-08 15:13 作者:Moodie810  | 我要投稿

貪吃蛇問世五十年來,人們關注的重點都在蛇身上,而那顆食物只是靜置一隅,坐以待斃。
本游戲中,身份發(fā)生了反轉,你將扮演一顆“不安分”的食物,躲避兩條蛇的追捕。

代碼奉上。業(yè)余自學,無甚章法,還望指教~

點我進入視頻界面

####################
# 蛇貪吃 Moodie810 #
####################

from turtle import *
from random import choice
from time import sleep

b1 = [0, 1, 2, 3] ?# 綠色蛇蛇身,0為尾3為頭
b2 = [99, 98, 97, 96] ?# 紫色蛇蛇身

green = True ?# 綠色蛇是否活著(沒有繞進死路)
purple = True

flag = False ?# False為未找到通向食物的路徑,True為已找到
score = 0 ?# 得分,蛇每走一步加一分
cn = 4 ?# 食物走幾幀蛇走一步,從4逐漸減少,直至玩家跟不上[手動滑稽]
count = 0 ?# 食物走了凡幀

a = 44 ?# 食物位置
s = [] ?# 放格子實例
wal = set() ?# 放墻
p1 = [100] ?# 放尋得的一步路徑,因為不能為空所以隨便放個100
p2 = [100]


class Block(Turtle):
 ? ?def __init__(self):
 ? ? ? ?Turtle.__init__(self, shape='square')
 ? ? ? ?self.pu()
 ? ? ? ?self.color('white', 'silver')


def wall():
 ? ?for i in range(3):
 ? ? ? ?ch = set(range(100)) - {44} ?# 除去食物
 ? ? ? ?ch = ch - set(b1) ?# 除去綠蛇
 ? ? ? ?ch = ch - set(b2) ?# 除去紫蛇
 ? ? ? ?ch = ch - wal ?# 除去已設置的障礙
 ? ? ? ?ww = choice(list(ch))
 ? ? ? ?wal.add(ww)
 ? ?for i in wal:
 ? ? ? ?s[i].fillcolor('black')


def pressKeys():
 ? ?onkeypress(right, 'Right')
 ? ?onkeypress(down, 'Down')
 ? ?onkeypress(left, 'Left')
 ? ?onkeypress(up, 'Up')


def disable(): ?# 防誤觸
 ? ?onkeypress(None, 'Right')
 ? ?onkeypress(None, 'Down')
 ? ?onkeypress(None, 'Left')
 ? ?onkeypress(None, 'Up')


def right():
 ? ?global a
 ? ?disable()
 ? ?if a % 10 != 9 and a + 1 not in b1 + b2 and a + 1 not in wal:
 ? ? ? ?s[a].fillcolor('silver')
 ? ? ? ?a += 1
 ? ? ? ?s[a].fillcolor('red')


def down():
 ? ?global a
 ? ?disable()
 ? ?if a > 9 and a - 10 not in b1 + b2 and a - 10 not in wal:
 ? ? ? ?s[a].fillcolor('silver')
 ? ? ? ?a -= 10
 ? ? ? ?s[a].fillcolor('red')


def left():
 ? ?global a
 ? ?disable()
 ? ?if a % 10 != 0 and a - 1 not in b1 + b2 and a - 1 not in wal:
 ? ? ? ?s[a].fillcolor('silver')
 ? ? ? ?a -= 1
 ? ? ? ?s[a].fillcolor('red')


def up():
 ? ?global a
 ? ?disable()
 ? ?if a < 90 and a + 10 not in b1 + b2 and a + 10 not in wal:
 ? ? ? ?s[a].fillcolor('silver')
 ? ? ? ?a += 10
 ? ? ? ?s[a].fillcolor('red')


def detect(n, w, q): ?# 判斷v號方塊周圍方塊的狀態(tài)
 ? ?global flag
 ? ?if w[n] == 1:
 ? ? ? ?flag = True
 ? ? ? ?return 1
 ? ?elif w[n] == 2:
 ? ? ? ?w[n] = 0
 ? ? ? ?q.append(n)
 ? ? ? ?return 2


def BFS(start, end, p): ?# 蛇的尋路算法,參數(shù)為起點索引、終點索引、存儲路徑的表
 ? ?w = [2] * 100 ?# 列表w存放100個格子的狀態(tài),2為未搜索,1為終點,0為已搜索
 ? ?for i in b1 + b2: ?# 把蛇身標記為已搜索
 ? ? ? ?w[i] = 0
 ? ?for i in wal: ?# 把障礙標記為已搜索
 ? ? ? ?w[i] = 0
 ? ?w[end] = 1 ?# 標記終點
 ? ?q = [start] ?# 隊列初始化,加入起點
 ? ?f = [-1] * 100 ?# 列表f用于存放路徑,記錄每個格子“來自哪里”,-1為未存放
 ? ?while q:
 ? ? ? ?v = q[0]
 ? ? ? ?if 0 <= v + 1 <= 99 and v % 10 != 9: ?# 右邊
 ? ? ? ? ? ?r = detect(v + 1, w, q)
 ? ? ? ? ? ?if r == 1:
 ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ?elif r == 2:
 ? ? ? ? ? ? ? ?f[v + 1] = v
 ? ? ? ?if 0 <= v + 10 <= 99: ?# 上方
 ? ? ? ? ? ?r = detect(v + 10, w, q)
 ? ? ? ? ? ?if r == 1:
 ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ?elif r == 2:
 ? ? ? ? ? ? ? ?f[v + 10] = v
 ? ? ? ?if 0 <= v - 1 <= 99 and v % 10 != 0: ?# 左邊
 ? ? ? ? ? ?r = detect(v - 1, w, q)
 ? ? ? ? ? ?if r == 1:
 ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ?elif r == 2:
 ? ? ? ? ? ? ? ?f[v - 1] = v
 ? ? ? ?if 0 <= v - 10 <= 99: ?# 下方
 ? ? ? ? ? ?r = detect(v - 10, w, q)
 ? ? ? ? ? ?if r == 1:
 ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ?elif r == 2:
 ? ? ? ? ? ? ? ?f[v - 10] = v
 ? ? ? ?q.pop(0)
 ? ?while v != start:
 ? ? ? ?p[0] = v
 ? ? ? ?v = f[v]


def greenmove(to): ?# 綠蛇移動一格
 ? ?s[b1[0]].color('white', 'silver')
 ? ?s[b1[-1]].fillcolor('green')
 ? ?s[to].color('green', 'blue')
 ? ?b1.pop(0)
 ? ?b1.append(to)


def purplemove(to): ?# 紫蛇移動一格
 ? ?s[b2[0]].color('white', 'silver')
 ? ?s[b2[-1]].fillcolor('purple')
 ? ?s[to].color('purple', 'blue')
 ? ?b2.pop(0)
 ? ?b2.append(to)


setup(400, 300)
tracer(False) ?# 忽略繪制過程
setworldcoordinates(-100, -50, 283, 230)
for y in range(10): ?# 生成10*10場地,用s來裝這些格子,最左下索引為0,右上為99
 ? ?for x in range(10):
 ? ? ? ?s.append(Block())
 ? ? ? ?s[-1].goto(x * 20, y * 20)

for i in b1[:3]: ?# 繪制綠蛇,其中蛇頭為藍色
 ? ?s[i].color('green', 'green')
s[3].color('green', 'blue')

for i in b2[:3]:
 ? ?s[i].color('purple', 'purple')
s[96].color('purple', 'blue')

s[44].fillcolor('red') ?# 繪制食物

wall() ?# 生成障礙物

ht() ?# 計分功能
pu()
goto(-50, 80)
write(score, font=('Arial', 20))

update()
pressKeys()
listen()

while 1:
 ? ?if count is cn:
 ? ? ? ?count = 0
 ? ? ? ?if green:
 ? ? ? ? ? ?flag = False
 ? ? ? ? ? ?BFS(b1[-1], a, p1)
 ? ? ? ? ? ?if p1[0] in b1: ?# 如果尋得的路徑在蛇身中,不是吃到了就是繞死了
 ? ? ? ? ? ? ? ?s[b1[-1]].fillcolor('green')
 ? ? ? ? ? ? ? ?if flag:
 ? ? ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ? ? ?else:
 ? ? ? ? ? ? ? ? ? ?green = False
 ? ? ? ? ? ? ? ? ? ?print('綠蛇繞死了!')
 ? ? ? ? ? ? ? ? ? ?continue
 ? ? ? ? ? ?greenmove(p1[0])
 ? ? ? ?# 綠蛇走過了,下面是紫蛇走
 ? ? ? ?if purple:
 ? ? ? ? ? ?flag = False
 ? ? ? ? ? ?BFS(b2[-1], a, p2)
 ? ? ? ? ? ?if p2[0] in b2:
 ? ? ? ? ? ? ? ?s[b2[-1]].fillcolor('purple')
 ? ? ? ? ? ? ? ?if flag:
 ? ? ? ? ? ? ? ? ? ?break
 ? ? ? ? ? ? ? ?else:
 ? ? ? ? ? ? ? ? ? ?purple = False
 ? ? ? ? ? ? ? ? ? ?print('紫蛇繞死了!')
 ? ? ? ? ? ? ? ? ? ?continue
 ? ? ? ? ? ?purplemove(p2[0])
 ? ? ? ?score += 1

 ? ?if score == 50: ?# 到50分加速
 ? ? ? ?cn = 3
 ? ?if score == 100: ?# 到100分再加速
 ? ? ? ?cn = 2
 ? ?count += 1

 ? ?clear()
 ? ?write(score, font=('Arial', 12))
 ? ?pressKeys()
 ? ?update()
 ? ?sleep(.03) ?# 動畫更新速度(單位:秒)

s[a].fillcolor('yellow')
update()
print('被吃到了哇!')
sleep(1)
bye()

少于200字竟然不能發(fā)?好,就硬湊。

不如說說游戲目前存在的問題。由于畫面是隔一小段時間刷新一次(如0.03秒),這里使用了time.sleep()函數(shù),因此在程序睡眠期間按鍵是沒有反應的。這就導致每按一次鍵,食物只會走一格,而不能通過長按來控制食物。

有待將來進一步學習……

蛇貪吃-代碼的評論 (共 條)

分享到微博請遵守國家法律
万宁市| 青海省| 巴彦淖尔市| 温宿县| 宿松县| 瓮安县| 汕尾市| 巧家县| 镇巴县| 房产| 遵化市| 青田县| 镇平县| 祁阳县| 云浮市| 沙坪坝区| 巴中市| 开远市| 玛曲县| 囊谦县| 横山县| 八宿县| 宜宾县| 兴山县| 万载县| 桐庐县| 闻喜县| 连山| 绿春县| 佛冈县| 夏邑县| 莲花县| 宁安市| 喀喇| 从江县| 临沂市| 沁水县| 吴堡县| 巴塘县| 沭阳县| 泾川县|