真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python實(shí)現(xiàn)超級瑪麗游戲-創(chuàng)新互聯(lián)

小編給大家分享一下python實(shí)現(xiàn)超級瑪麗游戲,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對營銷、技術(shù)、服務(wù)都有自己獨(dú)特見解,公司采取“創(chuàng)意+綜合+營銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時(shí),也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級,滿足企業(yè)一站式全網(wǎng)營銷推廣需求,讓再小的品牌網(wǎng)站建設(shè)也能產(chǎn)生價(jià)值!

我們優(yōu)先介紹超級瑪麗游戲中的多狀態(tài)跳躍,和行走地圖拖動的原理,然后實(shí)現(xiàn)。并實(shí)現(xiàn)倒計(jì)時(shí)和金幣動態(tài)效果

python實(shí)現(xiàn)超級瑪麗游戲

python實(shí)現(xiàn)超級瑪麗游戲

python實(shí)現(xiàn)超級瑪麗游戲

接下來用下面這四張圖,就可以完全懂得游戲中背景是怎么會移動的。

圖1

python實(shí)現(xiàn)超級瑪麗游戲

圖2

python實(shí)現(xiàn)超級瑪麗游戲

圖3

python實(shí)現(xiàn)超級瑪麗游戲

圖4

python實(shí)現(xiàn)超級瑪麗游戲

由于代碼是我前幾年學(xué)習(xí)python的時(shí)候做的,代碼寫的很擠都整到一個(gè)源文件中,大家看的時(shí)候仔細(xì)。

然后上源代碼:

#!/usr/bin/env python 
# -*- coding:utf-8 -*- 
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 #游戲定時(shí)器
 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 #圖片輪播定時(shí)器
 
 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-200
 inp_flag = -2 #(stop:-1 left drection ,-2 right drection) ,(walk:1 right drection ,2 left drection)
 times,times2 = 0,0 #人物動作定時(shí)器
 move_values,jump_values,jump_values2,jump_values3 = 12,0,0,0 #一步移動的距離 和 跳躍的值1,2
 jump_adder,jump_max_point = 0,50 #跳躍累加器 用來累加按鍵的長短 然后判斷跳躍的高度,跳躍的初始值最高點(diǎn) 
 jump_flag = 0
 bg_w_1,bg_w_2 = 0,WIDTH-2 #兩張壁紙 一前一后循環(huán)拖動的變量

 #播放背景
 
 #播放背景



 #游戲信息數(shù)據(jù)定義
 score = 0
 money = 0
 world = 11
 time = 400
 Gdata = [score,money,world,time]
 #游戲信息數(shù)據(jù)定義

 #初始化函數(shù)
 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):#數(shù)據(jù)初始化
 #游戲初始化數(shù)據(jù)
 inp_flag = -2 #(stop:-1 left drection ,-2 right drection) ,(walk:1 right drection ,2 left drection)
 x,y = 15,HEIGHT-200 #馬里奧坐標(biāo)
 times,times2 = 0,0 #人物動作定時(shí)器
 move_values,jump_values,jump_values2,jump_values3 = 12,0,0,0 #一步移動的距離 和 跳躍的值1,2
 jump_adder,jump_max_point = 0,50 #跳躍累加器 用來累加按鍵的長短 然后判斷跳躍的高度,跳躍的初始值最高點(diǎn)
 jump_flag = 0
 tim_psd = 0
 bg_w_1,bg_w_2 = 0,WIDTH-2 #兩張壁紙 一前一后循環(huán)拖動的變量
 Timers = 0 #游戲定時(shí)器
 score = 0 #開始分?jǐn)?shù)
 money = 0 #開始金錢
 world = 11 #世界關(guān)卡第一關(guān)1-1 = 11
 time = 400 #游戲總時(shí)間
 TimersSec = 0 #游戲里的秒
 Gdata = [score,money,world,time]
 #游戲初始化數(shù)據(jù)
 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
 #初始化函數(shù)

 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)#數(shù)據(jù)初始化主調(diào)函數(shù)

 clock = pygame.time.Clock()
 pygame.key.set_repeat(55)
 pygame.display.flip()

 def WalkAction(times,times2,inp_flag,hero):
 #walk action
 if y < HEIGHT -200: #如果在空中 為跳躍圖片
 if inp_flag == 1: #right
 hero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()
 if inp_flag == 2: #left
 hero = pygame.image.load('images/PTModelSprite_ID34259.png').convert_alpha()
 hero = pygame.transform.flip(hero, True, False)
 else:
 if inp_flag == 1: #right
 times += 2
 if 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 = 0
 if inp_flag == 2: #left 
 times2 += 2
 if 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 = 0
 elif inp_flag == -1:
 hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()
 hero = pygame.transform.flip(hero, True, False) 
 times2 = 0
 elif inp_flag == -2:
 hero = pygame.image.load('images/PTModelSprite_ID34297.png').convert_alpha()
 times2 = 0

 return times,times2,inp_flag,hero


 def HeroHeightIs(): #判斷角色是否為地面y軸
 if y >= HEIGHT-200:
 return False
 else: #這是在控制的狀況
 return True 


 def Reset_max_point(jump_max_point): #在地面重設(shè)默認(rèn)跳躍的最高點(diǎn)(還原)
 if y >= (HEIGHT-200):
 jump_max_point = 50 #默認(rèn)最高點(diǎn)是 50 
 return jump_max_point



 def 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 x

 def Screen_MoneyIc(screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers) : #繪制第二項(xiàng) 金錢圖標(biāo)

 money_timers += 1
 if money_timers < 15 :
 screen.blit(money_ic5,(WIDTH*0.24,25)) #繪制第二項(xiàng) 金錢圖標(biāo)1
 elif money_timers < 40 :
 screen.blit(money_ic6,(WIDTH*0.24+7.5,25)) #繪制第二項(xiàng) 金錢圖標(biāo)2
 elif money_timers < 55 :
 screen.blit(money_ic7,(WIDTH*0.24,25)) #繪制第二項(xiàng) 金錢圖標(biāo)3
 elif money_timers < 80 :
 screen.blit(money_ic8,(WIDTH*0.24,25)) #繪制第二項(xiàng) 金錢圖標(biāo)4
 else:
 money_timers = 0
 return screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers


 def Game_Timers(TimersSec,Gdata,time_passed,tim_psd) : #游戲定時(shí)器

 tim_psd += time_passed
 if tim_psd >= 1000 : #為1秒的時(shí)候
 TimersSec += 1 
 tim_psd = 0
 Gdata[3] = 400 - TimersSec #游戲所剩時(shí)間
 
 return TimersSec,Gdata,time_passed,tim_psd


 while 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坐標(biāo) 必須在起點(diǎn)
  jump_flag = 3 #按了上 和 向前
  if y >= HEIGHT-200:#如果角色在平地才走動 后退 左
  #if bg_w_1==0:
  #x-=5
  x-=(move_values+3.5)
  inp_flag = 2
  
 if keys[pygame.K_d]:
  if event.key == K_w and inp_flag == 0:
  if y <= HEIGHT-200: #看y坐標(biāo) 必須在起點(diǎn)
  jump_flag = 2 #按了上 和 向前
  if y >= HEIGHT-200:#如果角色在平地才走動 前景 右
  if x<(WIDTH/4): #角色還在屏幕左邊 可移動
  x+=(move_values+3.5)
  inp_flag = 1
  
 if keys[pygame.K_w]: #jump
  jump_flag = 1 #僅僅是按了跳躍
  jump_adder += 1 #跳躍累加器
  if event.key == pygame.K_d and (jump_flag == 1):
  if y == HEIGHT-200: #看y坐標(biāo) 必須在起點(diǎn)
  jump_flag = 2 #按了上 和 向前
  if event.key == pygame.K_a and (jump_flag == 1):
  if y == HEIGHT-200: #看y坐標(biāo) 必須在起點(diǎn)
  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 = -1
 if keys[pygame.K_d]:
  inp_flag = -2
 if keys[pygame.K_w]:
  if jump_adder < 4 : #如果松開按鍵沒有達(dá)到j(luò)ump_adder跳躍累加器的值 (那么就他們置零)
  jump_adder = 0

 ##在地面時(shí) 重設(shè)默認(rèn)跳躍的最高點(diǎn)(還原)
 jump_max_point = Reset_max_point(jump_max_point)

 #jump action 1
 if jump_flag == 1: #只有跳躍
 #讓其他方式跳躍值為 0
 jump_values2 = 0
 jump_values3 = 0
 #------
 #持續(xù)按鍵跳躍的結(jié)構(gòu)
 if jump_adder >=4 :
 jump_max_point = 100 #第二次跳躍大值
 jump_adder = 0
 #------
 jump_values+=1.25
 if jump_values <= jump_max_point:
 y -= 5

 x = jump_leftScreenBgnotMove(x)

 if jump_max_point == 100:#跳躍的高度不同 y坐標(biāo)的速度也要慢點(diǎn)
  y += 1.5
  x = jump_leftScreenBgnotMove(x)

 elif jump_values <= jump_max_point+8:
 pass
 elif jump_values <=jump_max_point*2+8:
 if HeroHeightIs(): #如果角色在控制 就繼續(xù)加y軸的值 1
  y += 5
  
  x = jump_leftScreenBgnotMove(x)

  if jump_max_point == 100:#跳躍的高度不同 y坐標(biāo)的速度也要慢點(diǎn)
  y -= 1.5
  x = jump_leftScreenBgnotMove(x)

 else:
 y = HEIGHT-200
 jump_flag = 0
 jump_values = 0

 
 #wall detection
 if x<=0:
 x=0
 if x+hero.get_width()>WIDTH:
 x=WIDTH-hero.get_width()
 

 #角色的動作 函數(shù) 
 times,times2,inp_flag,hero = WalkAction(times,times2,inp_flag,hero)

 #1 .bg move---blit
 screen.blit(background,(bg_w_2,0))
 screen.blit(background,(bg_w_1,0))

 #繪制信息
 
 screen.blit(mario_name,(WIDTH*0.03,3))#繪制第一項(xiàng) 名字

 screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers = \
 Screen_MoneyIc(screen,money_ic5,money_ic6,money_ic7,money_ic8,money_timers) #繪制第二項(xiàng) 金錢圖標(biāo)

 screen.blit(Game_moneyX,(WIDTH*0.28,24))#繪制第二項(xiàng) x
 screen.blit(Game_world,(WIDTH*0.5-Game_world.get_width()/2,3))#繪制第三項(xiàng) 世界地圖
 screen.blit(Game_time,(WIDTH*0.84,3))#繪制第四項(xiàng) 游戲時(shí)間

 for DATAi in range(4):
 Game_data = mariofont.render("%s"% Gdata[DATAi],True,(255,255,128),None) #綜合繪制: 分?jǐn)?shù) 金幣 關(guān)卡 游戲時(shí)間
 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) #綜合繪制: 分?jǐn)?shù) 金幣 關(guān)卡 游戲時(shí)間
 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/4
 if 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-2
 if bg_w_1<-WIDTH:
 bg_w_1,bg_w_2 = 0,WIDTH-2

 screen.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) #游戲定時(shí)
 
 pygame.display.update()
 
if __name__ == '__main__':
 main()

以上是“python實(shí)現(xiàn)超級瑪麗游戲”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章標(biāo)題:python實(shí)現(xiàn)超級瑪麗游戲-創(chuàng)新互聯(lián)
本文地址:http://weahome.cn/article/ihohs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部