原文:兔子和獾大战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实例-兔子和獾(塔防游戏)附源码相关推荐

  1. python抢购火车票源代码_Python动刷新抢12306火车票的代码(附源码)

    摘要:这篇Python开发技术栏目下的"Python动刷新抢12306火车票的代码(附源码)",介绍的技术点是"12306火车票.Python.12306.附源码.火车票 ...

  2. Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码)

    Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码) 程序之美 泡泡 一直被孩子认为是神奇的东西.记得儿时,经常 趁大人不注意,偷偷抓一把洗衣粉撞到口袋里,然后自己悄悄的找来一个小瓶子, ...

  3. python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇

    python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)--增删改查篇 前言 一.主界面的样式 二.学生信息的增,删,改,查 1.增加学生信息 2.删除学生信息 3.更改学 ...

  4. python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...

    Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...

  5. python全景图像拼接_超详讲解图像拼接/全景图原理和应用 | 附源码

    研究好玩又有用的技术第 008 期 在学习中发现快乐,在应用找到价值.这是我第八期分享图像技术应用的文章. 前七期欢迎阅读和分享: 概述 作者:Thalles Silva 编译:AI算法与图像处理 图 ...

  6. 【Python工具】Python实现一款支持各大平台的视频下载器 | 附源码

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

  7. 【python】利用python的tkinter-canvas函数绘制哆啦A梦过程详解(附源码)

    1 引 言 绘制哆啦A梦的过程,其实是对哆啦A梦进行拆解的过程,得先构思出他的头部.眼睛.鼻子.嘴巴.胡须.身体.铃铛.口袋.手以及脚等(如下图所示),才能进行下一步的绘画工作.心中有丘壑,方能水到渠 ...

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

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

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

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

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

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

最新文章

  1. OSChina 周日乱弹 —— 冬季忧郁症五大特征
  2. Spark记录-Scala基础语法
  3. mybatis 传入id_想深入理解MyBatis架构及原理实例分析 把握这些就够了
  4. S5PV210开发 -- 通过 DNW、fastboot 烧写
  5. Xposed源码剖析——hook具体实现
  6. 《古剑奇谭2》详细测评心得
  7. 小白开学Asp.Net Core 《七》
  8. 爱奇艺怎么开启从列表删除时同时删除本地文件
  9. 【转】CentOs中Apache开启rewrite模块详解
  10. Matlab Tricks(九)—— 矩阵行/列的增广(删除)
  11. 维智WSD-A2系列伺服驱动器用户手册(MECHATROLINK-Ⅱ总线通信型)
  12. RANSAC算法与原理(二)
  13. 谷歌搜索引擎机器学习原理理解
  14. 学生学籍管理系统课程设计报告书
  15. 华为充电的效果_华为充电特效主题插件下载-华为炫酷充电特效插件1.0.1安卓版-精品下载...
  16. 闰年和平年的区别python_连续四年中一定有一个闰年吗
  17. 贫富差距,不是收入分化,而是资产分化
  18. 计算机存储单位的换算关系
  19. MFC封装的base64编码解码函数
  20. 如何修改Maven仓库地址为阿里云仓库

热门文章

  1. base64 长度补全
  2. 理解一下jQuery.extend()和jQuery.fn.extend()方法
  3. WriteStrToReg() ReadStrFormReg()
  4. CNN----卷积为何能提取图像特征
  5. UIView的clipsTobounds属性
  6. BZOJ1453: [WC2005]Dface双面棋盘
  7. swustoj?id=15 A+B
  8. C++ 内连接与外连接 (转)
  9. ASP.NET MVC4简单使用ELMAH记录系统日志
  10. (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致...