python实现吃苹果小游戏

本文实例为大家分享了python实现吃苹果小游戏的具体代码,供大家参考,具体内容如下

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() 函数的作用是在新式类中返回属性值。

  语法
  以下是 property() 方法的语法:

  class property([fget[, fset[, fdel[, doc]]]])
  参数
  fget -- 获取属性值的函数
  fset -- 设置属性值的函数
  fdel -- 删除属性值函数
  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
    #仅当更改时才创建帧
    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.首先生成随机苹果,然后监听键盘移动,播放动画。精灵和苹果碰撞检测,检测是吃掉苹果

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()

#创建精灵组
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:
    # 根据不同的方向,角色移动不同的动画帧
    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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python贪吃蛇游戏编写代码

    最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法. 由于Python监听键盘很麻烦,没有C语言的kbhit(),所以这条贪吃蛇不会自己动,运行效果如下: 要求:用#表示边框,用*表示食物,o表示蛇的身体,O表示蛇头,使用wsad来移动 Python版本:3.6.1 系统环境:Win10 类: board:棋盘,也就是游戏区域 snake:贪吃蛇,通过记录身体每个点来记录蛇的状态 game:游戏类 本来还想要个foo

  • python贪吃蛇游戏代码

    本文实例为大家分享了python贪吃蛇游戏的具体代码,供大家参考,具体内容如下 贪吃蛇游戏截图: 首先安装pygame,可以使用pip安装pygame: pip install pygame 运行以下代码即可: #!/usr/bin/env python import pygame,sys,time,random from pygame.locals import * # 定义颜色变量 redColour = pygame.Color(255,0,0) blackColour = pygame.

  • 使用Python第三方库pygame写个贪吃蛇小游戏

    今天看到几个关于pygame模块的博客和视频,感觉非常有趣,这里照猫画虎写了一个贪吃蛇小游戏,目前还有待完善,但是基本游戏功能已经实现,下面是代码: # 导入模块 import pygame import random # 初始化 pygame.init() w = 720 #窗口宽度 h = 600 #窗口高度 ROW = 30 #行数 COL = 36 #列数 #将所有的坐标看作是一个个点,定义点类 class Point: row = 0 col = 0 def __init__(self

  • python 使用pygame工具包实现贪吃蛇游戏(多彩版)

    今天我们用python和python的工具包pygame来编写一个贪吃蛇的小游戏 贪吃蛇游戏功能介绍 贪吃蛇的游戏规则如下: 通过上下左右键或者WASD键来移动蛇来,让它吃到食物,每吃到食物,蛇的长度变长,并获得分数.若蛇碰到游戏边际 或者自身,则蛇死亡,游戏结束. 游戏设计思路 根据游戏规则,我们需要: 1.初始化游戏环境. 2.初始化蛇.食物 3.监听键盘动作 4.蛇的运动,吃食物,是否死亡 5.该局游戏结束,是否还有再玩. 其中的难点在于如何在屏幕上展示蛇的运动,其实我们肉眼所见的蛇的运动

  • python实现贪吃蛇小游戏

    关于编写游戏,是博主非常向往的东西(博主喜爱游戏),编写游戏得一步一步的走!今天我简单的编写一下非常经典的游戏贪吃蛇!!!! 效果图: 首先引入pygame模块 pip install pygame 关于编写贪吃蛇有如下几个步骤!依次思考 1.设置背景大小,即游戏框大小,---像素(px) 2.设置颜色,蛇的颜色,背景颜色,豆子的颜色 #pygame游戏库,sys操控python运行的环境 import pygame,sys,random #这个模块包含所有pygame所使用的常亮 from p

  • python实现贪吃蛇游戏源码

    本文实例为大家分享了python实现贪吃蛇的具体代码,供大家参考,具体内容如下 import pygame import sys import random SCREEN_X=600 SCREEN_Y=600 class Snake(object): def __init__(self): self.direction=pygame.K_RIGHT self.body = [] for i in range(5): self.addnode() def addnode(self): left,

  • 教你一步步利用python实现贪吃蛇游戏

    0 引言 前几天,星球有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),那再合适不过了

  • Python写的贪吃蛇游戏例子

    第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制"暂停/开始"* 方向键控制贪吃蛇的方向 源代码如下: 复制代码 代码如下: from Tkinter import *import tkMessageBox,sysfrom random import randint class Grid(object):    def __init__(self,master=None,window_width=800,window_height=600,grid_

  • python实现贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 本文稍作改动,修复一些bug,原文链接:python实现贪吃蛇游戏 #!/usr/bin/env python #__*__ coding: utf-8 __*__ import pygame,sys,time,random from pygame.locals import * redColour = pygame.Color(255,0,0) blackColour = pygame.Color(0,0,0)

  • 使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到最初体型 4.变色食物:吃了会根据食物颜色改变蛇的颜色 #coding=UTF-8 from Tkinter import * from random import randint import tkMessageBox class Grid(object): def __init__(self,

随机推荐