python热狗大战
生活随笔
收集整理的這篇文章主要介紹了
python热狗大战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
**熱狗大戰 **
最近看了王思聰吃熱狗的圖,感覺很有趣,所以就做了一個小游戲,來給大家分享一下!
先讓大家看一下效果
游戲界面
結束界面
怎么樣?不錯吧?
今天就來做一下這個游戲
1.基礎部分
1.1導入模塊
這個游戲中有4個模塊,分別是pygame,os,random,time,sys。
導入都可以用pip方法。
1.2游戲窗口及圖片加載
#初始化pygame環境 pygame.init () #創建一個長寬分別為1300/700窗口 os.environ[ 'SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (100, 25) canvas = pygame.display.set_mode((1000,625)) canvas.fill((255,255,255))#設置窗口標題 pygame.display.set_caption("熱狗大戰")#加載圖片 bg = pygame.image.load("images/bg.jpg") h = pygame.image.load("images/hotdog.png") player = pygame.image.load("images/hero.png") end=pygame.image.load("images/end.jpg") bullet_tip=pygame.image.load("images/bullet_tip.png") time_tip=pygame.image.load("images/time_tip.png")1.3鍵盤反應
其實這個是挺重要的,沒鍵盤基本 啥都做不成。
看代碼:
2.運行部分
2.1類的使用
#英雄類 class Hero():def __init__(self,x,y,img):self.width=80self.height=133self.x=xself.y=yself.img=imgself.score=0def paint(self):canvas.blit(self.img,(self.x,self.y))def hit(self,c): #代表熱狗return c.x > self.x - c.width and \c.x < self.x + self.width and \c.y > self.y - c.height and \c.y < self.y + self.heightdef left(self):self.x = self.x - 50def right(self):self.x = self.x + 50def outOfBounds(self):if self.x < 0:self.x = self.x + 50if self.x > 1000 - self.width:self.x = self.x - 50#熱狗 類 class Hotdog():def __init__(self,x,y,img):self.width=30self.height=55self.x=random.randint(0,(1000-self.width))self.y=-self.heightself.img=imgdef paint(self):canvas.blit(self.img,(self.x,self.y))def step(self):self.y=self.y+102.2后臺工具
主要是用于加載繪制!
def isActionTime(lastTime,interval):if lastTime==0:return TruecurrentTime=time.time()return currentTime-lastTime>=intervaldef conEnter():global lastTimeif isActionTime(lastTime,interval):lastTime=time.time()hotdogs.append(Hotdog(0,-55,h))else:returndef conPaint():canvas.blit(bg,(0,0)) canvas.blit(bullet_tip,(800,5))fillText(str(hero.score),(880,40))hero.paint()for d in hotdogs:d.paint()def conStep():for d in hotdogs:d.step() hero=Hero(450, 450, player) hotdogs=[] lastTime=-100 interval=0.5 t=60 n=0 states = 'RUNNING' #設置游戲默認狀態為運行狀態文字及檢測部分
檢測是檢測熱狗與人發生的碰撞,及寫出分數并加1。
def gameTime():global t,ncanvas.blit(time_tip,(20,20))fillText(str(t),(35,35))if n%50==0:t=t-1n=n+1def checkHit(): #檢測熱狗是否與人物發生碰撞for d in hotdogs:if hero.hit(d):hero.score = hero.score + 1hotdogs.remove(d)def control():global statesif states == 'RUNNING':conEnter()conPaint()conStep()gameTime()checkHit()hero.outOfBounds()if t <= 0:states = 'OVER'if states == 'OVER':canvas.blit(end,(0,0))if hero.score < 10:fillTextOver(str(hero.score),(485,390))else:fillTextOver(str(hero.score),(470,390)) # 工具方法-寫文字方法 def fillText(text, position, view=canvas):# 設置字體樣式和大小my_font = pygame.font.Font("my_font/font1.ttf", 30)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)def fillTextOver(text, position, view=canvas):my_font = pygame.font.Font("my_font/font1.ttf", 50)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)3.最后一部分,游戲運行部分
加上這一段,可以幫助前面代碼持續運行并保持至GAME OVER。
while True:control()# 監聽有沒有按下退出按鈕handleEvent()# 更新屏幕內容pygame.display.update()#延時10毫秒 pygame.time.delay(10)4.全部代碼
全部代碼如下:
#coding:utf-8 import pygame from pygame.locals import * import time import random import sys import os #初始化pygame環境 pygame.init ()#創建一個長寬分別為1300/700窗口 os.environ[ 'SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (100, 25) canvas = pygame.display.set_mode((1000,625)) canvas.fill((255,255,255))#設置窗口標題 pygame.display.set_caption("熱狗大戰")#加載圖片 bg = pygame.image.load("images/bg.jpg") h = pygame.image.load("images/hotdog.png") player = pygame.image.load("images/hero.png") end=pygame.image.load("images/end.jpg") bullet_tip=pygame.image.load("images/bullet_tip.png") time_tip=pygame.image.load("images/time_tip.png")def handleEvent(): for event in pygame.event.get():if event.type == QUIT :pygame.quit() sys.exit()if states == 'RUNNING':if event.type == KEYDOWN and event.key == K_LEFT:hero.left()if event.type == KEYDOWN and event.key == K_RIGHT:hero.right()class Hero():def __init__(self,x,y,img):self.width=80self.height=133self.x=xself.y=yself.img=imgself.score=0def paint(self):canvas.blit(self.img,(self.x,self.y))def hit(self,c): #代表熱狗return c.x > self.x - c.width and \c.x < self.x + self.width and \c.y > self.y - c.height and \c.y < self.y + self.heightdef left(self):self.x = self.x - 50def right(self):self.x = self.x + 50def outOfBounds(self):if self.x < 0:self.x = self.x + 50if self.x > 1000 - self.width:self.x = self.x - 50class Hotdog():def __init__(self,x,y,img):self.width=30self.height=55self.x=random.randint(0,(1000-self.width))self.y=-self.heightself.img=imgdef paint(self):canvas.blit(self.img,(self.x,self.y))def step(self):self.y=self.y+10def isActionTime(lastTime,interval):if lastTime==0:return TruecurrentTime=time.time()return currentTime-lastTime>=intervaldef conEnter():global lastTimeif isActionTime(lastTime,interval):lastTime=time.time()hotdogs.append(Hotdog(0,-55,h))else:returndef conPaint():canvas.blit(bg,(0,0)) canvas.blit(bullet_tip,(800,5))fillText(str(hero.score),(880,40))hero.paint()for d in hotdogs:d.paint()def conStep():for d in hotdogs:d.step() hero=Hero(450, 450, player) hotdogs=[] lastTime=-100 interval=0.5 t=60 n=0 states = 'RUNNING' #設置游戲默認狀態為運行狀態def gameTime():global t,ncanvas.blit(time_tip,(20,20))fillText(str(t),(35,35))if n%50==0:t=t-1n=n+1def checkHit(): #檢測熱狗是否與人物發生碰撞for d in hotdogs:if hero.hit(d):hero.score = hero.score + 1hotdogs.remove(d)def control():global statesif states == 'RUNNING':conEnter()conPaint()conStep()gameTime()checkHit()hero.outOfBounds()if t <= 0:states = 'OVER'if states == 'OVER':canvas.blit(end,(0,0))if hero.score < 10:fillTextOver(str(hero.score),(485,390))else:fillTextOver(str(hero.score),(470,390)) # 工具方法-寫文字方法 def fillText(text, position, view=canvas):# 設置字體樣式和大小my_font = pygame.font.Font("my_font/font1.ttf", 30)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position)def fillTextOver(text, position, view=canvas):my_font = pygame.font.Font("my_font/font1.ttf", 50)# 渲染文字text = my_font.render(text, True, (255, 255, 255))view.blit(text, position) while True:control()# 監聽有沒有按下退出按鈕handleEvent()# 更新屏幕內容pygame.display.update()#延時10毫秒 pygame.time.delay(10)全文總共174行,打起來并不難,希望大家多打代碼,多練手。想要素材請發郵箱注明“素材“二字,想要全部代碼及素材請發郵箱并注明”代碼”二字,發在評論區或私信都可以!
另外,本人第一次寫博客,代碼或解釋有何不對可以指出!
記得點贊哦!!!
總結
以上是生活随笔為你收集整理的python热狗大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows下安装linux环境
- 下一篇: SQK Server实现 LeetCod