pygame 簡易貪吃蛇實現(xiàn)

最近想用動手51單片機做個貪吃??的游戲機,發(fā)現(xiàn)沒有思路索用python實現(xiàn)了一把(日常摸魚),關(guān)于51貪吃蛇游戲機的事日后在更新

代碼

import pygame,random

from pygame.locals import *
class Point:
    row =0
    col = 0
    def __init__(self,row,col):
        self.row=row
        self.col=col
    def  copy(self):
        return Point(row=self.row,col=self.col)
import pygame,random
#初始化
pygame.init()
W=800
H=600
ROW=30
COL=40
size=(W,H)
window = pygame.display.set_mode(size)
pygame.display.set_caption('貪吃蛇')

head = Point(row=int(ROW/2),col=int(COL/2))
snacks=[
    Point(row=head.row,col=head.col+1),
    Point(row=head.row,col=head.col+2),
    Point(row=head.row,col=head.col+3)
]
#生成food
def gen_food():
    while 1:
        pos =Point(row=random.randint(0,ROW-1),col=random.randint(0,COL-1))
        is_coll=False
        #是否碰上??
        if head.col==pos.col and head.row==pos.row:
            is_coll=True
        for snack in snacks:
            if snack.col==pos.col and snack.row == pos.row:
                is_coll=True
                break
        if not  is_coll:
            break
    return pos


#定義坐標

food = gen_food()
head_color=(228,0,0)
food_color= (255,225,0)
snack_color=(128,128,128)
direct='left'

#畫
def rect(point,color):
    cell_width=W/COL
    cell_hight=H/ROW
    left=point.col*cell_width
    top =point.row*cell_hight
    pygame.draw.rect(window,color,(left,top,cell_width,cell_hight),0)


#游戲循環(huán)
quit = True
clock = pygame.time.Clock()
while quit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            quit=False
        if event.type ==pygame.KEYDOWN :
            if event.key == pygame.K_LEFT:
                if direct=='up' or direct=='down':
                    direct='left'
            if event.key == pygame.K_RIGHT:
                if direct == 'up' or direct == 'down':
                    direct = 'right'
            if event.key == pygame.K_DOWN:
                if direct == 'left' or direct == 'right':
                    direct = 'down'
            if event.key == pygame.K_UP:
                if direct == 'left' or direct == 'right':
                    direct = 'up'
#吃東西
    eat=(head.row==food.row and head.col==food.col)
#處理身子
# 1.把原來的頭插到snack頭上
    snacks.insert(0,head.copy())
#2.刪掉snacks最后一個
    if not eat:
        snacks.pop()
    if eat:
        food = gen_food()



#移動??

    if direct=='left':
        head.col-=1
    elif direct=='right':
        head.col+=1
    elif direct=='up':
        head.row-=1
    elif direct=="down":
        head.row+=1
    #檢測是否死了
    dead=False
    if head.row<0 or head.row>=ROW or head.col<0 or head.col>=COL:
        dead=True

     #撞自己
    for snack in snacks:
        if head.row==snack.row and snack.col==head.col:
            dead=True
            print('defefefd')
            break
    if dead==True:
        print("死了")
        quit=False
    #渲染——畫出來

    pygame.draw.rect(window,(255,255,255),(0,0,W,H))#背景
    #畫蛇頭
    rect(head,head_color)
    rect(food,food_color)
    #畫出蛇的身體
    for snack in snacks:
        rect(snack,snack_color)
    # 讓出控制權(quán)
    pygame.display.flip()
    #設置幀頻
    clock.tick(10)

運行結(jié)果:


貪吃蛇.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 記得有人曾經(jīng)和我交流過一個話題,認為我走路有點快,有點跟不上的感覺。是這樣嗎?也許是吧。再細細想想,到底是什么原因...
    小新哥微課堂閱讀 432評論 0 0
  • 《無名之輩》看完了,又是一個費紙的電影,可能就是那種市井的小人物的故事才讓我們覺得真實吧。 搶匪,保安,殘廢,這些...
    唐公子1閱讀 288評論 0 0

友情鏈接更多精彩內(nèi)容