python实现超级马里奥


Posted in Python onMarch 18, 2020

本文实例为大家分享了Python写超级马里奥的具体代码,供大家参考,具体内容如下

完整代码和素材戳我

主代码

import pygame as pg
from source.main import main

if __name__=='__main__':
  main()
  pg.quit()

main

__author__ = 'marble_xu'

import pygame as pg
from . import setup, tools
from . import constants as c
from .states import main_menu, load_screen, level

def main():
  game = tools.Control()
  state_dict = {c.MAIN_MENU: main_menu.Menu(),
         c.LOAD_SCREEN: load_screen.LoadScreen(),
         c.LEVEL: level.Level(),
         c.GAME_OVER: load_screen.GameOver(),
         c.TIME_OUT: load_screen.TimeOut()}
  game.setup_states(state_dict, c.MAIN_MENU)
  game.main()

setup

__author__ = 'marble_xu'

import os
import pygame as pg
from . import constants as c
from . import tools

pg.init()
pg.event.set_allowed([pg.KEYDOWN, pg.KEYUP, pg.QUIT])
pg.display.set_caption(c.ORIGINAL_CAPTION)
SCREEN = pg.display.set_mode(c.SCREEN_SIZE)
SCREEN_RECT = SCREEN.get_rect()

GFX = tools.load_all_gfx(os.path.join("resources","graphics"))

tools

__author__ = 'marble_xu'

import os
import pygame as pg
from abc import ABC, abstractmethod

keybinding = {
  'action':pg.K_s,
  'jump':pg.K_a,
  'left':pg.K_LEFT,
  'right':pg.K_RIGHT,
  'down':pg.K_DOWN
}

class State():
  def __init__(self):
    self.start_time = 0.0
    self.current_time = 0.0
    self.done = False
    self.next = None
    self.persist = {}
  
  @abstractmethod
  def startup(self, current_time, persist):
    '''abstract method'''

  def cleanup(self):
    self.done = False
    return self.persist
  
  @abstractmethod
  def update(sefl, surface, keys, current_time):
    '''abstract method'''

class Control():
  def __init__(self):
    self.screen = pg.display.get_surface()
    self.done = False
    self.clock = pg.time.Clock()
    self.fps = 60
    self.current_time = 0.0
    self.keys = pg.key.get_pressed()
    self.state_dict = {}
    self.state_name = None
    self.state = None
  
  def setup_states(self, state_dict, start_state):
    self.state_dict = state_dict
    self.state_name = start_state
    self.state = self.state_dict[self.state_name]
  
  def update(self):
    self.current_time = pg.time.get_ticks()
    if self.state.done:
      self.flip_state()
    self.state.update(self.screen, self.keys, self.current_time)
  
  def flip_state(self):
    previous, self.state_name = self.state_name, self.state.next
    persist = self.state.cleanup()
    self.state = self.state_dict[self.state_name]
    self.state.startup(self.current_time, persist)

  def event_loop(self):
    for event in pg.event.get():
      if event.type == pg.QUIT:
        self.done = True
      elif event.type == pg.KEYDOWN:
        self.keys = pg.key.get_pressed()
      elif event.type == pg.KEYUP:
        self.keys = pg.key.get_pressed()
  
  def main(self):
    while not self.done:
      self.event_loop()
      self.update()
      pg.display.update()
      self.clock.tick(self.fps)

def get_image(sheet, x, y, width, height, colorkey, scale):
    image = pg.Surface([width, height])
    rect = image.get_rect()

    image.blit(sheet, (0, 0), (x, y, width, height))
    image.set_colorkey(colorkey)
    image = pg.transform.scale(image,
                  (int(rect.width*scale),
                  int(rect.height*scale)))
    return image

def load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', '.jpg', '.bmp', '.gif')):
  graphics = {}
  for pic in os.listdir(directory):
    name, ext = os.path.splitext(pic)
    if ext.lower() in accept:
      img = pg.image.load(os.path.join(directory, pic))
      if img.get_alpha():
        img = img.convert_alpha()
      else:
        img = img.convert()
        img.set_colorkey(colorkey)
      graphics[name] = img
  return graphics

运行成果

python实现超级马里奥

python实现超级马里奥

python实现超级马里奥

好了,被忘了在GitHub里面点star喔。

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

Python 相关文章推荐
python中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
python自定义类并使用的方法
May 07 Python
python利用datetime模块计算时间差
Aug 04 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
浅谈python中requests模块导入的问题
May 18 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
Python异常处理例题整理
Jul 07 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 #Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
Mar 17 #Python
Python Selenium安装及环境配置的实现
Mar 17 #Python
详解python环境安装selenium和手动下载安装selenium的方法
Mar 17 #Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 #Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 #Python
利用python在excel中画图的实现方法
Mar 17 #Python
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript加号"+"的二义性说明
2013/03/04 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python open()文件处理使用介绍
2014/11/30 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
django ajax json的实例代码
2018/05/29 Python
python+flask实现API的方法
2018/11/21 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
企业申诉管理制度
2014/01/30 职场文书
诚信贷款承诺书
2014/05/30 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
导游词之青城山景区
2019/09/27 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers