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处理文本文件中控制字符的方法
Feb 07 Python
python抓取网页中链接的静态图片
Jan 29 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
Python中logging实例讲解
Jan 17 Python
python numpy实现文件存取的示例代码
May 26 Python
python实现对象列表根据某个属性排序的方法详解
Jun 11 Python
Pyqt5实现英文学习词典
Jun 24 Python
Python创建数字列表的示例
Nov 28 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python configparser模块操作代码实例
Jun 08 Python
为什么python比较流行
Jun 19 Python
python3代码输出嵌套式对象实例详解
Dec 03 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中获取主机名、协议及IP地址的方法
2014/11/18 PHP
由php中字符offset特征造成的绕过漏洞详解
2017/07/07 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python面向对象封装操作案例详解
2019/12/31 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
工作会议主持词
2014/03/17 职场文书
梅花魂教学反思
2014/04/25 职场文书
学期个人工作总结
2015/02/13 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
自荐信大全
2019/03/21 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
Go语言 详解net的tcp服务
2022/04/14 Golang