python程序实例源代码-python实例-兔子和獾(塔防游戏)附源码
原文:兔子和獾大战python小游戏
英文:https://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python
中文:http://blog.jobbole.com/46308/
贴上源码(亲试,已运行成功)
#coding:utf-8
#导入pygame库和一些常用的函数和常量
#1
import pygame
from pygame.locals import *
import math
import random
#2
#初始化pygame,创建了一个窗口
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
pygame.display.set_caption("game start")
keys = [False, False, False, False]
playerpos=[100,100]
acc=[0,0]
arrows=[]
#定义一个定时器,使得游戏里可以经过一段时间后就新建一只獾
badtimer=100
badtimer1=0
badguys=[[640,100]]
healthvalue=194
pygame.mixer.init()
#3
#加载本地图片
player = pygame.image.load("F:/BB_Resources/resources/images/dude.png")
grass = pygame.image.load("F:/BB_Resources/resources/images/grass.png")
castle = pygame.image.load("F:/BB_Resources/resources/images/castle.png")
arrow = pygame.image.load("F:/BB_Resources/resources/images/bullet.png")
#加载獾图片
badguyimg1 = pygame.image.load("F:/BB_Resources/resources/images/badguy.png")
badguyimg=badguyimg1
#加载健康图片
healthbar = pygame.image.load("F:/BB_Resources/resources/images/healthbar.png")
health = pygame.image.load("F:/BB_Resources/resources/images/health.png")
#加载输赢图片
gameover = pygame.image.load("F:/BB_Resources/resources/images/gameover.png")
youwin = pygame.image.load("F:/BB_Resources/resources/images/youwin.png")
#加载声音
hit = pygame.mixer.Sound("F:/BB_Resources/resources/audio/explode.wav")
enemy = pygame.mixer.Sound("F:/BB_Resources/resources/audio/enemy.wav")
shoot = pygame.mixer.Sound("F:/BB_Resources/resources/audio/shoot.wav")
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load('F:/BB_Resources/resources/audio/moonlight.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)
#4
# 进入循环
running = 1
exitcode = 0
while running:
badtimer-=1
#5 设置黑色背景
screen.fill(0)
#6
# 循环画上背景
for x in range(width/grass.get_width()+1):
for y in range(height/grass.get_height()+1):
screen.blit(grass,(x*100,y*100))
#画上四个城堡
screen.blit(castle,(0,30))
screen.blit(castle,(0,135))
screen.blit(castle,(0,240))
screen.blit(castle,(0,345 ))
#画上小兔子
#玩家旋转兔子
position = pygame.mouse.get_pos()
angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))
playerrot = pygame.transform.rotate(player, 360-angle*57.29)
playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
screen.blit(playerrot, playerpos1)
#画出箭头
for bullet in arrows:
index=0
velx=math.cos(bullet[0])*10
vely=math.sin(bullet[0])*10
bullet[1]+=velx
bullet[2]+=vely
if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
arrows.pop(index)
index+=1
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
#画上獾
if badtimer==0:
badguys.append([640, random.randint(50,430)])
badtimer=100-(badtimer1*2)
if badtimer1>=35:
badtimer1=35
else:
badtimer1+=5
index=0
for badguy in badguys:
if badguy[0]<-64:
badguys.pop(index)
badguy[0]-=7
#獾冲过来并且在碰到城堡的时候会消失。尽管你看不到,獾实际上会降低你的健康值。
badrect=pygame.Rect(badguyimg.get_rect())
badrect.top=badguy[1]
badrect.left=badguy[0]
if badrect.left<64:
hit.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
#检查箭头
index1=0
for bullet in arrows:
bullrect=pygame.Rect(arrow.get_rect())
bullrect.left=bullet[1]
bullrect.top=bullet[2]
if badrect.colliderect(bullrect):
enemy.play()
acc[0]+=1
badguys.pop(index)
arrows.pop(index1)
index1+=1
index+=1
for badguy in badguys:
screen.blit(badguyimg, badguy)
# 添加时钟用来计时
font = pygame.font.Font(None, 24)
survivedtext = font.render(str((90000-pygame.time.get_ticks())/60000)+":"+str((90000-pygame.time.get_ticks())/1000%60).zfill(2), True, (0,0,0))
textRect = survivedtext.get_rect()
textRect.topright=[635,5]
screen.blit(survivedtext, textRect)
#添加生命值显示
screen.blit(healthbar, (5,5))
for health1 in range(healthvalue):
screen.blit(health, (health1+8,8))
#7
# 刷新屏幕
pygame.display.flip()
#8设置游戏退出条件
for event in pygame.event.get():
if event.type == QUIT:
exit()
#定义玩家wasd四个按键用来控制方向
if event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
if event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False
elif event.key==pygame.K_a:
keys[1]=False
elif event.key==pygame.K_s:
keys[2]=False
elif event.key==pygame.K_d:
keys[3]=False
#玩家移动按键
if keys[0]:
playerpos[1]-=5
elif keys[2]:
playerpos[1]+=5
if keys[1]:
playerpos[0]-=5
elif keys[3]:
playerpos[0]+=5
#跟踪箭头
if event.type==pygame.MOUSEBUTTONDOWN:
shoot.play()
position=pygame.mouse.get_pos()
acc[1]+=1
arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])
#检查输赢
if pygame.time.get_ticks()>=90000:
running=0
exitcode=1
if healthvalue<=0:
running=0
exitcode=0
if acc[1]!=0:
accuracy=acc[0]*1.0/acc[1]*100
else:
accuracy=0
# 输赢显示
if exitcode==0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(gameover, (0,0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(youwin, (0,0))
screen.blit(text, textRect)
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
pygame.display.flip()
python程序实例源代码-python实例-兔子和獾(塔防游戏)附源码相关推荐
- python抢购火车票源代码_Python动刷新抢12306火车票的代码(附源码)
摘要:这篇Python开发技术栏目下的"Python动刷新抢12306火车票的代码(附源码)",介绍的技术点是"12306火车票.Python.12306.附源码.火车票 ...
- Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码)
Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码) 程序之美 泡泡 一直被孩子认为是神奇的东西.记得儿时,经常 趁大人不注意,偷偷抓一把洗衣粉撞到口袋里,然后自己悄悄的找来一个小瓶子, ...
- python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇
python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)--增删改查篇 前言 一.主界面的样式 二.学生信息的增,删,改,查 1.增加学生信息 2.删除学生信息 3.更改学 ...
- python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...
Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...
- python全景图像拼接_超详讲解图像拼接/全景图原理和应用 | 附源码
研究好玩又有用的技术第 008 期 在学习中发现快乐,在应用找到价值.这是我第八期分享图像技术应用的文章. 前七期欢迎阅读和分享: 概述 作者:Thalles Silva 编译:AI算法与图像处理 图 ...
- 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码
相关文件 想学Python的小伙伴可以关注小编的公众号[Python日志] 有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!! 需要源码的小伙伴可以在公众号回复视频下载器 简介 一 ...
- 【python】利用python的tkinter-canvas函数绘制哆啦A梦过程详解(附源码)
1 引 言 绘制哆啦A梦的过程,其实是对哆啦A梦进行拆解的过程,得先构思出他的头部.眼睛.鼻子.嘴巴.胡须.身体.铃铛.口袋.手以及脚等(如下图所示),才能进行下一步的绘画工作.心中有丘壑,方能水到渠 ...
- 【Python游戏】Python基于pygame实现的人机大战的斗兽棋小游戏 | 附源码
前言 有粉丝说要我出一期Python版本的斗兽棋,今天宠粉狂魔的我不就来啦!! 虽然是一个简单的小游戏,但是对于新手小伙伴来说还是有一定的小难度的哟!要是不理解都可以找到小编的哈!! 相关文件 关注小 ...
- 整理了30款Python小游戏附源码,五一有的玩了
快到五一了,整理了 30 款 Python 小游戏源码分享给大家,具体内容可以点击下方视频号查看: 点击上方视频后,源码获取方式:①关注上方视频号.②点赞当前视频.③在当前视频评论区扣1 友情提示:获 ...
- 【Python游戏】基于化学方程式的基础上,用Python实现一个消灭泡泡小游戏 | 附源码
前言 halo,包子们下午好 今天实现的这个小游戏呀,说实话化学不太好的小伙伴可能看起来会有点懵逼 不过不用担心,咱们今天不是来学化学的,我们是来学习Python的 所以呀,不要太担心啦,大家先好好看 ...
最新文章
- OSChina 周日乱弹 —— 冬季忧郁症五大特征
- Spark记录-Scala基础语法
- mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了
- S5PV210开发 -- 通过 DNW、fastboot 烧写
- Xposed源码剖析——hook具体实现
- 《古剑奇谭2》详细测评心得
- 小白开学Asp.Net Core 《七》
- 爱奇艺怎么开启从列表删除时同时删除本地文件
- 【转】CentOs中Apache开启rewrite模块详解
- Matlab Tricks(九)—— 矩阵行/列的增广(删除)
- 维智WSD-A2系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)
- RANSAC算法与原理(二)
- 谷歌搜索引擎机器学习原理理解
- 学生学籍管理系统课程设计报告书
- 华为充电的效果_华为充电特效主题插件下载-华为炫酷充电特效插件1.0.1安卓版-精品下载...
- 闰年和平年的区别python_连续四年中一定有一个闰年吗
- 贫富差距,不是收入分化,而是资产分化
- 计算机存储单位的换算关系
- MFC封装的base64编码解码函数
- 如何修改Maven仓库地址为阿里云仓库
热门文章
- base64 长度补全
- 理解一下jQuery.extend()和jQuery.fn.extend()方法
- WriteStrToReg() ReadStrFormReg()
- CNN----卷积为何能提取图像特征
- UIView的clipsTobounds属性
- BZOJ1453: [WC2005]Dface双面棋盘
- swustoj?id=15 A+B
- C++ 内连接与外连接 (转)
- ASP.NET MVC4简单使用ELMAH记录系统日志
- (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致...