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怎么学好python?
Oct 07 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python脚本处理空格的方法
Aug 08 Python
Python用threading实现多线程详解
Feb 03 Python
python使用代理ip访问网站的实例
May 07 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Python搭建Spark分布式集群环境
Jul 05 Python
python3实现mysql导出excel的方法
Jul 31 Python
python打印异常信息的两种实现方式
Dec 24 Python
通过Turtle库在Python中绘制一个鼠年福鼠
Feb 03 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Python把图片转化为pdf代码实例
Jul 28 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
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php+ajax 文件上传代码实例
2019/03/18 PHP
jquery 列表双向选择器之改进版
2013/08/09 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python列表对象实现原理详解
2019/07/01 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
高中生学习的自我评价
2013/12/14 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
三问三解心得体会
2014/09/05 职场文书
收款委托书范本
2014/09/11 职场文书
继承权公证书范本
2015/01/23 职场文书
幼儿园个人总结
2015/02/28 职场文书
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python