学了这么长时间的Pygame,一直想写个游戏实战一下。看起来很简单的游戏,写其来怎么这么难。最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读。后来,要想写一个帮助记忆的挖宝箱的游戏,结果也没完成。唯一完成了就是下面这个小人接金币的游戏,超级简单,通过左右键控制小人移动去接空中下来的金币,接住金币得5分,接不住游戏结束,金币速度会随着level的关数而越来越快。完成这段代码后,我依然觉得这段代码写得很差,确实也是自己对pygame只是掌握了皮毛,对surface、sprite这些理解的还不透彻。这里把代码写出来,有时间的大牛们可以帮助指点一下,让我也有所提高。

# -*- coding: cp936 -*-

'''

一个超级简单的游戏

左右键控制小人移动去接空中下来的金币,接住金币得5分,接不住游戏结束,金币速度会随着level的关数

而越来越快

'''

import pygame,sys,os,random

pygame.init()

class rect():#画出小人

def __init__(self,filename,initial_position):

self.image=pygame.image.load(filename)

self.rect=self.image.get_rect()

self.rect.topleft=initial_position

class goldrect(pygame.sprite.Sprite):#绘出金币

def __init__(self,gold_position,speed):

pygame.sprite.Sprite.__init__(self)

self.image=pygame.image.load('image\\gold.png')

self.rect=self.image.get_rect()

self.rect.topleft=gold_position

self.speed=speed

def move(self):

self.rect=self.rect.move(self.speed)

def drawback(): #绘出背景图片

my_back=pygame.image.load('image\\qi3.jpg')

bakscreen.blit(my_back,[0,0])

def loadtext(levelnum,score,highscore):#绘出成绩、level、最高分等

my_font=pygame.font.SysFont(None,24)

levelstr='Level:'+str(levelnum)

text_screen=my_font.render(levelstr, True, (255, 0, 0))

bakscreen.blit(text_screen, (650,50))

highscorestr='Higescore:'+str(highscore)

text_screen=my_font.render(highscorestr, True, (255, 0, 0))

bakscreen.blit(text_screen, (650,80))

scorestr='Score:'+str(score)

text_screen=my_font.render(scorestr, True, (255, 0, 0))

bakscreen.blit(text_screen, (650,110))

def loadgameover(scorenum,highscore):#绘出GAME OVER

my_font=pygame.font.SysFont(None,50)

levelstr='GAME OVER'

over_screen=my_font.render(levelstr, True, (255, 0, 0))

bakscreen.blit(over_screen, (300,240))

highscorestr='YOUR SCORE IS '+str(scorenum)

over_screen=my_font.render(highscorestr, True, (255, 0, 0))

bakscreen.blit(over_screen, (280,290))

if scorenum>int(highscore):#写入最高分

highscorestr='YOUR HAVE GOT THE HIGHEST SCORE!'

text_screen=my_font.render(highscorestr, True, (255, 0, 0))

bakscreen.blit(text_screen, (100,340))

highfile=open('highscore','w')

highfile.writelines(str(scorenum))

highfile.close()

def gethighscore(): #读取最高分

if os.path.isfile('highscore'):

highfile=open('highscore','r')

highscore=highfile.readline()

highfile.close()

else:

highscore=0

return highscore

bakscreen=pygame.display.set_mode([800,600])

bakscreen.fill([0,160,233])

pygame.display.set_caption('Dig!Dig!')

drawback()

levelnum=1 #level

scorenum=0 #得分

highscore=gethighscore()#最高分

ileft=1 #记录向左移动步数,用来控制图片

iright=10 #记录向右移动步数,用来控制图片

x=100

y=450

filename='image\\1.png'

backimg_ren=rect(filename,[x,y])

bakscreen.blit(backimg_ren.image,backimg_ren.rect)

loadtext(levelnum,scorenum,highscore)

goldx=random.randint(50,580)

speed=[0,levelnum]

mygold=goldrect([goldx,100],speed)

pygame.display.update()

while True:

if scorenum>0 and scorenum/50.0==int(scorenum/50.0):#当得分是50的倍数时修改level

levelnum=scorenum/50+1

speed=[0,levelnum]

for event in pygame.event.get():

if event.type==pygame.QUIT:

sys.exit()

#make gold

pressed_keys = pygame.key.get_pressed()

if pressed_keys[pygame.K_LEFT]:#按下左键

drawback()

loadtext(levelnum,scorenum,highscore)

if iright > 14 :iright=10

iright=iright+1

filename='image\\'+str(iright)+'.png'

if x<50 :

x=50

else:

x=x-10

backimg_surface=rect(filename,[x,y])

bakscreen.blit(backimg_surface.image,backimg_surface.rect)

if pressed_keys[pygame.K_RIGHT]:#按下右键

drawback()

loadtext(levelnum,scorenum,highscore)

if ileft > 4 :ileft=0

ileft=ileft+1

filename='image\\'+str(ileft)+'.png'

if x>560:

x=560

else:

x=x+10

backimg_surface=rect(filename,[x,y])

bakscreen.blit(backimg_surface.image,backimg_surface.rect)

drawback()

loadtext(levelnum,scorenum,highscore)

mygold.move()

bakscreen.blit(mygold.image,mygold.rect)

backimg_surface=rect(filename,[x,y])

bakscreen.blit(backimg_surface.image,backimg_surface.rect)

if mygold.rect.top>600:#判断金币是否着地,一但着地,游戏结束

loadgameover(scorenum,highscore)

if mygold.rect.colliderect(backimg_surface.rect):#判断金币是否与小人碰撞,如果碰撞表示小人接到金币

scorenum+=5

loadtext(levelnum,scorenum,highscore)

goldx=random.randint(50,580)

mygold=goldrect([goldx,100],speed)

pygame.display.update()

程序中用到的资源可从这里下载:文件名:gold.7z, 访问地址:http://www.kuaipan.cn/file/id_16699292408348719.htm

本文标题: pygame学习笔记(6):完成一个简单的游戏

本文地址: http://www.cppcns.com/jiaoben/python/122745.html

python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏相关推荐

  1. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...

    2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...

  2. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  3. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...

  4. python编程制作接金币游戏_一个简单的pygame接金币游戏

    左右键控制小人移动去接空中下来的金币,接住金币得5分,接不住游戏结束,金币速度会随着level的关数 而越来越快 import pygame,sys,os,random pygame.init() c ...

  5. 《Python编程从入门到实践》学习笔记8(第9章:类)

    笔者从昨天开始感觉到了课程的难度,接下来不能简单的概括知识点.笔者将会按照书上的标题章节来整理知识点.这样看起来会更加直观. 9.1 创建类和使用类 9.1.1 创建Dog类 1 class Dog( ...

  6. CocosCreator学习1:做一个简单的游戏

    把计步器写好了,到了写游戏场景.控件什么的时候,傻眼了.想做一个简单的地图,可以在地图上点击选择城市,发现用Cocos2D-X代码码出来好麻烦,尤其是城市位置问题,需要调试去找对像素区域做一个按钮控制 ...

  7. Django学习笔记2:一个简单的开发实例

    Technorati 标签: Python,Django 目标:通过开发一个简单的Todo管理应用,熟悉Django的基本概念.和使用. 运行环境 Windows Vista + Python 2.7 ...

  8. ROS2学习笔记13--编写一个简单的发布器和侦听器(C++)

    概要:这篇主要介绍编写发布器和侦听器的简单套路(C++) 环境:ubuntu20.04,ros2-foxy,vscode 最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现. 2. ...

  9. python编程制作接金币游戏_pygame闪电侠接金币整套源代码

    python the flash man pick coin闪电侠接金币动画图 本程序采用闪电侠美剧的音乐,气势宏大,激情飞扬. """ 闪电侠接金币.本程序先会显示封面 ...

最新文章

  1. 中plot 函数中字体大小_Excel中的VLOOKUP函数
  2. 【已解决】百度云分享失败
  3. 2018-2019 20165204 20165216 20165220 实验四 外设驱动程序设计
  4. win7系统电脑连接小米蓝牙音箱
  5. PHP生成excel表格文件并下载
  6. 计算机毕业设计——简单的网页设计
  7. 定制性MES系统软件
  8. Java选出偶数,Java 定义集合存入20个随机数字,通过自定义方法筛选偶数元素,放入新集合,打印输出...
  9. 微信小程序:高德地图搜索周边poi接口实践
  10. Elasticsearch学习之的delimited_payloads使用
  11. 3dsmax快捷键大全
  12. 电脑开机黑屏---只有一个鼠标箭头处理办法
  13. 如何梳理陌生的代码模块
  14. 案例 | 重新定义“一个人的小酒”,RIO如何微醺营销击中00后的心?
  15. Redis入门指南 第1章 简介 Redis的几项特性
  16. Excel转Json工具(支持GUI模式和命令行模式)
  17. Meta首席运营官宣布离职 入职14年助推公司市值超万亿美元
  18. 红旗颂的感情多么真挚,突然很理解老一代们:-)
  19. virtual audio cable 虚拟声卡
  20. 大数据 Hadoop 生态体系介绍

热门文章

  1. ubuntu 关机重启
  2. 汉中计算机培训班学费是多少,汉中远程教育培训班收费多少
  3. 基类数组存放派生类_永远不要将派生类数组赋值给基类类型指针
  4. C++ vector的释放
  5. C++文件交互(txt、excel)
  6. c语言让电脑发出滴滴声代码,centos命令行控制电脑发出滴滴声——使用beep把警告变为music...
  7. 把ipa文件上传到服务器,windows电脑上传ipa到appstore的详细流程
  8. Gitlab添加SSH密钥的解决办法
  9. 一种移动端自适应屏幕的方法
  10. ubuntu下c 访问mysql_Ubuntu下用C语言访问MySQL数据库