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设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
使用Python的toolz库开始函数式编程的方法
Nov 15 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
Java多线程实现四种方式原理详解
Jun 02 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python绘制组合图的示例
Sep 18 Python
Python基础之Socket通信原理
Apr 22 Python
python实现图片九宫格分割的示例
Apr 25 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支持页面回退的两种方法[转]
2007/02/14 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python自定义类并使用的方法
2015/05/07 Python
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
Python用for循环实现九九乘法表
2018/05/31 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
详解python破解zip文件密码的方法
2020/01/13 Python
Python如何输出警告信息
2020/07/30 Python
基于Python实现天天酷跑功能
2021/01/06 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
文案策划求职信
2014/04/14 职场文书
学校食品安全实施方案
2014/06/14 职场文书
继承公证书格式
2015/01/26 职场文书
写给老师的保证书
2015/05/09 职场文书
追悼会悼词大全
2015/06/23 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
浅析python中特殊文件和特殊函数
2022/02/24 Python