程序代码

import pygame,os,wx
from random import randint
from sys import exit
from pygame.locals import *
pygame.init()def main():#获取屏幕大小app=wx.App()WHFRAMES=wx.DisplaySize()WIDTH=int(WHFRAMES[0]*0.7)HEIGHT=int(WHFRAMES[1]*0.8)Timers = 0 #游戏定时器TimersSec = 0 #秒tim_psd = 0#获取屏幕大小screen=pygame.display.set_mode((WIDTH,HEIGHT),0,32)caption=pygame.display.set_caption("超级马里奥")screen.fill([255,255,255])mariofont = pygame.font.Font('fonts/poster.ttf',22)mario_name = mariofont.render("MARIO",True,(84,65,190),None)#Game_world = mariofont.render("WORLD",True,(84,65,190),None)Game_moneyX = mariofont.render("X",True,(255,255,128),None)Game_time = mariofont.render("TIME",True,(84,65,190),None)money_ic5 = pygame.image.load('images/PTModelSprite_ID21675.png')money_ic5 = pygame.transform.scale(money_ic5, (25, 25))money_ic6 = pygame.image.load('images/PTModelSprite_ID21676.png')money_ic6 = pygame.transform.scale(money_ic6, (10, 25))money_ic7 = pygame.image.load('images/PTModelSprite_ID21677.png')money_ic7 = pygame.transform.scale(money_ic7, (25, 25))money_ic8 = pygame.image.load('images/PTModelSprite_ID21678.png')money_ic8 = pygame.transform.scale(money_ic8, (25, 25))money_timers = 0 #图片轮播定时器Game_world = pygame.image.load('images/PTModelSprite_ID2478.png')background = pygame.image.load('images/PTModelSprite_ID35342.png').convert_alpha()background = pygame.transform.scale(background, (WIDTH, HEIGHT))Roads = pygame.image.load('images/PTModelSprite_ID3790.png').convert_alpha()Roads2 = pygame.image.load('images/PTModelSprite_ID4224.png').convert_alpha()hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()x,y = 15,HEIGHT-200inp_flag = -2    #(stop:-1 left drection ,-2 right drection) ,(walk:1 right drection ,2 left drection)times,times2 = 0,0  #人物动作定时器move_values,jump_values,jump_values2,jump_values3 = 12,0,0,0  #一步移动的距离 和 跳跃的值1,2jump_adder,jump_max_point = 0,50 #跳跃累加器  用来累加按键的长短  然后判断跳跃的高度,跳跃的初始值最高点 jump_flag = 0bg_w_1,bg_w_2 = 0,WIDTH-2 #两张壁纸 一前一后循环拖动的变量#播放背景#播放背景#游戏信息数据定义score = 0money = 0world = 11time = 400Gdata = [score,money,world,time]#游戏信息数据定义#初始化函数def game_initializaion(score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,move_values,jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,bg_w_2,tim_psd):#数据初始化#游戏初始化数据inp_flag = -2   #(stop:-1 left drection ,-2 right drection) ,(walk:1 right drection ,2 left drection)x,y = 15,HEIGHT-200 #马里奥坐标times,times2 = 0,0  #人物动作定时器move_values,jump_values,jump_values2,jump_values3 = 12,0,0,0  #一步移动的距离 和 跳跃的值1,2jump_adder,jump_max_point = 0,50 #跳跃累加器  用来累加按键的长短  然后判断跳跃的高度,跳跃的初始值最高点jump_flag = 0tim_psd = 0bg_w_1,bg_w_2 = 0,WIDTH-2 #两张壁纸 一前一后循环拖动的变量Timers = 0  #游戏定时器score = 0  #开始分数money = 0     #开始金钱world = 11    #世界关卡第一关1-1 = 11time = 400    #游戏总时间TimersSec = 0 #游戏里的秒Gdata = [score,money,world,time]#游戏初始化数据return score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,move_values,jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,bg_w_2,tim_psd#初始化函数score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,move_values,jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,bg_w_2,tim_psd = \game_initializaion(score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,move_values,jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,bg_w_2,tim_psd)#数据初始化主调函数clock = pygame.time.Clock()pygame.key.set_repeat(55)pygame.display.flip()def WalkAction(times,times2,inp_flag,hero):#walk actionif y < HEIGHT -200: #如果在空中 为跳跃图片if inp_flag == 1: #righthero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()if inp_flag == 2: #lefthero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)else:if inp_flag == 1: #righttimes += 2if times < 20:hero = pygame.image.load('images/PTModelSprite_ID34256.png').convert_alpha()elif times < 20:hero = pygame.image.load('images/PTModelSprite_ID34257..png').convert_alpha()elif times < 40:hero = pygame.image.load('images/PTModelSprite_ID34258.png').convert_alpha()  elif times < 60:hero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()elif times < 80:hero = pygame.image.load('images/PTModelSprite_ID34260.png').convert_alpha()elif times < 100:hero = pygame.image.load('images/PTModelSprite_ID34261.png').convert_alpha() elif times < 120:hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()elif times < 140:times = 0if inp_flag == 2: #left times2 += 2if times2 < 20:hero = pygame.image.load('images/PTModelSprite_ID34256.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)elif times2 < 20:hero = pygame.image.load('images/PTModelSprite_ID34257..png').convert_alpha()hero = pygame.transform.flip(hero, True, False)elif times2 < 40:hero = pygame.image.load('images/PTModelSprite_ID34258.png').convert_alpha()    hero = pygame.transform.flip(hero, True, False)elif times2 < 60:hero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)elif times2 < 80:hero = pygame.image.load('images/PTModelSprite_ID34260.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)elif times2 < 100:hero = pygame.image.load('images/PTModelSprite_ID34261.png').convert_alpha()  hero = pygame.transform.flip(hero, True, False)elif times2 < 120:hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)elif times2 < 140:times2 = 0elif inp_flag == -1:hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()hero = pygame.transform.flip(hero, True, False)   times2 = 0elif inp_flag == -2:hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()times2 = 0return times,times2,inp_flag,herodef HeroHeightIs(): #判断角色是否为地面y轴if y >= HEIGHT-200:return Falseelse:    #这是在控制的状况return True def Reset_max_point(jump_max_point):   #在地面重设默认跳跃的最高点(还原)if y >= (HEIGHT-200):jump_max_point = 50 #默认最高点是 50 return jump_max_pointdef jump_leftScreenBgnotMove(x): if x<(WIDTH/4):if jump_max_point == 50 :if inp_flag == 1:x+=(2.7)if inp_flag == 2:x-=(2.7)elif jump_max_point == 100 :if inp_flag == 1:x+=(0.27)if inp_flag == 2:x-=(0.27)return xdef Screen_MoneyIc(screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers) : #绘制第二项 金钱图标money_timers += 1if money_timers < 15 :screen.blit(money_ic5,(WIDTH*0.24,25)) #绘制第二项 金钱图标1elif money_timers < 40 :screen.blit(money_ic6,(WIDTH*0.24+7.5,25)) #绘制第二项 金钱图标2elif money_timers < 55 :screen.blit(money_ic7,(WIDTH*0.24,25)) #绘制第二项 金钱图标3elif money_timers < 80 :screen.blit(money_ic8,(WIDTH*0.24,25)) #绘制第二项 金钱图标4else:money_timers = 0return screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timersdef  Game_Timers(TimersSec,Gdata,time_passed,tim_psd) : #游戏定时器tim_psd += time_passedif tim_psd >= 1000 : #为1秒的时候TimersSec += 1 tim_psd = 0Gdata[3] = 400 - TimersSec #游戏所剩时间return TimersSec,Gdata,time_passed,tim_psdwhile True: #事件检测  for event in pygame.event.get(): if event.type == pygame.QUIT: exit()if event.type == KEYDOWN:keys=pygame.key.get_pressed()if keys[pygame.K_a]:if event.key == K_w and inp_flag == 0:if y <= HEIGHT-200:  #看y坐标 必须在起点jump_flag = 3 #按了上 和 向前if y >= HEIGHT-200:#如果角色在平地才走动 后退 左#if bg_w_1==0:#x-=5x-=(move_values+3.5)inp_flag = 2if keys[pygame.K_d]:if event.key == K_w and inp_flag == 0:if y <= HEIGHT-200:  #看y坐标 必须在起点jump_flag = 2 #按了上 和 向前if y >= HEIGHT-200:#如果角色在平地才走动 前景 右if x<(WIDTH/4): #角色还在屏幕左边 可移动x+=(move_values+3.5)inp_flag = 1if keys[pygame.K_w]: #jumpjump_flag = 1 #仅仅是按了跳跃jump_adder += 1 #跳跃累加器if event.key == pygame.K_d and (jump_flag == 1):if y == HEIGHT-200:  #看y坐标 必须在起点jump_flag = 2 #按了上 和 向前if event.key == pygame.K_a and (jump_flag == 1):if y == HEIGHT-200:  #看y坐标 必须在起点jump_flag = 3 #按了上 和 向后if keys[pygame.K_p]: #重启score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,move_values,\jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,bg_w_2,tim_psd = \game_initializaion(score,money,world,time,Gdata,TimersSec,Timers,x,y,inp_flag,times,times2,\move_values,jump_values,jump_values2,jump_values3,jump_adder,jump_max_point,jump_flag,bg_w_1,\bg_w_2,tim_psd)if event.type == KEYUP:if keys[pygame.K_a]:inp_flag = -1if keys[pygame.K_d]:inp_flag = -2if keys[pygame.K_w]:if jump_adder < 4 : #如果松开按键没有达到jump_adder跳跃累加器的值 (那么就他们置零)jump_adder = 0##在地面时 重设默认跳跃的最高点(还原)jump_max_point = Reset_max_point(jump_max_point)#jump action 1if jump_flag == 1: #只有跳跃#让其他方式跳跃值为 0jump_values2 = 0jump_values3 = 0#------#持续按键跳跃的结构if jump_adder >=4 :jump_max_point = 100  #第二次跳跃最大值jump_adder = 0#------jump_values+=1.25if jump_values <= jump_max_point:y -= 5x = jump_leftScreenBgnotMove(x)if jump_max_point == 100:#跳跃的高度不同 y坐标的速度也要慢点y += 1.5x = jump_leftScreenBgnotMove(x)elif jump_values <= jump_max_point+8:passelif jump_values <=jump_max_point*2+8:if HeroHeightIs(): #如果角色在控制 就继续加y轴的值  1y += 5x = jump_leftScreenBgnotMove(x)if jump_max_point == 100:#跳跃的高度不同 y坐标的速度也要慢点y -= 1.5x = jump_leftScreenBgnotMove(x)else:y = HEIGHT-200jump_flag = 0jump_values = 0#wall detectionif x<=0:x=0if x+hero.get_width()>WIDTH:x=WIDTH-hero.get_width()#角色的动作 函数    times,times2,inp_flag,hero = WalkAction(times,times2,inp_flag,hero)#1 .bg move---blitscreen.blit(background,(bg_w_2,0))screen.blit(background,(bg_w_1,0))#绘制信息screen.blit(mario_name,(WIDTH*0.03,3))#绘制第一项 名字screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers = \Screen_MoneyIc(screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers) #绘制第二项 金钱图标screen.blit(Game_moneyX,(WIDTH*0.28,24))#绘制第二项 xscreen.blit(Game_world,(WIDTH*0.5-Game_world.get_width()/2,3))#绘制第三项 世界地图screen.blit(Game_time,(WIDTH*0.84,3))#绘制第四项 游戏时间for DATAi in range(4):Game_data = mariofont.render("%s"% Gdata[DATAi],True,(255,255,128),None) #综合绘制: 分数 金币 关卡 游戏时间if DATAi != 2:screen.blit(Game_data,(WIDTH*(0.03+DATAi*0.27),24))elif DATAi == 2:Game_data = mariofont.render("%s-%s"% (Gdata[DATAi]/10,Gdata[DATAi]%10),True,(255,255,128),None) #综合绘制: 分数 金币 关卡 游戏时间screen.blit(Game_data,(WIDTH*0.5-Game_data.get_width()/2,15))#绘制信息#2 .bg move--panel#if inp_flag == 2: #往左走 壁纸向右拖动#  bg_w_1+=move_values/4#    bg_w_2+=move_values/4if inp_flag == 1 and x>=(WIDTH/4):#往右走 壁纸向左拖动bg_w_1-=(move_values/4-0.5)bg_w_2-=(move_values/4-0.5)if bg_w_1>=0:bg_w_1,bg_w_2 = 0,WIDTH-2if bg_w_1<-WIDTH:bg_w_1,bg_w_2 = 0,WIDTH-2screen.blit(hero,(x,y))pygame.time.delay(2) #毫秒time_passed = clock.tick()TimersSec,Gdata,time_passed,tim_psd = Game_Timers(TimersSec,Gdata,time_passed,tim_psd) #游戏定时pygame.display.update()if __name__ == '__main__':main()

python:点击就能玩的超级玛丽小游戏(附有源码)相关推荐

  1. 【Python游戏】用Python 和 Pyglet 编写一个我的世界小游戏 | 附源码

    相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复我的世界 Pytho ...

  2. 整理了30款Python小游戏附源码,五一有的玩了

    快到五一了,整理了 30 款 Python 小游戏源码分享给大家,具体内容可以点击下方视频号查看: 点击上方视频后,源码获取方式:①关注上方视频号.②点赞当前视频.③在当前视频评论区扣1 友情提示:获 ...

  3. 一口气用Python写了13个小游戏 (附源码)

    大家好,今天给大家分享13个游戏源码,可以自己复现玩玩,研究下里面的编程逻辑,对学习编程(特别是初学者)应该会有很大帮助. 由于文章较长,大家记得滑到文末点个赞哈- 1.吃金币 源码分享: impor ...

  4. 【Python游戏】Python基于pygame实现的人机大战的斗兽棋小游戏 | 附源码

    前言 有粉丝说要我出一期Python版本的斗兽棋,今天宠粉狂魔的我不就来啦!! 虽然是一个简单的小游戏,但是对于新手小伙伴来说还是有一定的小难度的哟!要是不理解都可以找到小编的哈!! 相关文件 关注小 ...

  5. 【Python游戏】基于化学方程式的基础上,用Python实现一个消灭泡泡小游戏 | 附源码

    前言 halo,包子们下午好 今天实现的这个小游戏呀,说实话化学不太好的小伙伴可能看起来会有点懵逼 不过不用担心,咱们今天不是来学化学的,我们是来学习Python的 所以呀,不要太担心啦,大家先好好看 ...

  6. Python开发指南[1]之程序员计时小时钟(附源码)

    Python开发指南[1]之程序员计时小时钟 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 Python作为一门编程语言,这门语言的魅力和影响力已经远超C#.C++等编程 ...

  7. 【Python游戏】基于pygame实现的一个Dino Rush 恐龙宝贝冲冲冲的小游戏 | 附源码

    前言 halo,包子们晚上好 很久没有更新啦,主要是小编这边最近有点小忙 今天给大家整一个Dino Rush 恐龙宝贝冲冲冲的小游戏 还是一个比较记经典的小游戏,还记这可谷歌浏览器上没有网也能打发时间 ...

  8. 30行代码使用Python制作熊猫表情包(图片字符化)(附有源码逐行分析)

    文章目录 一.Demo 二.程序演示加讲解 三.分析程序 四.注意事项 五.程序的改进 一.Demo 相信许多的小伙伴在平时玩QQ的时候都有发过这样一张表情包,如下: 它其实是由下面的一张表情包演化而 ...

  9. 分享Python开发的13个小游戏(附源码)

    导语 哈喽哈喽~铁汁萌!愉快的周末到了天气也变好了不知道大家有没有出去玩吖!小编这几天太累了周末就宅在家里啦

最新文章

  1. java jmi的基本思想_jmi: JMI 是 JNI 的 C++11/14封装,目的是为了简化JNI使用
  2. android 事件传递
  3. 详解华为交换机iStack特性
  4. Java Socket编程----通信是这样炼成的
  5. layou split 属性
  6. Php接收Vba post例子,vba发送窗口消息_postmessage
  7. SQL查询语句 group by后, 字符串合并
  8. 学python有前途吗-三十岁了,从零开始学python还有前途吗?
  9. java实现画笔的画圆与矩形功能_JAVA怎么画出一个任意大小的圆形和矩形
  10. android动画实现单摆效果
  11. 怎样查看sql服务器日志文件,怎么通过sql日志,查看以前执行过的sql语句
  12. 手写bpnn算法实现iris多分类
  13. Java实现随机验证码和验证码图片渲染功能
  14. 支付宝第三方支付接口java调用详细文档
  15. 根据流程图写python程序_根的解释|根的意思|汉典“根”字的基本解释
  16. github如何合并分支
  17. 手机qpython3 如何画图_记住这3个功能,一分钟掌握python sns作图
  18. Uniqlo与Fast Retailing发出警告 46万消费者账号遭入侵
  19. 在linux系统里面进行rar文件的解锁
  20. iphone开发(一)

热门文章

  1. 小数分频器实现--以8.7分频为例
  2. 云原生是企业数字化转型的通关密码的原因
  3. 百度推出的echarts,制表折线图柱状图饼图等的超级工具(转)
  4. 大数据之Mapreduce(加强)
  5. 微前端(qiankun)
  6. 将uniapp项目运行到微信开发者工具上
  7. 【GDOI2004】【可怜的绵羊】
  8. 傅氏级数的各项系数_傅里叶级数的系数是怎么得到的?
  9. 地磅称重微调的3种方法,解决称重不准的问题
  10. Python 算法之 求素数、质数