亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Python > 正文

PyGame貪吃蛇的實(shí)現(xiàn)代碼示例

2020-02-15 23:46:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

最近幫人做了個(gè)貪吃蛇的游戲(交作業(yè)用),很簡(jiǎn)單,界面如下:

開(kāi)始界面:

游戲中界面:

是不是很簡(jiǎn)單、樸素。(歡迎大家訪問(wèn)GitHub)

游戲是基于PyGame框架制作的,程序核心邏輯如下:

游戲界面分辨率是640*480,蛇和食物都是由1個(gè)或多個(gè)20*20像素的正方形塊兒(為了方便,下文用點(diǎn)表示20*20像素的正方形塊兒)組成,這樣共有32*24個(gè)點(diǎn),使用pygame.draw.rect來(lái)繪制每一個(gè)點(diǎn); 初始化時(shí)蛇的長(zhǎng)度是3,食物是1個(gè)點(diǎn),蛇初始的移動(dòng)的方向是右,用一個(gè)數(shù)組代表蛇,數(shù)組的每個(gè)元素是蛇每個(gè)點(diǎn)的坐標(biāo),因此數(shù)組的第一個(gè)坐標(biāo)是蛇尾,最后一個(gè)坐標(biāo)是蛇頭; 游戲開(kāi)始后,根據(jù)蛇的當(dāng)前移動(dòng)方向,將蛇運(yùn)動(dòng)方向的前方的那個(gè)點(diǎn)append到蛇數(shù)組的末位,再把蛇尾去掉,蛇的坐標(biāo)數(shù)組就相當(dāng)于往前挪了一位; 如果蛇吃到了食物,即蛇頭的坐標(biāo)等于食物的坐標(biāo),那么在第2點(diǎn)中蛇尾就不用去掉,就產(chǎn)生了蛇長(zhǎng)度增加的效果;食物被吃掉后,隨機(jī)在空的位置(不能與蛇的身體重合)再生成一個(gè); 通過(guò)PyGame的event監(jiān)控按鍵,改變蛇的方向,例如當(dāng)蛇向右時(shí),下一次改變方向只能向上或者向下; 當(dāng)蛇撞上自身或墻壁,游戲結(jié)束,蛇頭裝上自身,那么蛇坐標(biāo)數(shù)組里就有和舌頭坐標(biāo)重復(fù)的數(shù)據(jù),撞上墻壁則是蛇頭坐標(biāo)超過(guò)了邊界,都很好判斷; 其他細(xì)節(jié):做了個(gè)開(kāi)始的歡迎界面;食物的顏色隨機(jī)生成;吃到實(shí)物的時(shí)候有聲音提示等。

代碼:

#!/usr/bin/env python # -*- coding:utf-8 -*- """ @version: v1.0 @author: Harp@contact: liutao25@baidu.com @software: PyCharm @file: MySnake.py @time: 2018/1/15 0015 23:40 """import pygamefrom os import pathfrom sys import exitfrom time import sleepfrom random import choicefrom itertools import productfrom pygame.locals import QUIT, KEYDOWNdef direction_check(moving_direction, change_direction):  directions = [['up', 'down'], ['left', 'right']]  if moving_direction in directions[0] and change_direction in directions[1]:    return change_direction  elif moving_direction in directions[1] and change_direction in directions[0]:    return change_direction  return moving_directionclass Snake:  colors = list(product([0, 64, 128, 192, 255], repeat=3))[1:-1]  def __init__(self):    self.map = {(x, y): 0 for x in range(32) for y in range(24)}    self.body = [[100, 100], [120, 100], [140, 100]]    self.head = [140, 100]    self.food = []    self.food_color = []    self.moving_direction = 'right'    self.speed = 4    self.generate_food()    self.game_started = False  def check_game_status(self):    if self.body.count(self.head) > 1:      return True    if self.head[0] < 0 or self.head[0] > 620 or self.head[1] < 0 or self.head[1] > 460:      return True    return False  def move_head(self):    moves = {      'right': (20, 0),      'up': (0, -20),      'down': (0, 20),      'left': (-20, 0)    }    step = moves[self.moving_direction]    self.head[0] += step[0]    self.head[1] += step[1]  def generate_food(self):    self.speed = len(self.body) // 16 if len(self.body) // 16 > 4 else self.speed    for seg in self.body:      x, y = seg      self.map[x//20, y//20] = 1    empty_pos = [pos for pos in self.map.keys() if not self.map[pos]]    result = choice(empty_pos)    self.food_color = list(choice(self.colors))    self.food = [result[0]*20, result[1]*20]def main():  key_direction_dict = {    119: 'up', # W    115: 'down', # S    97: 'left', # A    100: 'right', # D    273: 'up', # UP    274: 'down', # DOWN    276: 'left', # LEFT    275: 'right', # RIGHT  }  fps_clock = pygame.time.Clock()  pygame.init()  pygame.mixer.init()  snake = Snake()  sound = False  if path.exists('eat.wav'):    sound_wav = pygame.mixer.Sound("eat.wav")    sound = True  title_font = pygame.font.SysFont('arial', 32)  welcome_words = title_font.render('Welcome to My Snake', True, (0, 0, 0), (255, 255, 255))  tips_font = pygame.font.SysFont('arial', 24)  start_game_words = tips_font.render('Click to Start Game', True, (0, 0, 0), (255, 255, 255))  close_game_words = tips_font.render('Press ESC to Close', True, (0, 0, 0), (255, 255, 255))  gameover_words = title_font.render('GAME OVER', True, (205, 92, 92), (255, 255, 255))  win_words = title_font.render('THE SNAKE IS LONG ENOUGH AND YOU WIN!', True, (0, 0, 205), (255, 255, 255))  screen = pygame.display.set_mode((640, 480), 0, 32)  pygame.display.set_caption('My Snake')  new_direction = snake.moving_direction  while 1:    for event in pygame.event.get():      if event.type == QUIT:        exit()      elif event.type == KEYDOWN:        if event.key == 27:          exit()        if snake.game_started and event.key in key_direction_dict:          direction = key_direction_dict[event.key]          new_direction = direction_check(snake.moving_direction, direction)      elif (not snake.game_started) and event.type == pygame.MOUSEBUTTONDOWN:        x, y = pygame.mouse.get_pos()        if 213 <= x <= 422 and 304 <= y <= 342:          snake.game_started = True    screen.fill((255, 255, 255))    if snake.game_started:      snake.moving_direction = new_direction # 在這里賦值,而不是在event事件的循環(huán)中賦值,避免按鍵太快      snake.move_head()      snake.body.append(snake.head[:])      if snake.head == snake.food:        if sound:          sound_wav.play()        snake.generate_food()      else:        snake.body.pop(0)      for seg in snake.body:        pygame.draw.rect(screen, [0, 0, 0], [seg[0], seg[1], 20, 20], 0)      pygame.draw.rect(screen, snake.food_color, [snake.food[0], snake.food[1], 20, 20], 0)      if snake.check_game_status():        screen.blit(gameover_words, (241, 310))        pygame.display.update()        snake = Snake()        new_direction = snake.moving_direction        sleep(3)      elif len(snake.body) == 512:        screen.blit(win_words, (33, 210))        pygame.display.update()        snake = Snake()        new_direction = snake.moving_direction        sleep(3)    else:      screen.blit(welcome_words, (188, 100))      screen.blit(start_game_words, (236, 310))      screen.blit(close_game_words, (233, 350))    pygame.display.update()    fps_clock.tick(snake.speed)if __name__ == '__main__':  main()            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
91白丝在线| 久久69成人| 国产偷窥老熟盗摄视频| 嫩草伊人久久精品少妇av杨幂| 久久香蕉国产线看观看99| 国产亚洲精品久久久久久无几年桃| 欧美影院精品一区| 亚洲一区二区中文| 男女激情无遮挡| 亚洲视频二区| 中文字幕乱码在线| 日韩免费视频一区二区视频在线观看| 97人人模人人爽人人澡| 色婷婷综合久久久久中文一区二区| 欧美大片大片在线播放| 欧美精品免费播放| 成人黄色国产精品网站大全在线免费观看| 国产自产自拍视频在线观看| eeuss影院网站免费观看| 国产精品伦理一区二区三区| 国产xxxx做受性欧美88| 国产精品18久久久久久麻辣| 成人三级av| 日韩精品成人一区| 日日噜噜噜噜人人爽亚洲精品| 国产精品1区2区3区在线观看| 成人免费观看49www在线观看| 国产伦理在线观看| 毛片免费在线| 国产剧情久久久久久| 极品粉嫩小仙女高潮喷水久久| 337p粉嫩大胆噜噜噜噜噜91av| 欧美a级一区| 欧美最猛性xxxxxhd| 成人福利av| 视频一区中文字幕| 国产又色又爽又黄又免费| 奇米777影视成人四色| 国产高清在线观看免费不卡| 国产日本欧美一区二区三区在线| a√天堂在线观看| 五月婷婷一区| 99精品国产一区二区青青牛奶| 久久精彩免费视频| 99re热视频精品| 欧美大香线蕉线伊人久久国产精品| 2021久久精品国产99国产精品| 国产91综合一区在线观看| 欧美大片欧美激情性色a∨久久| 欧美视频三区| 精品一区二区观看| 国产一区红桃视频| 一区二区三区欧美激情| eeuss影院在线| 日韩欧美一区电影| 久久一级免费视频| 久久夜色精品亚洲噜噜国产mv| 2222www色视频在线观看| 黄色在线网站噜噜噜| 亚洲综合激情网| 欧美激情性xxxxx| 99精品久久久久久| 神马久久久久久| 天天色天天射天天干| 怡红院红怡院欧美aⅴ怡春院| 欧美日韩国产高清一区二区三区| 亚洲 欧美 激情 小说 另类| 欧美在线一区二区三区四区| 欧美最顶级的aⅴ艳星| 日本三日本三级少妇三级66| 国产成人毛片| 国产91免费看| 精品国产精品网麻豆系列| 欧美精品一区二区三区高清aⅴ| 丰满熟女一区二区三区| 国产成人自拍视频在线观看| 99re91这里只有精品| 欧美午夜激情小视频| 午夜影院韩国伦理在线| 久久精品国产精品亚洲综合| 色综合免费视频| 欧美亚洲国产日韩2020| 欧美人妖巨大在线| 亚洲成人av中文| 天天躁日日躁狠狠躁av麻豆男男| 久久精品人人爽| 欧美日韩国产小视频在线观看| 好男人社区在线视频| 欧美色图亚洲| 直接看的黄色网址| 亚洲中文字幕无码一区| 国产综合精品| 图片区 小说区 区 亚洲五月| 国产精品久久久久久搜索| 免费看国产片在线观看| 日本少妇一区| 国产不卡在线视频| 男人天堂手机在线视频| 成人网免费视频| 激情久久婷婷| 日韩综合一区二区| 国产精品视频中文字幕| 性生活免费观看视频| 欧美性猛交xxxx免费看| 日韩国产成人无码av毛片| 国产淫片在线观看| 亚洲女人天堂| 天天干天天插天天操| 亚洲综合中文字幕在线观看| 国产精品xxxxxx| 日韩欧美在线电影| 国产一区亚洲| 国产一区二区欧美日韩| 精品国产伦理网| 人妻 丝袜美腿 中文字幕| 亚洲精品99久久久久| 国产日韩久久| 日韩毛片网站| 日韩欧美猛交xxxxx无码| 在线午夜精品| 日韩欧美国产视频| 狠狠操视频网站| 欧美最猛性xxxx高清| 一区二区黄色| 欧美美女在线观看| 麻豆成人在线| 88xx成人免费观看视频库| av在线一区二区三区| 男人天堂视频在线| 麻豆一区在线观看| 波多野结衣在线一区| 国产一区二区三区天码| 日本一级片免费| 97久久精品人人澡人人爽缅北| 波多野结衣高清在线| av中文字幕在线看| 男女午夜激情视频| 色综合老司机第九色激情| 日韩极品一区| 久久av在线看| av资源免费看| 亚洲熟妇无码av在线播放| 欧美天堂亚洲电影院在线观看| 91在线精品观看| 独立日3在线观看完整版| 日本10禁啪啪无遮挡免费一区二区| 国产成人精品日本亚洲11| 免费99热在线观看| 久久视频国产| 天堂一区二区在线| 三区在线视频| 在线看国产日韩| 欧美老少做受xxxx高潮| 妖精视频在线观看免费| 亚洲第一页在线| 国产99在线 | 亚洲| 亚洲国产精品免费视频| 国产一级影片| 五月天婷亚洲天综合网鲁鲁鲁| 一区二区免费在线观看视频| 欧美亚洲国产bt| 99re8在线精品视频免费播放| 中文字幕少妇| 国产精品久久久久久久妇| 亚洲午夜精品久久久久久高潮| 午夜私人影院久久久久| 亚洲va国产日韩欧美精品色婷婷| 长河落日免费高清观看| 夜夜嗨av一区二区三区中文字幕| 亚洲天堂久久av| 欧美成人黑人xx视频免费观看| 美女视频一区二区三区| 成人看片app| 亚洲人亚洲人色久| igao视频网在线视频| 成人h猎奇视频网站| 午夜激情在线播放| 国产精品一区二区不卡| 精品乱子伦一区二区| 三日本三级少妇三级99| 极品少妇一区二区三区精品视频| 欧美不卡视频一区| 久久精品视频观看| 欧美无砖专区免费| 日本精品一区二区三区高清| 永久免费黄色片| 蜜桃狠狠色伊人亚洲综合网站| 美日韩在线观看| 一区二区三区鲁丝不卡| 国产成人精品福利一区二区三区| 日本中文字幕视频一区| 久久综合狠狠综合久久综合88| 亚洲av成人精品一区二区三区| 国产精品视频在线看| 一区二区三区蜜桃网| 成人xxxxx| 日韩中文在线中文网三级| 国产一卡二卡3卡4卡四卡在线| 免费看的黄色欧美网站| 992kp免费看片| 日韩毛片在线| 大白屁股一区二区视频| 中文字幕欧美一区| 黄页免费在线观看视频| 你懂得视频在线观看| 亚洲男人天堂2023| 欧美一级做性受免费大片免费| 一区二区在线视频| 美女网站视频久久| a天堂资源在线观看| 精品国产91久久久久久久妲己| 亚洲成人影院在线观看| 久久久免费在线观看| 日产精品久久久久久久| 国产福利av网站| 亚洲国产午夜精品| 国产美女久久精品香蕉69| 国产精品久久久久av| 一区二区亚洲| 日本不卡二三区| 日韩经典中文字幕| 亚洲变态欧美另类捆绑| 精品一区二区三区自拍图片区| 99热这里只有精品在线播放| 免费看av大片| 亚洲精品国产一区二区在线| 国产欧美高清在线| 亚洲剧情一区二区| 在线观看免费一区| 伊人成人免费视频| 无码 人妻 在线 视频| 一区二区三区在线播放欧美| 欧美性高清videossexo| 亚洲男男gay视频| 国产精品久久久免费| 天堂资源中文在线| 欧美日本视频在线| 强制捆绑调教一区二区| 一级特黄大欧美久久久| aaa亚洲精品| 污片在线观看一区二区| 亚洲国产精品成人一区二区| 亚洲三级黄色在线观看| yjizz视频网站在线播放| 一区二区欧美在线| 国产精品高清无码在线观看| 人妻中文字幕一区| 91伊人久久大香线蕉| 久久久全国免费视频| 91佛爷在线| 爱福利一区二区| 日韩欧美国产三级| 国产精品午夜影院| 午夜精品久久久久久久久久久久久| 免费看美女隐私的视频| 国产精品探花在线播放| 性色av香蕉一区二区| 欧美精品一区在线播放| 日韩电影在线观看一区| 中文字幕一区二区精品| 日韩国产精品91| 精品久久久久久无码国产| 亚洲人成色777777老人头| 欧美高清视频在线播放| 欧美一区二区三区免费在线看| 操人视频91| 亚洲区综合中文字幕日日| 亚洲视频在线观看网站| 中文字幕免费精品一区高清| 久久国产精品网| 亚洲国产成人不卡| 少妇高潮喷水在线观看| 免费无码国产精品| 一级黄色片在线免费观看| 成人动漫在线一区| 精品国产一区二区三区无码| 在线观看国产精品视频| av天在线播放| 国产美女免费视频| 欧美午夜理伦三级在线观看| 国产成人精品实拍在线| 在线观看午夜av| www.欧美com| 91麻豆一二三四在线| 欧美日韩一区二区不卡| 日韩丰满少妇无码内射| 成人av在线不卡| 国产成人福利av| 一区二区不卡在线视频 午夜欧美不卡'| 红桃成人av在线播放| 欧美日韩视频在线观看一区二区三区| 青青草国产成人a∨下载安卓| 成人黄色免费网站| 欧美www视频在线观看| 亚洲资源视频| 中老年在线免费视频| 欧美一区二区三区在线| 天天av导航| 精品一区二区电影| 男裸体无遮挡网站| 亚洲视频精品| 亚洲综合色激情五月| 亚洲人成毛片在线播放女女| 国产在线不卡一区二区三区| 精品成人无码久久久久久| 亚洲欧美激情在线视频| 2021国产视频| 亚洲欧美综合久久久| 成人爽a毛片一区二区| 国产一区二区三区视频在线观看| 99re免费视频精品全部| 丝袜老师办公室里做好紧好爽| 午夜成人在线视频| 欧美videos巨大粗暴| 国产传媒在线| 久久久精品人妻无码专区| 日韩亚洲国产中文字幕欧美| 国产成人精品无码片区在线| 狠狠精品干练久久久无码中文字幕| 国产九九精品| 国产精品久久久久久久99| 免费a级毛片永久免费| 天天操夜夜欢| 韩国av一区二区三区四区| 懂色av蜜臀av粉嫩av分享吧最新章节| 97在线观看免费观看高清| 久久影院一区二区| 91麻豆福利精品推荐|