国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python完成簡(jiǎn)單的貪吃蛇小游戲附編號(hào)

89542767 / 524人閱讀

  此篇文章主要是詳細(xì)介紹了python完成簡(jiǎn)單的貪吃蛇小游戲附編號(hào),文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的參考意義,需用的朋友可以學(xué)習(xí)一下


  序言:


  不知道有沒(méi)有同學(xué)們和我一樣,最開(kāi)始觸碰程序編程的動(dòng)機(jī)就是為了做一個(gè)游戲打?


  接下來(lái)要跟大家分享是指一個(gè)pygame所寫(xiě)的“貪食蛇”手機(jī)游戲:


  “貪食蛇”這一個(gè)手機(jī)游戲在編程設(shè)計(jì)里的熟客,由于:


  簡(jiǎn)易,最基本游戲情節(jié)你只需要蛇和食物2個(gè)就可以去了。(打手沖還要3個(gè)原素呢,想一想各是什么?)方位得話只需前后左右4個(gè)確定方位就行了。有最基本的算法設(shè)計(jì)和面向?qū)ο笥^念在這其中。游戲軟件開(kāi)發(fā)本身也要用到好多面向?qū)ο蠖x,而蛇的人體又是個(gè)純天然的“雙向鏈表”構(gòu)造,很適合用于訓(xùn)練算法設(shè)計(jì)了。此外較為有意思的地方在于,Python這個(gè)英語(yǔ)單詞在在英語(yǔ)中便是大蟒蛇的意味,貪食蛇算得上是“同名的手機(jī)游戲”了。很多高校里軟件開(kāi)發(fā)學(xué)科的工作都有貪食蛇的論文選題,也經(jīng)常會(huì)還有同學(xué)問(wèn)到有關(guān)的編號(hào)。(諾基亞對(duì)這款游戲都是十分偏愛(ài)。)之前我也做過(guò)一次《貪吃蛇大作戰(zhàn)》的Python版本號(hào),基于cocos2d-python開(kāi)發(fā)。但那個(gè)針對(duì)新手而言有一些太復(fù)雜了。

01.png

  接下來(lái)我們做一個(gè)簡(jiǎn)要概述:


  此編號(hào)依托于pygame研發(fā),因此運(yùn)作前請(qǐng)保證你自己的Python里已經(jīng)成功組裝pygame。之后直接運(yùn)行代碼中的game2.py即可開(kāi)始游戲。除開(kāi)最后的編號(hào)外,大家還特地溶解了兩個(gè)過(guò)程的py文件,供想讓自己研發(fā)的同學(xué)們參照。


  大家首先來(lái)客觀分析,要寫(xiě)下這款游戲來(lái)需用注意些什么點(diǎn)。


  1、蛇怎么表達(dá)?


  我們能把整個(gè)游戲場(chǎng)地劃分為一個(gè)一個(gè)的方格,由1組連在一起方格構(gòu)成“蛇”,你可以用不一樣的顏色來(lái)描述,如上圖所述中,我用深顏色表達(dá)情況,淺色系表達(dá)“蛇”。


  你可以用座標(biāo)來(lái)描述任何一個(gè)小方格,X軸和Y軸標(biāo)準(zhǔn)都是能夠定好的。通過(guò)一個(gè)目錄來(lái)儲(chǔ)存“雙角”的座標(biāo),那樣1條“蛇”就上來(lái)了,最終只需標(biāo)注的過(guò)程中以不一樣的顏色表達(dá)就可以了。


  2、蛇怎么移動(dòng)?


  首先想到的就是像泥鰍腸蠕動(dòng)相同,任何一個(gè)小三角往前面挪動(dòng)一個(gè),不過(guò)這樣完成下去非常麻煩。本身就是被這兒不動(dòng)了。


  展開(kāi)想象大家玩過(guò)的游戲貪食蛇,每一次“蛇”移動(dòng)覺(jué)得上有總體往前面移動(dòng)了一個(gè),過(guò)濾掉腦袋中“蛇”的“行為”,仔細(xì)想挪動(dòng)時(shí)和挪動(dòng)后“蛇”位置變動(dòng),當(dāng)然除了首尾,其他部位根本沒(méi)有變。那么就輕松了,將下一個(gè)格的座標(biāo)導(dǎo)入到目錄打頭,并清除目錄的最后一個(gè)元素,就等于是蛇往前面移動(dòng)了一個(gè)。


  3、怎樣判斷比賽終止?


  “蛇”挪動(dòng)遠(yuǎn)遠(yuǎn)超過(guò)了游戲區(qū)域的范疇或是不小心碰到自身即便輸?shù)袅?,軸座標(biāo)的范疇是預(yù)先訂好,超出非常容易分辨。那樣怎么判斷遇到自己呢?


  假如腦中想的就是“蛇”動(dòng)游戲界面,那簡(jiǎn)直較難了,但放進(jìn)編號(hào)中,我們自己的“蛇”是個(gè)目錄,那樣只需分辨下一個(gè)格的座標(biāo)是不是已經(jīng)包括在“蛇”的頁(yè)面上豈不是就行了?


  梳理了各種問(wèn)題,大家就可以去編號(hào)了。


  定義游戲元素及界面:


  def main():
  pygame.init()
  screen=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
  pygame.display.set_caption('貪吃蛇')
  light=(100,100,100)#蛇的顏色
  dark=(200,200,200)#食物顏色
  font1=pygame.font.SysFont('SimHei',24)#得分的字體
  font2=pygame.font.Font(None,72)#GAME OVER的字體
  red=(200,30,30)#GAME OVER的字體顏色
  fwidth,fheight=font2.size('GAME OVER')
  line_width=1#網(wǎng)格線寬度
  black=(0,0,0)#網(wǎng)格線顏色
  bgcolor=(40,40,60)#背景色
  #方向,起始向右
  pos_x=1
  pos_y=0
  #如果蛇正在向右移動(dòng),那么快速點(diǎn)擊向下向左,由于程序刷新沒(méi)那么快,向下事件會(huì)被向左覆蓋掉,導(dǎo)致蛇后退,直接GAME OVER
  #b變量就是用于防止這種情況的發(fā)生
  b=True
  #范圍
  scope_x=(0,SCREEN_WIDTH//SIZE-1)
  scope_y=(2,SCREEN_HEIGHT//SIZE-1)
  #蛇
  snake=deque()
  #食物
  food_x=0
  food_y=0
  初始化蛇及食物:
  #初始化蛇
  def _init_snake():
  nonlocal snake
  snake.clear()
  snake.append((2,scope_y[0]))
  snake.append((1,scope_y[0]))
  snake.append((0,scope_y[0]))
  #食物
  def _create_food():
  nonlocal food_x,food_y
  food_x=random.randint(scope_x[0],scope_x[1])
  food_y=random.randint(scope_y[0],scope_y[1])
  while(food_x,food_y)in snake:
  #為了防止食物出到蛇身上
  food_x=random.randint(scope_x[0],scope_x[1])
  food_y=random.randint(scope_y[0],scope_y[1])
  _init_snake()
 _create_food()


  全部代碼:


  """
  貪吃蛇小游戲
  """
  import random
  import sys
  import time
  import pygame
  from pygame.locals import*
  from collections import deque
  SCREEN_WIDTH=600
  SCREEN_HEIGHT=480
  SIZE=20
  def print_text(screen,font,x,y,text,fcolor=(255,255,255)):
  imgText=font.render(text,True,fcolor)
  screen.blit(imgText,(x,y))
  def main():
  pygame.init()
  screen=pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
  pygame.display.set_caption('貪吃蛇')
  light=(100,100,100)#蛇的顏色
  dark=(200,200,200)#食物顏色
  font1=pygame.font.SysFont('SimHei',24)#得分的字體
  font2=pygame.font.Font(None,72)#GAME OVER的字體
  red=(200,30,30)#GAME OVER的字體顏色
  fwidth,fheight=font2.size('GAME OVER')
  line_width=1#網(wǎng)格線寬度
  black=(0,0,0)#網(wǎng)格線顏色
  bgcolor=(40,40,60)#背景色
  #方向,起始向右
  pos_x=1
  pos_y=0
  #如果蛇正在向右移動(dòng),那么快速點(diǎn)擊向下向左,由于程序刷新沒(méi)那么快,向下事件會(huì)被向左覆蓋掉,導(dǎo)致蛇后退,直接GAME OVER
  #b變量就是用于防止這種情況的發(fā)生
  b=True
  #范圍
  scope_x=(0,SCREEN_WIDTH//SIZE-1)
  scope_y=(2,SCREEN_HEIGHT//SIZE-1)
  #蛇
  snake=deque()
  #食物
  food_x=0
  food_y=0
  #初始化蛇
  def _init_snake():
  nonlocal snake
  snake.clear()
  snake.append((2,scope_y[0]))
  snake.append((1,scope_y[0]))
  snake.append((0,scope_y[0]))
  #食物
  def _create_food():
  nonlocal food_x,food_y
  food_x=random.randint(scope_x[0],scope_x[1])
  food_y=random.randint(scope_y[0],scope_y[1])
  while(food_x,food_y)in snake:
  #為了防止食物出到蛇身上
  food_x=random.randint(scope_x[0],scope_x[1])
  food_y=random.randint(scope_y[0],scope_y[1])
  _init_snake()
  _create_food()
  game_over=True
  start=False#是否開(kāi)始,當(dāng)start=True,game_over=True時(shí),才顯示GAME OVER
  score=0#得分
  orispeed=0.5#原始速度
  speed=orispeed
  last_move_time=None
  pause=False#暫停
  while True:
  for event in pygame.event.get():
  if event.type==QUIT:
  sys.exit()
  elif event.type==KEYDOWN:
  if event.key==K_RETURN:
  if game_over:
  start=True
  game_over=False
  b=True
  _init_snake()
  _create_food()
  pos_x=1
  pos_y=0
  #得分
  score=0
  last_move_time=time.time()
  elif event.key==K_SPACE:
  if not game_over:
  pause=not pause
  elif event.key in(K_w,K_UP):
  #這個(gè)判斷是為了防止蛇向上移時(shí)按了向下鍵,導(dǎo)致直接GAME OVER
  if b and not pos_y:
  pos_x=0
  pos_y=-1
  b=False
  elif event.key in(K_s,K_DOWN):
  if b and not pos_y:
  pos_x=0
  pos_y=1
  b=False
  elif event.key in(K_a,K_LEFT):
  if b and not pos_x:
  pos_x=-1
  pos_y=0
  b=False
  elif event.key in(K_d,K_RIGHT):
  if b and not pos_x:
  pos_x=1
  pos_y=0
  b=False
  #填充背景色
  screen.fill(bgcolor)
  #畫(huà)網(wǎng)格線豎線
  for x in range(SIZE,SCREEN_WIDTH,SIZE):
  pygame.draw.line(screen,black,(x,scope_y[0]*SIZE),(x,SCREEN_HEIGHT),line_width)
  #畫(huà)網(wǎng)格線橫線
  for y in range(scope_y[0]*SIZE,SCREEN_HEIGHT,SIZE):
  pygame.draw.line(screen,black,(0,y),(SCREEN_WIDTH,y),line_width)
  if game_over:
  if start:
  print_text(screen,font2,(SCREEN_WIDTH-fwidth)//2,(SCREEN_HEIGHT-fheight)//2,'GAME OVER',
  red)
  else:
  curTime=time.time()
  if curTime-last_move_time>speed:
  if not pause:
  b=True
  last_move_time=curTime
  next_s=(snake[0][0]+pos_x,snake[0][1]+pos_y)
  if next_s[0]==food_x and next_s[1]==food_y:
  #吃到了食物
  _create_food()
  snake.appendleft(next_s)
  score+=10
  speed=orispeed-0.03*(score//100)
  else:
  if scope_x[0]<=next_s[0]<=scope_x[1]and scope_y[0]<=next_s[1]<=scope_y[1]
  and next_s not in snake:
  snake.appendleft(next_s)
  snake.pop()
  else:
  game_over=True
  #畫(huà)食物
  if not game_over:
  #避免GAME OVER的時(shí)候把GAME OVER的字給遮住了
  pygame.draw.rect(screen,light,(food_x*SIZE,food_y*SIZE,SIZE,SIZE),0)
  #畫(huà)蛇
  for s in snake:
  pygame.draw.rect(screen,dark,(s[0]*SIZE+line_width,s[1]*SIZE+line_width,
  SIZE-line_width*2,SIZE-line_width*2),0)
  print_text(screen,font1,30,7,f'速度:{score//100}')
  print_text(screen,font1,450,7,f'得分:{score}')
  pygame.display.update()
  if __name__=='__main__':
  main()


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。

       

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/128828.html

相關(guān)文章

  • 60行Python代碼實(shí)現(xiàn)闖關(guān)升級(jí)貪吃,很少有人能到第十關(guān)(源碼和成品)

    摘要:由于年底發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于年。像語(yǔ)言一樣源代碼同樣遵循協(xié)議。官方宣布,年月日,停止的更新。被確定為最后一個(gè)版本。的設(shè)計(jì)具有很強(qiáng)的可讀性,相比其他語(yǔ)言經(jīng)常使用英文關(guān)鍵字,其他語(yǔ)言的一些標(biāo)點(diǎn)符號(hào),它具有比其他語(yǔ)言更有特色語(yǔ)法結(jié)構(gòu)。 ...

    cgh1999520 評(píng)論0 收藏0
  • 爆款游戲貪吃大作戰(zhàn)》 Python 實(shí)現(xiàn)

    摘要:感覺(jué)游戲?qū)徍诵抡?shí)施后,國(guó)內(nèi)手游市場(chǎng)略冷清,是不是各家的新游戲都在排隊(duì)等審核。不過(guò)現(xiàn)在微信已經(jīng)悍然屏蔽了它的分享這個(gè)游戲就是現(xiàn)在免費(fèi)榜排名第一的貪吃蛇大作戰(zhàn)。不過(guò)這實(shí)在是一個(gè)挺好實(shí)現(xiàn)的游戲,于是一時(shí)技癢,拿做了一個(gè)實(shí)現(xiàn)。 感覺(jué)游戲?qū)徍诵抡?shí)施后,國(guó)內(nèi)手游市場(chǎng)略冷清,是不是各家的新游戲都在排隊(duì)等審核。媒體們除了之前競(jìng)相追捧《Pokemon Go》熱鬧了一把,似乎也聽(tīng)不到什么聲音了。直到最...

    chaos_G 評(píng)論0 收藏0
  • 一步步教你怎么用python寫(xiě)貪吃游戲

    摘要:目錄引言環(huán)境需求分析代碼實(shí)現(xiàn)后記引言前幾天,星球有人提到貪吃蛇,一下子就勾起了我的興趣,畢竟在那個(gè)稱霸的年代,這款游戲可是經(jīng)典中的經(jīng)典啊而用蛇玩貪吃蛇,那再合適不過(guò)了 目錄0 引言1 環(huán)境2 需求分析3 代碼實(shí)現(xiàn)4 后記 0 引言 前幾天,星球有人提到貪吃蛇,一下子就勾起了我的興趣,畢竟在那個(gè)Nokia稱霸的年代,這款游戲可是經(jīng)典中的經(jīng)典?。《肞ython(蛇)玩Snake(貪吃蛇)...

    spademan 評(píng)論0 收藏0
  • 使用TypeScript和Canvas編寫(xiě)移動(dòng)端貪吃大作戰(zhàn)游戲

    摘要:基本介紹一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。主要的游戲邏輯有貪吃蛇移動(dòng)碰撞檢測(cè)貪吃蛇碰撞碰撞墻壁和吃食物。貪吃蛇的身體如何跟隨頭部移動(dòng)需要分為兩種情況,在單位時(shí)間內(nèi)貪吃蛇移動(dòng)一單位長(zhǎng)度和貪吃蛇移動(dòng)多單位長(zhǎng)度。 基本介紹 一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。(只支持移動(dòng)端) 這是一個(gè)臨近 deadline 的課設(shè)項(xiàng)目,為了方便地使用TS,我直接使用angular-cli生成了TypeScript的項(xiàng)...

    AlphaWallet 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<