欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)吃蘋果小游戲

 更新時間:2020年03月21日 15:55:07   作者:心心強  
這篇文章主要為大家詳細介紹了python實現(xiàn)吃蘋果小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了python實現(xiàn)吃蘋果小游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.公共類模塊

import pygame
from pygame.rect import Rect
 
 
def print_text(font, x, y, text, color=(255, 255, 255)):
 imgText=font.render(text, True, color)
 screen=pygame.display.get_surface()
 screen.blit(imgText,(x, y))
 
class MySprite(pygame.sprite.Sprite):
 def __init__(self):
  pygame.sprite.Sprite.__init__(self)
  self.master_image=None
  self.frame = 0
  self.old_frame = -1
  self.frame_width = 1
  self.frame_height = 1
  self.first_frame = 0
  self.last_frame = 0
  self.columns = 0
  self.last_time = 1
  self.direction = 0
  self.velocity = 0
 
 def _getx(self): return self.rect.x
 def _gety(self): return self.rect.y
 
 def _setx(self, value): self.rect.x = value
 def _sety(self, value): self.rect.y = value
 """
 描述
 property() 函數(shù)的作用是在新式類中返回屬性值。
 
 語法
 以下是 property() 方法的語法:
 
 class property([fget[, fset[, fdel[, doc]]]])
 參數(shù)
 fget -- 獲取屬性值的函數(shù)
 fset -- 設(shè)置屬性值的函數(shù)
 fdel -- 刪除屬性值函數(shù)
 doc -- 屬性描述信息
 返回值
 返回新式類屬性。
 """
 X = property(_getx, _setx)
 Y = property(_gety, _sety)
 
 #位置屬性
 def _getpos(self): return self.rect.topleft
 def _setpos(self, pos): self.rect.topleft = pos
 position = property(_getpos, _setpos)
 
 def load(self, filename, width, height, columns):
  self.master_image=pygame.image.load(filename).convert_alpha()
  self.frame_height = height
  self.frame_width = width
  self.rect = Rect(0, 0, width, height)
  self.columns = columns
 
  rect = self.master_image.get_rect()
  self.last_frame = (rect.width//width)*(rect.height//height) - 1
 
 def update(self, current_time, rate=30):
  #跟新動畫幀
  if current_time > self.last_time + rate:
   self.frame += 1
   if self.frame > self.last_frame:
    self.frame = self.first_frame
   self.last_time = current_time
  #僅當更改時才創(chuàng)建幀
  if self.frame != self.old_frame:
   frame_x = (self.frame % self.columns) * self.frame_width
   frame_y = (self.frame // self.columns) * self.frame_height
   rect=Rect(frame_x, frame_y, self.frame_width, self.frame_height)
   self.image = self.master_image.subsurface(rect)
   self.old_frame = self.frame
class Point(object):
 def __init__(self, x, y):
  self.x = x
  self.y = y
 def getx(self): return self.x
 def gety(self): return self.y
 def setx(self,value): self.x=value
 def sety(self,value): self.y=value
 
 x=property(getx,setx)
 y=property(gety,sety)
 
 def __str__(self):
  return 'x:'+"{:.0f}".format(self.x) + 'y:'+"{:.0f}".format(self.y)

2.首先生成隨機蘋果,然后監(jiān)聽鍵盤移動,播放動畫。精靈和蘋果碰撞檢測,檢測是吃掉蘋果

import pygame
from pygame.rect import Rect
 
from . import MyLibrary
import random
import sys
 
 
def calc_velocity(direction, vel=1.0):
 velocity = MyLibrary.Point(0, 0)
 if direction == 0:#上
  velocity.y = -vel
 elif direction == 2:#右
  velocity.x = vel
 elif direction == 4:#下
  velocity.y == vel
 elif direction == 6:#左
  velocity.x == -vel
 return velocity
 
pygame.init()
screen = pygame.display.set_mode(800,600)
font=pygame.font.Font(None, 36)
timer=pygame.time.Clock()
 
#創(chuàng)建精靈組
player_group=pygame.sprite.Group()
food_group=pygame.sprite.Group()
 
#初始化玩家精靈組
player=MyLibrary.MySprite()
player.load('farmer.png',96,96,8)############-----------------圖片
player.position=80, 80
player.direction= 4
player_group.add(player)
 
#初始化food精靈組
for n in range(1, 50):
 food= MyLibrary.MySprite()
 food.load('food.png',35,35,1) #################-----------食物圖片
 food.position=random.randint(0, 780), random.randint(0, 580)
 food_group.add(food)
 
game_over= False
player_moving = False
plyer_health = False
 
while True:
 timer.tick(30)
 ticks = pygame.time.get_ticks()
 
 for event in pygame.event.get():
  if event.type == pygame.QUIT:
   pygame.quit()
   sys.exit()
 keys = pygame.key.get_pressed()
 if keys[pygame.key.K_UP]:
  player.direction=0
  player_moving = True
 elif keys[pygame.key.k_DOWN]:
  player_moving = True
  player.direction=4
 elif keys[pygame.key.K_RIGHT]:
  player.direction = 2
  player_moving = True
 elif keys[pygame.key.K_LEFT]:
  player.direction = 6
  player_moving = True
 else:
  player_moving = False
 
 if not game_over:
  # 根據(jù)不同的方向,角色移動不同的動畫幀
  player.first_frame = player.direction*player.columns
  player.last_time = player.first_frame + player.columns -1
  if player.frame < player.first_frame:
   player.frame = player.first_frame
 
  if not player_moving:
   #停止更新動畫幀
   player.frame = player.first_frame=player.last_frame
  else:
   player.velocity = calc_velocity(player.direction,1.5)
   player.velocity.x*=1.5
   player.velocity.y*=1.5
 
  #跟新玩家精靈組
  player_group.update(ticks,50)
 
  #移動玩家
  if player_moving:
   player.X += player.velocity.x
   player.Y += player.velocity.y
   if player.X < 0: player.X = 0
   elif player.X >700: player.X =700
   if player.Y < 0: player.Y = 0
   elif player.Y >500:player.Y =500
 
  #檢測玩家是否與食物沖突,是否吃到蘋果
  attacker = None
  attacker = pygame.sprite.spritecollideany(player,food_group)
  if attacker != None:
   if pygame.sprite.collide_circle_ratio(0.65)(player,food_group):
    plyer_health += 2
    food_group.remove(attacker)
  if plyer_health > 100:
   plyer_health=100
   #跟新食物精靈組
   food_group.update(ticks, 50)
   if food_group.__len__() == 0:
    game_over = True
 
  screen.fill((50,50,100))
  food_group.draw(screen)
  player_group.draw(screen)
 
  pygame.draw.rect(screen,(510,150,50,180),Rect(300,570,plyer_health*2,25))
  pygame.draw.rect(screen, (100, 200, 100, 180), Rect(300, 570, 200, 2))
 
  if game_over:
   MyLibrary.print_text(font, 300, 100,'Game Over!')
  pygame.display.update()

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python機器視覺之基于OpenCV的手勢檢測

    Python機器視覺之基于OpenCV的手勢檢測

    這篇文章主要為大家介紹了一個機器視覺項目:基于OpenCV的手勢檢測,文中的示例代碼講解詳細,對我們學習Python和OpenCV有一定的幫助,感興趣的可以跟隨小編學習一下
    2021-12-12
  • python利用requests庫模擬post請求時json的使用教程

    python利用requests庫模擬post請求時json的使用教程

    這篇文章主要介紹了python利用requests庫模擬post請求時json的使用 ,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • Jupyter notebook 遠程配置及SSL加密教程

    Jupyter notebook 遠程配置及SSL加密教程

    這篇文章主要介紹了Jupyter notebook 遠程配置及SSL加密教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python如何實現(xiàn)二叉搜索樹算法

    python如何實現(xiàn)二叉搜索樹算法

    二叉搜索樹(BST)是一種數(shù)據(jù)結(jié)構(gòu),用于動態(tài)集合操作如搜索、插入、刪除等,每個節(jié)點的左子樹包含小于節(jié)點值的所有項,右子樹包含大于節(jié)點值的所有項,通過中序遍歷可得升序序列,插入、搜索和刪除都從根節(jié)點開始,根據(jù)值的大小移動到左或右子樹
    2024-10-10
  • python列表生成器迭代器實例解析

    python列表生成器迭代器實例解析

    這篇文章主要介紹了python列表生成器迭代器實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Tensorflow 定義變量,函數(shù),數(shù)值計算等名字的更新方式

    Tensorflow 定義變量,函數(shù),數(shù)值計算等名字的更新方式

    今天小編就為大家分享一篇Tensorflow 定義變量,函數(shù),數(shù)值計算等名字的更新方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django如何在不停機的情況下創(chuàng)建索引

    Django如何在不停機的情況下創(chuàng)建索引

    在本篇內(nèi)容里小編給大家整理的是關(guān)于Django如何在不停機的情況下創(chuàng)建索引的相關(guān)文章,有興趣的朋友們參考學習下。
    2020-08-08
  • Python GUI布局尺寸適配方法

    Python GUI布局尺寸適配方法

    今天小編就為大家分享一篇Python GUI布局尺寸適配方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • OpenCV利用python來實現(xiàn)圖像的直方圖均衡化

    OpenCV利用python來實現(xiàn)圖像的直方圖均衡化

    這篇文章主要介紹了OpenCV利用python來實現(xiàn)圖像的直方圖均衡化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • pytorch無法使用GPU問題的解決方法

    pytorch無法使用GPU問題的解決方法

    這篇文章主要介紹了如何解決pytorch 無法使用GPU 的問題,文中通過代碼和圖文給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02

最新評論